active_scaffold 3.7.5 → 3.7.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba64ea5cfd0c7476b2a534dd60d646c9b25b00f86278873e132d930336007673
4
- data.tar.gz: 5ec04a9180e01392a6718ba25453a2731819a53551ef15de1e58e207533b1881
3
+ metadata.gz: 5777dd56be3d144f2c62d8b2fa3cf8a0e765155d3afd445b5d150ce25c203155
4
+ data.tar.gz: 2c2ef1fbe12d539b84d81d48d1a2d373f3634a864664d61ab27099c783f404c4
5
5
  SHA512:
6
- metadata.gz: 67a8322a087fbb94b4c2b51d2bb8a4687fe76e0d4c73eae18d57b30d2457fb85bbe30d67c5b84a1e3b6dfd0100710b79cd304d81cac087d49f9f0967900343df
7
- data.tar.gz: ff5d7ae043ba814460a375d3f146115fc8b9fd0a21b5d9ea7c31410ff52b85c83641d27ac5ab9c99724b22e38265542eb141c8eafd64ba173e76e0c4145ecefb
6
+ metadata.gz: e13283f6ae89cf8618e070ee0e6afa87a47389eaee7043a669ab771f82c6aec2dbbdf2317c57ca6872785622e601d0d1278140e53cf24ca5245a88f9353dfe97
7
+ data.tar.gz: ea569709001c16bae097715c62fe9a9717597c288b2504d2c930e55aa01b28e77b53c29583d3e0462c86f329aebae8c8a82d73c832b14332a8999ee777d42e3c
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,16 @@
1
+ = 3.7.7
2
+ - Fix usage with mongoid, broken on 3.7.5
3
+ - Support proc or lambda in label of action links
4
+ - Set successful to false when update_column is not authorized for the column
5
+ - Use action link's label for flash message when custom action is not authorized
6
+ - Add default_value to columns, so default_value can be defined in AS config, overriding DB default
7
+ - Fix caching query from association_klass_scoped in subforms, when returns different queries for the same association on different rows
8
+
9
+ = 3.7.6
10
+ - Respect :label_method set in form_ui_options on list.
11
+ - Fix grouped search for PostgreSQL
12
+ - Fix loading current search params when search form is open and store_user_settings is disabled
13
+
1
14
  = 3.7.5
2
15
  - Fix always show search for nested list on multi-level through associations
3
16
  - Support changing step, min and max options with column options or search_ui options for decimal and integer search_ui
@@ -4,7 +4,7 @@
4
4
  <h4><%= link.confirm(h(record&.to_label)) -%></h4>
5
5
 
6
6
  <p class="form-footer">
7
- <%= submit_tag as_(link.label), :class => 'submit' %>
7
+ <%= submit_tag as_(link.label(record)), :class => 'submit' %>
8
8
  <%= link_to as_(:cancel), main_path_to_return, :class => 'cancel' %>
9
9
  </p>
10
10
 
@@ -3,9 +3,9 @@ module ActiveScaffold::Actions
3
3
  def self.included(base)
4
4
  return if base < InstanceMethods
5
5
  base.send :include, InstanceMethods
6
- base.before_action :search_authorized_filter, :only => :show_search
7
- base.before_action :store_search_params_into_session, :only => [:index]
8
- base.before_action :do_search, :only => [:index]
6
+ base.before_action :search_authorized_filter, only: :show_search
7
+ base.before_action :store_search_params_into_session, :only => %i[index show_search]
8
+ base.before_action :do_search, only: [:index]
9
9
  base.helper_method :search_params
10
10
  end
11
11
 
@@ -294,7 +294,7 @@ module ActiveScaffold::Actions
294
294
  end
295
295
  end
296
296
 
297
- def new_model
297
+ def empty_model
298
298
  relation = beginning_of_chain
299
299
  if nested? && nested.plural_association? && nested.match_model?(active_scaffold_config.model)
300
300
  build_options = sti_nested_build_options(relation.klass)
