mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
fix hound
This commit is contained in:
parent
4f951f6679
commit
0baa7a1f99
|
@ -13,15 +13,18 @@ module RepositoryDatatableHelper
|
||||||
'2': escape_input(record.name),
|
'2': escape_input(record.name),
|
||||||
'3': I18n.l(record.created_at, format: :full),
|
'3': I18n.l(record.created_at, format: :full),
|
||||||
'4': escape_input(record.created_by.full_name),
|
'4': escape_input(record.created_by.full_name),
|
||||||
'recordEditUrl':
|
'recordEditUrl': Rails.application.routes.url_helpers
|
||||||
Rails.application.routes.url_helpers
|
.edit_repository_repository_row_path(
|
||||||
.edit_repository_repository_row_path(repository,
|
repository,
|
||||||
record.id),
|
record.id
|
||||||
'recordUpdateUrl':
|
),
|
||||||
Rails.application.routes.url_helpers
|
'recordUpdateUrl': Rails.application.routes.url_helpers
|
||||||
.repository_repository_row_path(repository, record.id),
|
.repository_repository_row_path(
|
||||||
'recordInfoUrl':
|
repository,
|
||||||
Rails.application.routes.url_helpers.repository_row_path(record.id)
|
record.id
|
||||||
|
),
|
||||||
|
'recordInfoUrl': Rails.application.routes.url_helpers
|
||||||
|
.repository_row_path(record.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add custom columns
|
# Add custom columns
|
||||||
|
|
|
@ -14,7 +14,8 @@ class RepositoryDatatableService
|
||||||
private
|
private
|
||||||
|
|
||||||
def create_columns_mappings
|
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
|
i = 5
|
||||||
@mappings = {}
|
@mappings = {}
|
||||||
@repository.repository_columns.order(:id).each do |column|
|
@repository.repository_columns.order(:id).each do |column|
|
||||||
|
@ -24,9 +25,8 @@ class RepositoryDatatableService
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_query
|
def process_query
|
||||||
contitions = build_conditions(@params)
|
order_obj = build_conditions(@params)[:order_by_column]
|
||||||
order_obj = contitions[:order_by_column]
|
search_value = build_conditions(@params)[:search_value]
|
||||||
search_value = contitions[:search_value]
|
|
||||||
if search_value.present?
|
if search_value.present?
|
||||||
@repository_rows = sort_rows(order_obj, search(search_value))
|
@repository_rows = sort_rows(order_obj, search(search_value))
|
||||||
else
|
else
|
||||||
|
@ -53,7 +53,8 @@ class RepositoryDatatableService
|
||||||
else
|
else
|
||||||
@assigned_rows = repository_rows.joins(
|
@assigned_rows = repository_rows.joins(
|
||||||
'INNER JOIN my_module_repository_rows ON
|
'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
|
end
|
||||||
repository_rows
|
repository_rows
|
||||||
|
@ -61,8 +62,10 @@ class RepositoryDatatableService
|
||||||
|
|
||||||
def search(value)
|
def search(value)
|
||||||
includes_json = {
|
includes_json = {
|
||||||
repository_cells: [:repository_text_value,
|
repository_cells: [
|
||||||
repository_list_value: :repository_list_item ]
|
:repository_text_value,
|
||||||
|
repository_list_value: :repository_list_item
|
||||||
|
]
|
||||||
}
|
}
|
||||||
RepositoryRow .left_outer_joins(:created_by)
|
RepositoryRow .left_outer_joins(:created_by)
|
||||||
.left_outer_joins(includes_json)
|
.left_outer_joins(includes_json)
|
||||||
|
@ -98,7 +101,9 @@ class RepositoryDatatableService
|
||||||
end
|
end
|
||||||
|
|
||||||
def sort_rows(column_obj, records)
|
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]
|
column_index = column_obj[:column]
|
||||||
col_order = @repository.repository_table_states
|
col_order = @repository.repository_table_states
|
||||||
.find_by_user_id(@user.id)
|
.find_by_user_id(@user.id)
|
||||||
|
@ -106,17 +111,22 @@ class RepositoryDatatableService
|
||||||
column_id = col_order[column_index].to_i
|
column_id = col_order[column_index].to_i
|
||||||
|
|
||||||
if sortable_columns[column_id - 1] == 'assigned'
|
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
|
if @my_module
|
||||||
# Depending on the sort, order nulls first or
|
# Depending on the sort, order nulls first or
|
||||||
# nulls last on repository_cells association
|
# nulls last on repository_cells association
|
||||||
return records.joins(
|
return records.joins(
|
||||||
"LEFT OUTER JOIN my_module_repository_rows ON
|
"LEFT OUTER JOIN my_module_repository_rows ON
|
||||||
(repository_rows.id = my_module_repository_rows.repository_row_id
|
(repository_rows.id =
|
||||||
AND (my_module_repository_rows.my_module_id = #{@my_module.id} OR
|
my_module_repository_rows.repository_row_id
|
||||||
my_module_repository_rows.id IS NULL))"
|
AND (my_module_repository_rows.my_module_id =
|
||||||
|
#{@my_module.id}
|
||||||
|
OR my_module_repository_rows.id IS NULL))"
|
||||||
).order(
|
).order(
|
||||||
"my_module_repository_rows.id NULLS #{sort_null_direction(dir)}"
|
"my_module_repository_rows.id NULLS
|
||||||
|
#{sort_null_direction(dir)}"
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
return sort_assigned_records(records, dir)
|
return sort_assigned_records(records, dir)
|
||||||
|
@ -127,12 +137,16 @@ class RepositoryDatatableService
|
||||||
return records unless type
|
return records unless type
|
||||||
return select_type(type.data_type, records, id, dir)
|
return select_type(type.data_type, records, id, dir)
|
||||||
else
|
else
|
||||||
return records.order("#{sortable_columns[column_id - 1]} #{dir}")
|
return records.order(
|
||||||
|
"#{sortable_columns[column_id - 1]} #{dir}"
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def sort_assigned_records(records, direction)
|
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)
|
unassigned = records.where.not(id: assigned).pluck(:id)
|
||||||
if direction == 'ASC'
|
if direction == 'ASC'
|
||||||
ids = assigned + unassigned
|
ids = assigned + unassigned
|
||||||
|
@ -149,10 +163,14 @@ class RepositoryDatatableService
|
||||||
end
|
end
|
||||||
|
|
||||||
def select_type(type, records, id, dir)
|
def select_type(type, records, id, dir)
|
||||||
return filter_by_text_value(
|
case type
|
||||||
records, id, dir) if type == 'RepositoryTextValue'
|
when 'RepositoryTextValue'
|
||||||
return filter_by_list_value(
|
filter_by_text_value(records, id, dir)
|
||||||
records, id, dir) if type == 'RepositoryListValue'
|
when 'RepositoryListValue'
|
||||||
|
filter_by_list_value(records, id, dir)
|
||||||
|
else
|
||||||
|
records
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def sort_null_direction(val)
|
def sort_null_direction(val)
|
||||||
|
@ -160,7 +178,7 @@ class RepositoryDatatableService
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_by_text_value(records, id, dir)
|
def filter_by_text_value(records, id, dir)
|
||||||
return records.joins(
|
records.joins(
|
||||||
"LEFT OUTER JOIN (SELECT repository_cells.repository_row_id,
|
"LEFT OUTER JOIN (SELECT repository_cells.repository_row_id,
|
||||||
repository_text_values.data AS value
|
repository_text_values.data AS value
|
||||||
FROM repository_cells
|
FROM repository_cells
|
||||||
|
@ -172,7 +190,7 @@ class RepositoryDatatableService
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_by_list_value(records, id, dir)
|
def filter_by_list_value(records, id, dir)
|
||||||
return records.joins(
|
records.joins(
|
||||||
"LEFT OUTER JOIN (SELECT repository_cells.repository_row_id,
|
"LEFT OUTER JOIN (SELECT repository_cells.repository_row_id,
|
||||||
repository_list_items.data AS value
|
repository_list_items.data AS value
|
||||||
FROM repository_cells
|
FROM repository_cells
|
||||||
|
|
|
@ -98,11 +98,10 @@ RSpec.describe RepositoryListValue, type: :model do
|
||||||
|
|
||||||
it 'retuns only the the item related to the list' do
|
it 'retuns only the the item related to the list' do
|
||||||
repository_row_two = create :repository_row, name: 'New row'
|
repository_row_two = create :repository_row, name: 'New row'
|
||||||
repository_list_value_two =
|
create :repository_list_value, repository_cell_attributes: {
|
||||||
create :repository_list_value, repository_cell_attributes: {
|
repository_column: repository_column,
|
||||||
repository_column: repository_column,
|
repository_row: repository_row_two
|
||||||
repository_row: repository_row_two
|
}
|
||||||
}
|
|
||||||
list_item = create :repository_list_item,
|
list_item = create :repository_list_item,
|
||||||
data: 'new item',
|
data: 'new item',
|
||||||
repository: repository,
|
repository: repository,
|
||||||
|
@ -113,10 +112,9 @@ RSpec.describe RepositoryListValue, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns an empty string if no item selected' do
|
it 'returns an empty string if no item selected' do
|
||||||
list_item = create :repository_list_item,
|
create :repository_list_item, data: 'my item',
|
||||||
data: 'my item',
|
repository: repository,
|
||||||
repository: repository,
|
repository_column: repository_column
|
||||||
repository_column: repository_column
|
|
||||||
expect(repository_list_value.reload.data).to be_nil
|
expect(repository_list_value.reload.data).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,13 @@ describe RepositoryDatatableService do
|
||||||
let!(:team) { create :team }
|
let!(:team) { create :team }
|
||||||
let!(:user) { create :user, email: 'user_one@asdf.com' }
|
let!(:user) { create :user, email: 'user_one@asdf.com' }
|
||||||
let!(:repository) do
|
let!(:repository) do
|
||||||
create :repository, name: 'my repo', created_by: user, team: team
|
create :repository, name: 'my repo',
|
||||||
|
created_by: user,
|
||||||
|
team: team
|
||||||
end
|
end
|
||||||
let!(:repository_column) do
|
let!(:repository_column) do
|
||||||
create :repository_column, name: 'My column', data_type: :RepositoryListValue
|
create :repository_column, name: 'My column',
|
||||||
|
data_type: :RepositoryListValue
|
||||||
end
|
end
|
||||||
let!(:repository_state) do
|
let!(:repository_state) do
|
||||||
RepositoryTableState.create(
|
RepositoryTableState.create(
|
||||||
|
@ -29,33 +32,41 @@ describe RepositoryDatatableService do
|
||||||
last_modified_by: user
|
last_modified_by: user
|
||||||
end
|
end
|
||||||
let!(:list_item) do
|
let!(:list_item) do
|
||||||
create :repository_list_item, data: 'bug',
|
create :repository_list_item,
|
||||||
repository: repository,
|
data: 'bug',
|
||||||
repository_column: repository_column,
|
repository: repository,
|
||||||
created_by: user,
|
repository_column: repository_column,
|
||||||
last_modified_by: user
|
created_by: user,
|
||||||
|
last_modified_by: user
|
||||||
end
|
end
|
||||||
let!(:repository_list_value) do
|
let!(:repository_list_value) do
|
||||||
create :repository_list_value, repository_list_item: list_item,
|
create :repository_list_value,
|
||||||
created_by: user,
|
repository_list_item: list_item,
|
||||||
last_modified_by: user,
|
created_by: user,
|
||||||
repository_cell_attributes: {
|
last_modified_by: user,
|
||||||
repository_column: repository_column,
|
repository_cell_attributes: {
|
||||||
repository_row: repository_row
|
repository_column: repository_column,
|
||||||
}
|
repository_row: repository_row
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'object' do
|
context 'object' do
|
||||||
let(:params) 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
|
end
|
||||||
let(:subject) { RepositoryDatatableService.new(repository, params, user) }
|
|
||||||
|
|
||||||
describe '#build_conditions/1' do
|
describe '#build_conditions/1' do
|
||||||
it 'parsers the contitions' do
|
it 'parsers the contitions' do
|
||||||
contitions = subject.send(:build_conditions, params)
|
contitions = subject.send(:build_conditions, params)
|
||||||
expect(contitions[:search_value]).to eq 'row'
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -83,7 +94,9 @@ describe RepositoryDatatableService do
|
||||||
it 'is ordered by row name asc' do
|
it 'is ordered by row name asc' do
|
||||||
params = { order: { 0 => { column: '2', dir: 'asc' } },
|
params = { order: { 0 => { column: '2', dir: 'asc' } },
|
||||||
search: { value: '' } }
|
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.first.name).to eq 'A row'
|
||||||
expect(subject.repository_rows.last.name).to eq 'B row'
|
expect(subject.repository_rows.last.name).to eq 'B row'
|
||||||
end
|
end
|
||||||
|
@ -91,7 +104,9 @@ describe RepositoryDatatableService do
|
||||||
it 'is ordered by row name desc' do
|
it 'is ordered by row name desc' do
|
||||||
params = { order: { 0 => { column: '2', dir: 'desc' } },
|
params = { order: { 0 => { column: '2', dir: 'desc' } },
|
||||||
search: { value: '' } }
|
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.first.name).to eq 'B row'
|
||||||
expect(subject.repository_rows.last.name).to eq 'A row'
|
expect(subject.repository_rows.last.name).to eq 'A row'
|
||||||
end
|
end
|
||||||
|
@ -108,7 +123,9 @@ describe RepositoryDatatableService do
|
||||||
it 'returns only the searched entity' do
|
it 'returns only the searched entity' do
|
||||||
params = { order: { 0 => { column: '2', dir: 'desc' } },
|
params = { order: { 0 => { column: '2', dir: 'desc' } },
|
||||||
search: { value: 'test' } }
|
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.first.name).to eq 'test'
|
||||||
expect(subject.repository_rows.count).to eq 1
|
expect(subject.repository_rows.count).to eq 1
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue