From 0baa7a1f998dcdec1dbf7147653fa1774349fe7f Mon Sep 17 00:00:00 2001 From: zmagod Date: Fri, 9 Mar 2018 14:43:12 +0100 Subject: [PATCH] fix hound --- app/helpers/repository_datatable_helper.rb | 21 ++++--- app/services/repository_datatable_service.rb | 60 ++++++++++++------- spec/models/repository_list_value_spec.rb | 16 +++-- .../repository_datatable_service_spec.rb | 57 +++++++++++------- 4 files changed, 95 insertions(+), 59 deletions(-) diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index 7604e7123..f07546648 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -13,15 +13,18 @@ module RepositoryDatatableHelper '2': escape_input(record.name), '3': I18n.l(record.created_at, format: :full), '4': escape_input(record.created_by.full_name), - 'recordEditUrl': - Rails.application.routes.url_helpers - .edit_repository_repository_row_path(repository, - record.id), - 'recordUpdateUrl': - Rails.application.routes.url_helpers - .repository_repository_row_path(repository, record.id), - 'recordInfoUrl': - Rails.application.routes.url_helpers.repository_row_path(record.id) + 'recordEditUrl': Rails.application.routes.url_helpers + .edit_repository_repository_row_path( + repository, + record.id + ), + 'recordUpdateUrl': Rails.application.routes.url_helpers + .repository_repository_row_path( + repository, + record.id + ), + 'recordInfoUrl': Rails.application.routes.url_helpers + .repository_row_path(record.id) } # Add custom columns diff --git a/app/services/repository_datatable_service.rb b/app/services/repository_datatable_service.rb index 60dcc3b42..a3f3c0ceb 100644 --- a/app/services/repository_datatable_service.rb +++ b/app/services/repository_datatable_service.rb @@ -14,7 +14,8 @@ class RepositoryDatatableService private def create_columns_mappings - # Make mappings of custom columns, so we have same id for every column + # Make mappings of custom columns, so we have same id for every + # column i = 5 @mappings = {} @repository.repository_columns.order(:id).each do |column| @@ -24,9 +25,8 @@ class RepositoryDatatableService end def process_query - contitions = build_conditions(@params) - order_obj = contitions[:order_by_column] - search_value = contitions[:search_value] + order_obj = build_conditions(@params)[:order_by_column] + search_value = build_conditions(@params)[:search_value] if search_value.present? @repository_rows = sort_rows(order_obj, search(search_value)) else @@ -53,7 +53,8 @@ class RepositoryDatatableService else @assigned_rows = repository_rows.joins( 'INNER JOIN my_module_repository_rows ON - (repository_rows.id = my_module_repository_rows.repository_row_id)' + (repository_rows.id = + my_module_repository_rows.repository_row_id)' ) end repository_rows @@ -61,8 +62,10 @@ class RepositoryDatatableService def search(value) includes_json = { - repository_cells: [:repository_text_value, - repository_list_value: :repository_list_item ] + repository_cells: [ + :repository_text_value, + repository_list_value: :repository_list_item + ] } RepositoryRow .left_outer_joins(:created_by) .left_outer_joins(includes_json) @@ -98,7 +101,9 @@ class RepositoryDatatableService end def sort_rows(column_obj, records) - dir = %w[DESC ASC].find { |dir| dir == column_obj[:dir].upcase } || 'ASC' + dir = %w(DESC ASC).find do |dir| + dir == column_obj[:dir].upcase + end || 'ASC' column_index = column_obj[:column] col_order = @repository.repository_table_states .find_by_user_id(@user.id) @@ -106,17 +111,22 @@ class RepositoryDatatableService column_id = col_order[column_index].to_i if sortable_columns[column_id - 1] == 'assigned' - return records if @my_module && @params[:assigned] == 'assigned' + if @my_module && @params[:assigned] == 'assigned' + return records + end if @my_module # Depending on the sort, order nulls first or # nulls last on repository_cells association return records.joins( "LEFT OUTER JOIN my_module_repository_rows ON - (repository_rows.id = my_module_repository_rows.repository_row_id - AND (my_module_repository_rows.my_module_id = #{@my_module.id} OR - my_module_repository_rows.id IS NULL))" + (repository_rows.id = + my_module_repository_rows.repository_row_id + AND (my_module_repository_rows.my_module_id = + #{@my_module.id} + OR my_module_repository_rows.id IS NULL))" ).order( - "my_module_repository_rows.id NULLS #{sort_null_direction(dir)}" + "my_module_repository_rows.id NULLS + #{sort_null_direction(dir)}" ) else return sort_assigned_records(records, dir) @@ -127,12 +137,16 @@ class RepositoryDatatableService return records unless type return select_type(type.data_type, records, id, dir) else - return records.order("#{sortable_columns[column_id - 1]} #{dir}") + return records.order( + "#{sortable_columns[column_id - 1]} #{dir}" + ) end end def sort_assigned_records(records, direction) - assigned = records.joins(:my_module_repository_rows).distinct.pluck(:id) + assigned = records.joins(:my_module_repository_rows) + .distinct + .pluck(:id) unassigned = records.where.not(id: assigned).pluck(:id) if direction == 'ASC' ids = assigned + unassigned @@ -149,10 +163,14 @@ class RepositoryDatatableService end def select_type(type, records, id, dir) - return filter_by_text_value( - records, id, dir) if type == 'RepositoryTextValue' - return filter_by_list_value( - records, id, dir) if type == 'RepositoryListValue' + case type + when 'RepositoryTextValue' + filter_by_text_value(records, id, dir) + when 'RepositoryListValue' + filter_by_list_value(records, id, dir) + else + records + end end def sort_null_direction(val) @@ -160,7 +178,7 @@ class RepositoryDatatableService end def filter_by_text_value(records, id, dir) - return records.joins( + records.joins( "LEFT OUTER JOIN (SELECT repository_cells.repository_row_id, repository_text_values.data AS value FROM repository_cells @@ -172,7 +190,7 @@ class RepositoryDatatableService end def filter_by_list_value(records, id, dir) - return records.joins( + records.joins( "LEFT OUTER JOIN (SELECT repository_cells.repository_row_id, repository_list_items.data AS value FROM repository_cells diff --git a/spec/models/repository_list_value_spec.rb b/spec/models/repository_list_value_spec.rb index 4c9905bab..59dd9886c 100644 --- a/spec/models/repository_list_value_spec.rb +++ b/spec/models/repository_list_value_spec.rb @@ -98,11 +98,10 @@ RSpec.describe RepositoryListValue, type: :model do it 'retuns only the the item related to the list' do repository_row_two = create :repository_row, name: 'New row' - repository_list_value_two = - create :repository_list_value, repository_cell_attributes: { - repository_column: repository_column, - repository_row: repository_row_two - } + create :repository_list_value, repository_cell_attributes: { + repository_column: repository_column, + repository_row: repository_row_two + } list_item = create :repository_list_item, data: 'new item', repository: repository, @@ -113,10 +112,9 @@ RSpec.describe RepositoryListValue, type: :model do end it 'returns an empty string if no item selected' do - list_item = create :repository_list_item, - data: 'my item', - repository: repository, - repository_column: repository_column + create :repository_list_item, data: 'my item', + repository: repository, + repository_column: repository_column expect(repository_list_value.reload.data).to be_nil end diff --git a/spec/services/repository_datatable_service_spec.rb b/spec/services/repository_datatable_service_spec.rb index 2e1369e9a..e32b13f19 100644 --- a/spec/services/repository_datatable_service_spec.rb +++ b/spec/services/repository_datatable_service_spec.rb @@ -4,10 +4,13 @@ describe RepositoryDatatableService do let!(:team) { create :team } let!(:user) { create :user, email: 'user_one@asdf.com' } let!(:repository) do - create :repository, name: 'my repo', created_by: user, team: team + create :repository, name: 'my repo', + created_by: user, + team: team end let!(:repository_column) do - create :repository_column, name: 'My column', data_type: :RepositoryListValue + create :repository_column, name: 'My column', + data_type: :RepositoryListValue end let!(:repository_state) do RepositoryTableState.create( @@ -29,33 +32,41 @@ describe RepositoryDatatableService do last_modified_by: user end let!(:list_item) do - create :repository_list_item, data: 'bug', - repository: repository, - repository_column: repository_column, - created_by: user, - last_modified_by: user + create :repository_list_item, + data: 'bug', + repository: repository, + repository_column: repository_column, + created_by: user, + last_modified_by: user end let!(:repository_list_value) do - create :repository_list_value, repository_list_item: list_item, - created_by: user, - last_modified_by: user, - repository_cell_attributes: { - repository_column: repository_column, - repository_row: repository_row - } + create :repository_list_value, + repository_list_item: list_item, + created_by: user, + last_modified_by: user, + repository_cell_attributes: { + repository_column: repository_column, + repository_row: repository_row + } end context 'object' do let(:params) do - { order: { 0 => { column: '2', dir: 'asc' } }, search: { value: 'row' } } + { order: { 0 => { column: '2', dir: 'asc' } }, + search: { value: 'row' } } + end + + let(:subject) do + RepositoryDatatableService.new(repository, params, user) end - let(:subject) { RepositoryDatatableService.new(repository, params, user) } describe '#build_conditions/1' do it 'parsers the contitions' do contitions = subject.send(:build_conditions, params) expect(contitions[:search_value]).to eq 'row' - expect(contitions[:order_by_column]).to eq({ column: 2, dir: 'asc' }) + expect(contitions[:order_by_column]).to eq( + { column: 2, dir: 'asc' } + ) end end @@ -83,7 +94,9 @@ describe RepositoryDatatableService do it 'is ordered by row name asc' do params = { order: { 0 => { column: '2', dir: 'asc' } }, search: { value: '' } } - subject = RepositoryDatatableService.new(repository, params, user) + subject = RepositoryDatatableService.new(repository, + params, + user) expect(subject.repository_rows.first.name).to eq 'A row' expect(subject.repository_rows.last.name).to eq 'B row' end @@ -91,7 +104,9 @@ describe RepositoryDatatableService do it 'is ordered by row name desc' do params = { order: { 0 => { column: '2', dir: 'desc' } }, search: { value: '' } } - subject = RepositoryDatatableService.new(repository, params, user) + subject = RepositoryDatatableService.new(repository, + params, + user) expect(subject.repository_rows.first.name).to eq 'B row' expect(subject.repository_rows.last.name).to eq 'A row' end @@ -108,7 +123,9 @@ describe RepositoryDatatableService do it 'returns only the searched entity' do params = { order: { 0 => { column: '2', dir: 'desc' } }, search: { value: 'test' } } - subject = RepositoryDatatableService.new(repository, params, user) + subject = RepositoryDatatableService.new(repository, + params, + user) expect(subject.repository_rows.first.name).to eq 'test' expect(subject.repository_rows.count).to eq 1 end