@@ -302,6 +302,18 @@ module ActiveScaffold::Actions
302
302
  relation.respond_to?(:build) ? relation.build(build_options || {}) : relation.new
303
303
  end
304
304
 
305
+ def new_model
306
+ empty_model.tap do |record|
307
+ assign_default_attributes record
308
+ end
309
+ end
310
+
311
+ def assign_default_attributes(record)
312
+ active_scaffold_config.columns.each do |column|
313
+ record.write_attribute column.name, column.default_value if column.default_value?
314
+ end
315
+ end
316
+
305
317
  def sti_nested_build_options(klass)
306
318
  config = active_scaffold_config_for(klass)
307
319
  return unless config
@@ -391,7 +403,7 @@ module ActiveScaffold::Actions
391
403
  get_row(crud_type_or_security_options)
392
404
  if @record.nil?
393
405
  self.successful = false
394
- flash[:error] = as_(:no_authorization_for_action, :action => action_name)
406
+ flash[:error] = as_(:no_authorization_for_action, :action => @action_link&.label(nil) || action_name)
395
407
  else
396
408
  yield @record
397
409
  end
@@ -12,7 +12,7 @@ module ActiveScaffold::Actions
12
12
  # FieldSearch uses params[:search] and not @record because search conditions do not always pass the Model's validations.
13
13
  # This facilitates for example, textual searches against associations via .search_sql
14
14
  def show_search
15
- @record = new_model
15
+ @record = empty_model
16
16
  super
17
17
  end
18
18
 
@@ -56,25 +56,33 @@ module ActiveScaffold::Actions
56
56
 
57
57
  def custom_finder_options
58
58
  if grouped_search?
59
- group_sql = calculation_for_group_by(search_group_column&.field || search_group_name)
60
- select_query = grouped_search_select
61
- select_query << group_sql.as(search_group_column.name.to_s) if search_group_column && group_sql.respond_to?(:to_sql)
62
- {group: group_sql, select: select_query}
59
+ grouped_search_finder_options
63
60
  else
64
61
  super
65
62
  end
66
63
  end
67
64
 
65
+ def grouped_search_finder_options
66
+ group_sql = calculation_for_group_by(search_group_column&.field || search_group_name, search_group_function) if search_group_function
67
+ group_by = group_sql&.to_sql || quoted_select_columns(search_group_column&.select_columns || [search_group_name])
68
+ select_query = grouped_search_select + (group_sql ? [group_sql.as(search_group_column.name.to_s)] : group_by)
69
+ {group: group_by, select: select_query, reorder: grouped_sorting(group_by)}
70
+ end
71
+
68
72
  def grouped_search_select
69
- select_query = quoted_select_columns(search_group_column&.select_columns || [search_group_name])
70
- if active_scaffold_config.model.columns_hash.include?(active_scaffold_config.model.inheritance_column)
71
- select_query << active_scaffold_config.columns[active_scaffold_config.model.inheritance_column].field
72
- end
73
- grouped_columns_calculations.each do |name, part|
74
- select_query << (part.respond_to?(:as) ? part : Arel::Nodes::SqlLiteral.new(part)).as(name.to_s)
73
+ grouped_columns_calculations.map do |name, part|
74
+ (part.respond_to?(:as) ? part : Arel::Nodes::SqlLiteral.new(part)).as(name.to_s)
75
75
  end
76
76
  end
77
77
 
78
+ def grouped_sorting(group_sql)
79
+ return unless search_group_column && active_scaffold_config.list.user.sorting
80
+ group_sort = search_group_function ? group_sql : search_group_column.sort[:sql] if search_group_column.sortable?
81
+ grouped_columns = grouped_columns_calculations.merge(search_group_column.name => group_sort)
82
+ sorting = active_scaffold_config.list.user.sorting.clause(grouped_columns)
83
+ active_scaffold_config.active_record? ? sorting&.map(&Arel.method(:sql)) : sorting
84
+ end
85
+
78
86
  def grouped_columns_calculations
79
87
  @grouped_columns_calculations ||= list_columns[1..-1].each_with_object({}) do |c, h|
80
88
  h[c.name] = calculation_for_group_search(c)
@@ -85,21 +93,24 @@ module ActiveScaffold::Actions
85
93
  sql_function column.calculate.to_s, column.active_record_class.arel_table[column.name]
86
94
  end
87
95
 
88
- def calculation_for_group_by(group_sql)
89
- return group_sql unless search_group_function
96
+ def calculation_for_group_by(group_sql, group_function)
90
97
  group_sql = Arel::Nodes::SqlLiteral.new(group_sql)
91
- case search_group_function
98
+ case group_function
92
99
  when 'year', 'month', 'quarter'
93
- sql_function(search_group_function, group_sql)
100
+ extract_sql_fn(group_function, group_sql)
94
101
  when 'year_month'
95
- sql_function('extract', sql_operator(Arel::Nodes::SqlLiteral.new('YEAR_MONTH'), 'FROM', group_sql))
102
+ sql_operator(sql_operator(extract_sql_fn('year', group_sql), '*', 100), '+', extract_sql_fn('month', group_sql))
96
103
  when 'year_quarter'
97
- sql_operator(sql_operator(sql_function('year', group_sql), '*', 10), '+', sql_function('quarter', group_sql))
104
+ sql_operator(sql_operator(extract_sql_fn('year', group_sql), '*', 10), '+', extract_sql_fn('quarter', group_sql))
98
105
  else
99
- raise "#{search_group_function} unsupported, override calculation_for_group_by in #{self.class.name}"
106
+ raise "#{group_function} unsupported, override calculation_for_group_by in #{self.class.name}"
100
107
  end
101
108
  end
102
109
 
110
+ def extract_sql_fn(part, column)
111
+ sql_function('extract', sql_operator(Arel::Nodes::SqlLiteral.new(part), 'FROM', column))
112
+ end
113
+
103
114
  def sql_function(function, *args)
104
115
  args.map! { |arg| quoted_arel_value(arg) }
105
116
  Arel::Nodes::NamedFunction.new(function, args)
@@ -150,9 +150,8 @@ module ActiveScaffold::Actions
150
150
  params.delete(:original_html)
151
151
  params.delete(:original_value)
152
152
  @column = active_scaffold_config.columns[column]
153
- value_record = record_for_update_column
154
- return unless value_record
155
153
 
154
+ value_record = record_for_update_column
156
155
  value = value_for_update_column(value, @column, value_record)
157
156
  value_record.send("#{@column.name}=", value)
158
157
  before_update_save(@record)
@@ -168,16 +167,19 @@ module ActiveScaffold::Actions
168
167
  end
169
168
  end
170
169
  after_update_save(@record)
170
+ rescue ActiveScaffold::ActionNotAllowed
171
+ self.successful = false
171
172
  end
172
173
 
173
174
  def record_for_update_column
174
175
  @record = find_if_allowed(params[:id], :read)
175
- return unless @record.authorized_for?(:crud_type => :update, :column => @column.name)
176
+ raise ActiveScaffold::ActionNotAllowed unless @record.authorized_for?(:crud_type => :update, :column => @column.name)
176
177
 
177
178
  if @column.delegated_association
178
179
  value_record = @record.send(@column.delegated_association.name)
179
180
  value_record ||= @record.association(@column.delegated_association.name).build
180
- value_record if value_record.authorized_for?(:crud_type => :update, :column => @column.name)
181
+ raise ActiveScaffold::ActionNotAllowed unless value_record.authorized_for?(:crud_type => :update, :column => @column.name)
182
+ value_record
181
183
  else
182
184
  @record
183
185
  end
@@ -185,7 +187,7 @@ module ActiveScaffold::Actions
185
187
 
186
188
  def value_for_update_column(param_value, column, record)
187
189
  unless param_value
188
- param_value = ActiveScaffold::Core.column_type_cast column.default_for_empty_value, column.column
190
+ param_value = column.default_for_empty_value
189
191
  param_value = false if param_value == true
190
192
  end
191
193
  value = column_value_from_param_value(record, column, param_value)
@@ -267,12 +267,12 @@ module ActiveScaffold
267
267
  end
268
268
 
269
269
  def self.mongoid_column_type_cast(value, column)
270
- return Time.zone.at(value.to_i) if value =~ /\A\d+\z/ && [Time, DateTime].include?(column.type)
270
+ return Time.zone.at(value.to_i) if [Time, DateTime].include?(column.type) && value =~ /\A\d+\z/
271
271
  column.type.evolve value
272
272
  end
273
273
 
274
274
  def self.active_record_column_type_cast(value, column_or_type)
275
- return Time.zone.at(value.to_i) if value =~ /\A\d+\z/ && %i[time datetime].include?(column_or_type.type)
275
+ return Time.zone.at(value.to_i) if %i[time datetime].include?(column_or_type.type) && value =~ /\A\d+\z/
276
276
  cast_type = column_or_type.is_a?(ActiveRecord::ConnectionAdapters::Column) ? ActiveRecord::Type.lookup(column_or_type.type) : column_or_type
277
277
  cast_type ? cast_type.cast(value) : value
278
278
  end
@@ -77,8 +77,15 @@ module ActiveScaffold::DataStructures
77
77
 
78
78
  # what string to use to represent this action
79
79
  attr_writer :label
80
- def label
81
- @label.is_a?(Symbol) ? ActiveScaffold::Registry.cache(:translations, @label) { as_(@label) } : @label
80
+ def label(record = nil)
81
+ case @label
82
+ when Symbol
83
+ ActiveScaffold::Registry.cache(:translations, @label) { as_(@label) }
84
+ when Proc
85
+ @label.call(record)
86
+ else
87
+ @label
88
+ end
82
89
  end
83
90
 
84
91
  # image to use {:name => 'arrow.png', :size => '16x16'}
@@ -139,8 +139,15 @@ module ActiveScaffold::DataStructures
139
139
  end
140
140
 
141
141
  attr_writer :label
142
- def label
143
- as_(@label) if @label
142
+ def label(record)
143
+ case @label
144
+ when Symbol
145
+ ActiveScaffold::Registry.cache(:translations, @label) { as_(@label) }
146
+ when Proc
147
+ @label.call(record)
148
+ else
149
+ @label
150
+ end
144
151
  end
145
152
 
146
153
  def method_missing(name, *args, &block)
@@ -37,6 +37,19 @@ module ActiveScaffold::DataStructures
37
37
  @params ||= NO_PARAMS.dup
38
38
  end
39
39
 
40
+ def default_value
41
+ @default_value || @db_default_value
42
+ end
43
+
44
+ def default_value=(value)
45
+ raise ArgumentError, "Can't set default value for non-DB columns (virtual columns or associations)" unless column
46
+ @default_value = value
47
+ end
48
+
49
+ def default_value?
50
+ defined? @default_value
51
+ end
52
+
40
53
  # the display-name of the column. this will be used, for instance, as the column title in the table and as the field name in the form.
41
54
  # if left alone it will utilize human_attribute_name which includes localization
42
55
  attr_writer :label
@@ -377,6 +390,7 @@ module ActiveScaffold::DataStructures
377
390
  if @column.nil? && active_record? && active_record_class._default_attributes.key?(name.to_s)
378
391
  @column = active_record_class._default_attributes[name.to_s]
379
392
  end
393
+ @db_default_value = ActiveScaffold::OrmChecks.default_value active_record_class, name if @column
380
394
  @delegated_association = delegated_association
381
395
  @cache_key = [@active_record_class.name, name].compact.map(&:to_s).join('#')
382
396
  setup_association_info
@@ -455,10 +469,8 @@ module ActiveScaffold::DataStructures
455
469
  return nil unless column
456
470
  if column.is_a?(ActiveModel::Attribute)
457
471
  column.value
458
- elsif active_record?
459
- null? ? nil : column.default
460
- elsif mongoid?
461
- column.default_val
472
+ else
473
+ default_value
462
474
  end
463
475
  end
464
476
 
@@ -487,10 +499,6 @@ module ActiveScaffold::DataStructures
487
499
  ActiveScaffold::OrmChecks.column_type active_record_class, name
488
500
  end
489
501
 
490
- def default_value
491
- ActiveScaffold::OrmChecks.column_type active_record_class, name
492
- end
493
-
494
502
  def attributes=(opts)
495
503
  opts.each do |setting, value|
496
504
  send "#{setting}=", value
@@ -121,14 +121,14 @@ module ActiveScaffold::DataStructures
121
121
  end
122
122
 
123
123
  # builds an order-by clause
124
- def clause(grouped_columns_calculations = nil)
124
+ def clause(grouped_columns = nil)
125
125
  return nil if sorts_by_method? || default_sorting?
126
126
 
127
127
  # unless the sorting is by method, create the sql string
128
128
  order = []
129
129
  each do |sort_column, sort_direction|
130
130
  next if constraint_columns.include? sort_column.name
131
- sql = grouped_columns_calculations&.dig(sort_column.name) || sort_column.sort[:sql]
131
+ sql = grouped_columns ? grouped_columns[sort_column.name] : sort_column.sort[:sql]
132
132
  next if sql.blank?
133
133
  sql = sql.to_sql if sql.respond_to?(:to_sql)
134
134
 
@@ -138,7 +138,7 @@ module ActiveScaffold::DataStructures
138
138
  order << parts
139
139
  end
140
140
 
141
- order << @primary_key_order_clause if @sorting_by_primary_key
141
+ order << @primary_key_order_clause if @sorting_by_primary_key && grouped_columns.nil?
142
142
  order.flatten!(1)
143
143
  order unless order.empty?
144
144
  end
@@ -577,7 +577,7 @@ module ActiveScaffold
577
577
  def finder_options(options = {})
578
578
  search_conditions = all_conditions
579
579
 
580
- sorting = options[:sorting]&.clause((grouped_columns_calculations if grouped_search?))
580
+ sorting = options[:sorting]&.clause
581
581
  sorting = sorting.map(&Arel.method(:sql)) if sorting && active_scaffold_config.active_record?
582
582
  # create a general-use options array that's compatible with Rails finders
583
583
  finder_options = {
@@ -68,7 +68,7 @@ module ActiveScaffold
68
68
  group_tag = :li
69
69
  end
70
70
  content = content_tag(group_tag, :class => html_classes.presence, :onclick => ('' if hover_via_click?)) do
71
- content_tag(:div, as_(link.label), :class => link.name.to_s.downcase) << content_tag(:ul, content)
71
+ content_tag(:div, as_(link.label(record)), :class => link.name.to_s.downcase) << content_tag(:ul, content)
72
72
  end
73
73
  else
74
74
  content = render_action_link(link, record, options)
@@ -86,7 +86,7 @@ module ActiveScaffold
86
86
  end
87
87
  if link.action.nil? || (link.type == :member && options.key?(:authorized) && !options[:authorized])
88
88
  html_class = "disabled #{link.action}#{" #{link.html_options[:class]}" if link.html_options[:class].present?}"
89
- html_options = {:link => action_link_text(link, options), :class => html_class, :title => options[:not_authorized_reason]}
89
+ html_options = {:link => action_link_text(link, record, options), :class => html_class, :title => options[:not_authorized_reason]}
90
90
  action_link_html(link, nil, html_options, record)
91
91
  else
92
92
  url = action_link_url(link, record)
@@ -298,8 +298,8 @@ module ActiveScaffold
298
298
  url_options
299
299
  end
300
300
 
301
- def action_link_text(link, options)
302
- text = image_tag(link.image[:name], :size => link.image[:size], :alt => options[:link] || link.label, :title => options[:link] || link.label) if link.image
301
+ def action_link_text(link, record, options)
302
+ text = image_tag(link.image[:name], :size => link.image[:size], :alt => options[:link] || link.label(record), :title => options[:link] || link.label(record)) if link.image
303
303
  text || options[:link]
304
304
  end
305
305
 
@@ -329,7 +329,7 @@ module ActiveScaffold
329
329
  def action_link_html_options(link, record, options)
330
330
  link_id = get_action_link_id(link, record)
331
331
  html_options = link.html_options.merge(:class => [link.html_options[:class], link.action.to_s].compact.join(' '))
332
- html_options[:link] = action_link_text(link, options)
332
+ html_options[:link] = action_link_text(link, record, options)
333
333
 
334
334
  # Needs to be in html_options to as the adding _method to the url is no longer supported by Rails
335
335
  html_options[:method] = link.method if link.method != :get
@@ -388,7 +388,7 @@ module ActiveScaffold
388
388
 
389
389
  def action_link_html(link, url, html_options, record)
390
390
  label = html_options.delete(:link)
391
- label ||= link.label
391
+ label ||= link.label(record)
392
392
  if url.nil?
393
393
  content_tag(:a, label, html_options)
394
394
  else
@@ -6,7 +6,7 @@ module ActiveScaffold
6
6
  def cache_association_options(association, conditions, klass, cache = true)
7
7
  if active_scaffold_config.cache_association_options && cache
8
8
  @_associations_cache ||= Hash.new { |h, k| h[k] = {} }
9
- key = [association.name, association.inverse_klass.name, klass.name].join('/')
9
+ key = [association.name, association.inverse_klass.name, klass.respond_to?(:cache_key) ? klass.cache_key : klass.name].join('/')
10
10
  @_associations_cache[key][conditions] ||= yield
11
11
  else
12
12
  yield
@@ -31,8 +31,8 @@ module ActiveScaffold
31
31
  end
32
32
 
33
33
  conditions ||= send(association_helper_method(association, :options_for_association_conditions), association, record)
34
+ klass = send(association_helper_method(association, :association_klass_scoped), association, klass, record)
34
35
  cache_association_options(association, conditions, klass, cache) do
35
- klass = send(association_helper_method(association, :association_klass_scoped), association, klass, record)
36
36
  relation = klass.where(conditions)
37
37
  column = column_for_association(association, record)
38
38
  if column&.includes
@@ -181,6 +181,7 @@ module ActiveScaffold
181
181
  parent_record.send("build_#{association.name}")
182
182
  else
183
183
  association.klass.new.tap do |record|
184
+ assign_default_attributes record
184
185
  save_record_to_association(record, association.reverse_association, parent_record) # set inverse
185
186
  end
186
187
  end
@@ -226,7 +226,10 @@ module ActiveScaffold
226
226
  I18n.t(options[:group_format] || search_group_function, scope: 'date.formats', num: value)
227
227
  when 'month'
228
228
  I18n.l(Date.new(Time.zone.today.year, value, 1), format: options[:group_format] || search_group_function.to_sym)
229
- else value
229
+ when 'year'
230
+ value.to_i
231
+ else
232
+ value
230
233
  end
231
234
  end
232
235
 
@@ -263,7 +266,7 @@ module ActiveScaffold
263
266
  end
264
267
 
265
268
  def format_association_value(value, column, size)
266
- method = column.options[:label_method] || :to_label
269
+ method = (column.list_ui_options || column.options)[:label_method] || :to_label
267
270
  value =
268
271
  if column.association.collection?
269
272
  format_collection_association_value(value, column, method, size)
@@ -157,7 +157,7 @@ module ActiveScaffold
157
157
  cache_keys ||= [method, model.name]
158
158
  ActiveScaffold::Registry.cache(*cache_keys) do
159
159
  model_names = [model.name]
160
- model_names << model.base_class.name if model.base_class != model
160
+ model_names << model.base_class.name if model.respond_to?(:base_class) && model.base_class != model
161
161
  method_with_class = model_names.find do |model_name|
162
162
  method_with_class = "#{clean_class_name(model_name)}_#{method}"
163
163
  break method_with_class if respond_to?(method_with_class)
@@ -85,9 +85,9 @@ module ActiveScaffold
85
85
 
86
86
  def default_value(klass, column_name)
87
87
  if ActiveScaffold::OrmChecks.mongoid? klass
88
- columns_hash(klass)[column_name]&.default_val
88
+ columns_hash(klass)[column_name.to_s]&.default_val
89
89
  elsif ActiveScaffold::OrmChecks.active_record? klass
90
- klass._default_attributes[column_name]&.value
90
+ klass._default_attributes[column_name.to_s]&.value
91
91
  end
92
92
  end
93
93
 
@@ -2,7 +2,7 @@ module ActiveScaffold
2
2
  module Version
3
3
  MAJOR = 3
4
4
  MINOR = 7
5
- PATCH = 5
5
+ PATCH = 7
6
6
  FIX = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, FIX].compact.join('.')
@@ -75,13 +75,13 @@ class FinderTest < Minitest::Test
75
75
 
76
76
  def test_condition_for_column
77
77
  column = ActiveScaffold::DataStructures::Column.new('adult', Person)
78
- assert_equal ['"people"."adult" = ?', false], ClassWithFinder.condition_for_column(column, '0')
78
+ assert_equal ['"people"."adult" = ?', false], ClassWithFinder.condition_for_column(column, '0', :full, {})
79
79
  end
80
80
 
81
81
  def test_condition_for_polymorphic_column
82
82
  column = ActiveScaffold::DataStructures::Column.new('addressable', Address)
83
83
  column.search_sql = [{subquery: [Building, 'name']}]
84
- condition = ClassWithFinder.condition_for_column(column, 'test search')
84
+ condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
85
85
  assert_equal Building.where(['name LIKE ?', '%test search%']).select(:id).to_sql, condition[1].to_sql
86
86
  assert_equal '"addresses"."addressable_id" IN (?) AND "addresses"."addressable_type" = ?', condition[0]
87
87
  assert_equal ['Building'], condition[2..-1]
@@ -90,7 +90,7 @@ class FinderTest < Minitest::Test
90
90
  def test_condition_for_polymorphic_column_with_relation
91
91
  column = ActiveScaffold::DataStructures::Column.new('contactable', Contact)
92
92
  column.search_sql = [{subquery: [Person.joins(:buildings), 'first_name', 'last_name']}]
93
- condition = ClassWithFinder.condition_for_column(column, 'test search')
93
+ condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
94
94
  assert_equal Person.joins(:buildings).where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
95
95
  assert_equal '"contacts"."contactable_id" IN (?) AND "contacts"."contactable_type" = ?', condition[0]
96
96
  assert_equal ['Person'], condition[2..-1]
@@ -100,7 +100,7 @@ class FinderTest < Minitest::Test
100
100
  column = ActiveScaffold::DataStructures::Column.new('owner', Building)
101
101
  column.search_sql = [{subquery: [Person, 'first_name', 'last_name'], conditions: ['floor_count > 0']}]
102
102
  column.search_ui = :text
103
- condition = ClassWithFinder.condition_for_column(column, 'test search')
103
+ condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
104
104
  assert_equal Person.where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
105
105
  assert_equal '"buildings"."owner_id" IN (?) AND floor_count > 0', condition[0]
106
106
  assert_equal [], condition[2..-1]
@@ -110,7 +110,7 @@ class FinderTest < Minitest::Test
110
110
  column = ActiveScaffold::DataStructures::Column.new('owner', Building)
111
111
  column.search_sql = [{subquery: [Person, 'first_name', 'last_name'], conditions: ['floor_count > 0 AND name != ?', '']}]
112
112
  column.search_ui = :text
113
- condition = ClassWithFinder.condition_for_column(column, 'test search')
113
+ condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
114
114
  assert_equal Person.where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
115
115
  assert_equal '"buildings"."owner_id" IN (?) AND floor_count > 0 AND name != ?', condition[0]
116
116
  assert_equal [''], condition[2..-1]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.5
4
+ version: 3.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Many, see README
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-18 00:00:00.000000000 Z
11
+ date: 2024-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails