rails_admin 3.1.2 → 3.1.4

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: 30d6fc9f03e406c3d6fa8dd301e3eef853896b37cac25945932c0d419a7976be
4
- data.tar.gz: 508731ccf0a76e22863b6734ea577810cace41acc9c88ab8211b09a7bdf4a74e
3
+ metadata.gz: d5c339d2ccdf48b8a126925a718e54ad8532ee871a33fa22fb5ffb1c3a5ba4c1
4
+ data.tar.gz: 24b7a110bea7b982955181511f8153ffdadc678ba9bb385bc5593e960d4b8aaa
5
5
  SHA512:
6
- metadata.gz: 16acc5f74fa950492490ed2a20e589368bf67f5d614b8c729aec7308240d0c8e1b7e92531408681a169b1670cd11dbb0cc500ac69517755f5fb7b5e84447a4ad
7
- data.tar.gz: 06bf86fd3219b28249f42503f0de0a053b4c528a995c06096d2c44f9250cc8383ba32709d31d43b022608d177531754fcf4bde2dff82ad55beb9a5ba4517928e
6
+ metadata.gz: ad40b7df17867ef7a1fb1a876439d0973c5cfbc6664425b99fa316a1585e22f1d3aca77c06c4482df1d0973c5deaf2823623fc1c359d4da5c59903b73172ac15
7
+ data.tar.gz: 0baddc871248327616c90514329513150b0d903339f6cd3a1562b16600a00242e7f02b8c9d1a8ec81421d65cb5cf2550ee15abdafa2ba0f804f7d45e5d645812
data/Gemfile CHANGED
@@ -14,7 +14,7 @@ group :active_record do
14
14
 
15
15
  platforms :ruby, :mswin, :mingw, :x64_mingw do
16
16
  gem 'mysql2', '>= 0.3.14'
17
- gem 'sqlite3', '>= 1.3'
17
+ gem 'sqlite3', '~> 1.3'
18
18
  end
19
19
  end
20
20
 
@@ -29,7 +29,7 @@ group :test do
29
29
  gem 'database_cleaner-active_record', '>= 2.0', require: false
30
30
  gem 'database_cleaner-mongoid', '>= 2.0', require: false
31
31
  gem 'dragonfly', '~> 1.0'
32
- gem 'factory_bot', '>= 4.2'
32
+ gem 'factory_bot', '>= 4.2', '!= 6.4.5'
33
33
  gem 'generator_spec', '>= 0.8'
34
34
  gem 'launchy', '>= 2.2'
35
35
  gem 'mini_magick', '>= 3.4'
@@ -19,8 +19,8 @@
19
19
  <%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
20
20
  <%= javascript_inline_importmap_tag(RailsAdmin::Engine.importmap.to_json(resolver: self)) %>
21
21
  <%= javascript_importmap_module_preload_tags(RailsAdmin::Engine.importmap) %>
22
- <%= javascript_importmap_shim_nonce_configuration_tag %>
23
- <%= javascript_importmap_shim_tag %>
22
+ <%= javascript_importmap_shim_nonce_configuration_tag if respond_to? :javascript_importmap_shim_nonce_configuration_tag %>
23
+ <%= javascript_importmap_shim_tag if respond_to? :javascript_importmap_shim_tag %>
24
24
  <%= # Preload jQuery and make it global, unless jQuery UI fails to initialize
25
25
  tag.script "import jQuery from 'jquery'; window.jQuery = jQuery;".html_safe, type: "module" %>
26
26
  <%= javascript_import_module_tag 'rails_admin' %>
@@ -133,9 +133,9 @@
133
133
  <% end %>
134
134
  <% properties.map{ |property| property.bind(:object, object) }.each do |property| %>
135
135
  <% value = property.pretty_value %>
136
- <td class="<%= [property.sticky? && 'sticky', property.css_class, property.type_css_class].select(&:present?).join(' ') %>" title="<%= strip_tags(value.to_s) %>">
136
+ <%= content_tag(:td, class: [property.sticky? && 'sticky', property.css_class, property.type_css_class].select(&:present?), title: strip_tags(value.to_s)) do %>
137
137
  <%= value %>
138
- </td>
138
+ <% end %>
139
139
  <% end %>
140
140
  <td class="last links ra-sidescroll-frozen">
141
141
  <ul class="nav d-inline list-inline">
@@ -71,9 +71,9 @@ module RailsAdmin
71
71
  def key_accessor
72
72
  case type
73
73
  when :has_many, :has_and_belongs_to_many
74
- "#{name.to_s.singularize}_ids".to_sym
74
+ :"#{name.to_s.singularize}_ids"
75
75
  when :has_one
76
- "#{name}_id".to_sym
76
+ :"#{name}_id"
77
77
  else
78
78
  foreign_key
79
79
  end
@@ -172,7 +172,7 @@ module RailsAdmin
172
172
  # "0055" is the filter index, no use here. o is the operator, v the value
173
173
  def filter_scope(scope, filters, fields = config.list.fields.select(&:filterable?))
174
174
  filters.each_pair do |field_name, filters_dump|
175
- filters_dump.each do |_, filter_dump|
175
+ filters_dump.each_value do |filter_dump|
176
176
  wb = WhereBuilder.new(scope)
177
177
  field = fields.detect { |f| f.name.to_s == field_name }
178
178
  value = parse_field_value(field, filter_dump[:v])
@@ -256,7 +256,8 @@ module RailsAdmin
256
256
 
257
257
  def build_statement_for_boolean
258
258
  return ["(#{@column} IS NULL OR #{@column} = ?)", false] if %w[false f 0].include?(@value)
259
- return ["(#{@column} = ?)", true] if %w[true t 1].include?(@value)
259
+
260
+ ["(#{@column} = ?)", true] if %w[true t 1].include?(@value)
260
261
  end
261
262
 
262
263
  def column_for_value(value)
@@ -0,0 +1,348 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_record'
4
+ require 'rails_admin/adapters/active_record/association'
5
+ require 'rails_admin/adapters/active_record/model_extension'
6
+ require 'rails_admin/adapters/active_record/property'
7
+
8
+ module RailsAdmin
9
+ module Adapters
10
+ module ActiveRecord
11
+ DISABLED_COLUMN_TYPES = %i[tsvector blob binary spatial hstore geometry].freeze
12
+
13
+ def model_with_extension
14
+ @model_with_extension ||=
15
+ begin
16
+ klass = Class.new(model) do
17
+ include ModelExtension
18
+ end
19
+ klass.instance_eval <<-RUBY, __FILE__, __LINE__+1
20
+ def name
21
+ "#{@model_name.to_s}"
22
+ end
23
+ RUBY
24
+ klass
25
+ end
26
+ end
27
+
28
+ def new(params = {})
29
+ model_with_extension.new(params)
30
+ end
31
+
32
+ def get(id, scope = nil)
33
+ scope = model_with_extension.merge(scope || scoped)
34
+ scope.where(primary_key => id).first
35
+ end
36
+
37
+ def scoped
38
+ model_with_extension.all
39
+ end
40
+
41
+ def first(options = {}, scope = nil)
42
+ all(options, scope).first
43
+ end
44
+
45
+ def all(options = {}, scope = nil)
46
+ scope = model_with_extension.merge(scope || scoped)
47
+ scope = scope.includes(options[:include]) if options[:include]
48
+ scope = scope.limit(options[:limit]) if options[:limit]
49
+ scope = bulk_scope(scope, options) if options[:bulk_ids]
50
+ scope = query_scope(scope, options[:query]) if options[:query]
51
+ scope = filter_scope(scope, options[:filters]) if options[:filters]
52
+ scope = scope.send(Kaminari.config.page_method_name, options[:page]).per(options[:per]) if options[:page] && options[:per]
53
+ scope = sort_scope(scope, options) if options[:sort]
54
+ scope
55
+ end
56
+
57
+ def count(options = {}, scope = nil)
58
+ all(options.merge(limit: false, page: false), scope).count(:all)
59
+ end
60
+
61
+ def destroy(objects)
62
+ Array.wrap(objects).each(&:destroy)
63
+ end
64
+
65
+ def associations
66
+ model.reflect_on_all_associations.collect do |association|
67
+ Association.new(association, model)
68
+ end
69
+ end
70
+
71
+ def properties
72
+ columns = model.columns.reject do |c|
73
+ c.type.blank? ||
74
+ DISABLED_COLUMN_TYPES.include?(c.type.to_sym) ||
75
+ c.try(:array)
76
+ end
77
+ columns.collect do |property|
78
+ Property.new(property, model)
79
+ end
80
+ end
81
+
82
+ def base_class
83
+ model.base_class
84
+ end
85
+
86
+ delegate :primary_key, :table_name, to: :model, prefix: false
87
+
88
+ def quoted_table_name
89
+ model.quoted_table_name
90
+ end
91
+
92
+ def quote_column_name(name)
93
+ model.connection.quote_column_name(name)
94
+ end
95
+
96
+ def encoding
97
+ adapter =
98
+ if ::ActiveRecord::Base.respond_to?(:connection_db_config)
99
+ ::ActiveRecord::Base.connection_db_config.configuration_hash[:adapter]
100
+ else
101
+ ::ActiveRecord::Base.connection_config[:adapter]
102
+ end
103
+ case adapter
104
+ when 'postgresql'
105
+ ::ActiveRecord::Base.connection.select_one("SELECT ''::text AS str;").values.first.encoding
106
+ when 'mysql2'
107
+ if RUBY_ENGINE == 'jruby'
108
+ ::ActiveRecord::Base.connection.select_one("SELECT '' AS str;").values.first.encoding
109
+ else
110
+ ::ActiveRecord::Base.connection.raw_connection.encoding
111
+ end
112
+ when 'oracle_enhanced'
113
+ ::ActiveRecord::Base.connection.select_one('SELECT dummy FROM DUAL').values.first.encoding
114
+ else
115
+ ::ActiveRecord::Base.connection.select_one("SELECT '' AS str;").values.first.encoding
116
+ end
117
+ end
118
+
119
+ def embedded?
120
+ false
121
+ end
122
+
123
+ def cyclic?
124
+ false
125
+ end
126
+
127
+ def adapter_supports_joins?
128
+ true
129
+ end
130
+
131
+ private
132
+
133
+ def bulk_scope(scope, options)
134
+ scope.where(primary_key => options[:bulk_ids])
135
+ end
136
+
137
+ def sort_scope(scope, options)
138
+ direction = options[:sort_reverse] ? :asc : :desc
139
+ case options[:sort]
140
+ when String, Symbol
141
+ scope.reorder("#{options[:sort]} #{direction}")
142
+ when Array
143
+ scope.reorder(options[:sort].zip(Array.new(options[:sort].size) { direction }).to_h)
144
+ when Hash
145
+ scope.reorder(options[:sort].map { |table_name, column| "#{table_name}.#{column}" }.
146
+ zip(Array.new(options[:sort].size) { direction }).to_h)
147
+ else
148
+ raise ArgumentError.new("Unsupported sort value: #{options[:sort]}")
149
+ end
150
+ end
151
+
152
+ class WhereBuilder
153
+ def initialize(scope)
154
+ @statements = []
155
+ @values = []
156
+ @tables = []
157
+ @scope = scope
158
+ end
159
+
160
+ def add(field, value, operator)
161
+ field.searchable_columns.flatten.each do |column_infos|
162
+ statement, value1, value2 = StatementBuilder.new(column_infos[:column], column_infos[:type], value, operator, @scope.connection.adapter_name).to_statement
163
+ @statements << statement if statement.present?
164
+ @values << value1 unless value1.nil?
165
+ @values << value2 unless value2.nil?
166
+ table, column = column_infos[:column].split('.')
167
+ @tables.push(table) if column
168
+ end
169
+ end
170
+
171
+ def build
172
+ scope = @scope.where(@statements.join(' OR '), *@values)
173
+ scope = scope.references(*@tables.uniq) if @tables.any?
174
+ scope
175
+ end
176
+ end
177
+
178
+ def query_scope(scope, query, fields = config.list.fields.select(&:queryable?))
179
+ if config.list.search_by
180
+ scope.send(config.list.search_by, query)
181
+ else
182
+ wb = WhereBuilder.new(scope)
183
+ fields.each do |field|
184
+ value = parse_field_value(field, query)
185
+ wb.add(field, value, field.search_operator)
186
+ end
187
+ # OR all query statements
188
+ wb.build
189
+ end
190
+ end
191
+
192
+ # filters example => {"string_field"=>{"0055"=>{"o"=>"like", "v"=>"test_value"}}, ...}
193
+ # "0055" is the filter index, no use here. o is the operator, v the value
194
+ def filter_scope(scope, filters, fields = config.list.fields.select(&:filterable?))
195
+ filters.each_pair do |field_name, filters_dump|
196
+ filters_dump.each_value do |filter_dump|
197
+ wb = WhereBuilder.new(scope)
198
+ field = fields.detect { |f| f.name.to_s == field_name }
199
+ value = parse_field_value(field, filter_dump[:v])
200
+
201
+ wb.add(field, value, (filter_dump[:o] || RailsAdmin::Config.default_search_operator))
202
+ # AND current filter statements to other filter statements
203
+ scope = wb.build
204
+ end
205
+ end
206
+ scope
207
+ end
208
+
209
+ def build_statement(column, type, value, operator)
210
+ StatementBuilder.new(column, type, value, operator, model.connection.adapter_name).to_statement
211
+ end
212
+
213
+ class StatementBuilder < RailsAdmin::AbstractModel::StatementBuilder
214
+ def initialize(column, type, value, operator, adapter_name)
215
+ super column, type, value, operator
216
+ @adapter_name = adapter_name
217
+ end
218
+
219
+ protected
220
+
221
+ def unary_operators
222
+ case @type
223
+ when :boolean
224
+ boolean_unary_operators
225
+ when :uuid
226
+ uuid_unary_operators
227
+ when :integer, :decimal, :float
228
+ numeric_unary_operators
229
+ else
230
+ generic_unary_operators
231
+ end
232
+ end
233
+
234
+ private
235
+
236
+ def generic_unary_operators
237
+ {
238
+ '_blank' => ["(#{@column} IS NULL OR #{@column} = '')"],
239
+ '_present' => ["(#{@column} IS NOT NULL AND #{@column} != '')"],
240
+ '_null' => ["(#{@column} IS NULL)"],
241
+ '_not_null' => ["(#{@column} IS NOT NULL)"],
242
+ '_empty' => ["(#{@column} = '')"],
243
+ '_not_empty' => ["(#{@column} != '')"],
244
+ }
245
+ end
246
+
247
+ def boolean_unary_operators
248
+ generic_unary_operators.merge(
249
+ '_blank' => ["(#{@column} IS NULL)"],
250
+ '_empty' => ["(#{@column} IS NULL)"],
251
+ '_present' => ["(#{@column} IS NOT NULL)"],
252
+ '_not_empty' => ["(#{@column} IS NOT NULL)"],
253
+ )
254
+ end
255
+ alias_method :numeric_unary_operators, :boolean_unary_operators
256
+ alias_method :uuid_unary_operators, :boolean_unary_operators
257
+
258
+ def range_filter(min, max)
259
+ if min && max && min == max
260
+ ["(#{@column} = ?)", min]
261
+ elsif min && max
262
+ ["(#{@column} BETWEEN ? AND ?)", min, max]
263
+ elsif min
264
+ ["(#{@column} >= ?)", min]
265
+ elsif max
266
+ ["(#{@column} <= ?)", max]
267
+ end
268
+ end
269
+
270
+ def build_statement_for_type
271
+ case @type
272
+ when :boolean then build_statement_for_boolean
273
+ when :integer, :decimal, :float then build_statement_for_integer_decimal_or_float
274
+ when :string, :text, :citext then build_statement_for_string_or_text
275
+ when :enum then build_statement_for_enum
276
+ when :belongs_to_association then build_statement_for_belongs_to_association
277
+ when :uuid then build_statement_for_uuid
278
+ end
279
+ end
280
+
281
+ def build_statement_for_boolean
282
+ case @value
283
+ when 'false', 'f', '0'
284
+ ["(#{@column} IS NULL OR #{@column} = ?)", false]
285
+ when 'true', 't', '1'
286
+ ["(#{@column} = ?)", true]
287
+ end
288
+ end
289
+
290
+ def column_for_value(value)
291
+ ["(#{@column} = ?)", value]
292
+ end
293
+
294
+ def build_statement_for_belongs_to_association
295
+ return if @value.blank?
296
+
297
+ ["(#{@column} = ?)", @value.to_i] if @value.to_i.to_s == @value
298
+ end
299
+
300
+ def build_statement_for_string_or_text
301
+ return if @value.blank?
302
+
303
+ return ["(#{@column} = ?)", @value] if ['is', '='].include?(@operator)
304
+
305
+ @value = @value.mb_chars.downcase unless %w[postgresql postgis].include? ar_adapter
306
+
307
+ @value =
308
+ case @operator
309
+ when 'default', 'like', 'not_like'
310
+ "%#{@value}%"
311
+ when 'starts_with'
312
+ "#{@value}%"
313
+ when 'ends_with'
314
+ "%#{@value}"
315
+ else
316
+ return
317
+ end
318
+
319
+ if %w[postgresql postgis].include? ar_adapter
320
+ if @operator == 'not_like'
321
+ ["(#{@column} NOT ILIKE ?)", @value]
322
+ else
323
+ ["(#{@column} ILIKE ?)", @value]
324
+ end
325
+ elsif @operator == 'not_like'
326
+ ["(LOWER(#{@column}) NOT LIKE ?)", @value]
327
+ else
328
+ ["(LOWER(#{@column}) LIKE ?)", @value]
329
+ end
330
+ end
331
+
332
+ def build_statement_for_enum
333
+ return if @value.blank?
334
+
335
+ ["(#{@column} IN (?))", Array.wrap(@value)]
336
+ end
337
+
338
+ def build_statement_for_uuid
339
+ column_for_value(@value) if /\A[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}\z/.match?(@value.to_s)
340
+ end
341
+
342
+ def ar_adapter
343
+ @adapter_name.downcase
344
+ end
345
+ end
346
+ end
347
+ end
348
+ end
@@ -92,9 +92,9 @@ module RailsAdmin
92
92
  def key_accessor
93
93
  case macro.to_sym
94
94
  when :has_many
95
- "#{name.to_s.singularize}_ids".to_sym
95
+ :"#{name.to_s.singularize}_ids"
96
96
  when :has_one
97
- "#{name}_id".to_sym
97
+ :"#{name}_id"
98
98
  when :embedded_in, :embeds_one, :embeds_many
99
99
  nil
100
100
  else
@@ -21,6 +21,7 @@ module RailsAdmin
21
21
  Moped::Errors::InvalidObjectId
22
22
  BSON::ObjectId::Invalid
23
23
  BSON::InvalidObjectId
24
+ BSON::Error::InvalidObjectId
24
25
  ].exclude?(e.class.to_s)
25
26
  end
26
27
  end
@@ -31,6 +31,7 @@ module RailsAdmin
31
31
  Mongoid::Errors::InvalidFind
32
32
  Moped::Errors::InvalidObjectId
33
33
  BSON::InvalidObjectId
34
+ BSON::Error::InvalidObjectId
34
35
  ].exclude?(e.class.to_s)
35
36
  end
36
37
 
@@ -152,7 +153,7 @@ module RailsAdmin
152
153
  statements = []
153
154
 
154
155
  filters.each_pair do |field_name, filters_dump|
155
- filters_dump.each do |_, filter_dump|
156
+ filters_dump.each_value do |filter_dump|
156
157
  field = fields.detect { |f| f.name.to_s == field_name }
157
158
  next unless field
158
159
 
@@ -251,7 +252,8 @@ module RailsAdmin
251
252
 
252
253
  def build_statement_for_boolean
253
254
  return {@column => false} if %w[false f 0].include?(@value)
254
- return {@column => true} if %w[true t 1].include?(@value)
255
+
256
+ {@column => true} if %w[true t 1].include?(@value)
255
257
  end
256
258
 
257
259
  def column_for_value(value)
@@ -357,7 +357,7 @@ module RailsAdmin
357
357
 
358
358
  def generic_field_help
359
359
  model = abstract_model.model_name.underscore
360
- model_lookup = "admin.help.#{model}.#{name}".to_sym
360
+ model_lookup = :"admin.help.#{model}.#{name}"
361
361
  translated = I18n.translate(model_lookup, help: generic_help, default: [generic_help])
362
362
  (translated.is_a?(Hash) ? translated.to_a.first[1] : translated).html_safe
363
363
  end
@@ -13,9 +13,9 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
13
13
  fields << field
14
14
  associations =
15
15
  if properties.type == :has_many
16
- ["#{name}_attachments".to_sym, "#{name}_blobs".to_sym]
16
+ [:"#{name}_attachments", :"#{name}_blobs"]
17
17
  else
18
- ["#{name}_attachment".to_sym, "#{name}_blob".to_sym]
18
+ [:"#{name}_attachment", :"#{name}_blob"]
19
19
  end
20
20
  children_fields = associations.map do |child_name|
21
21
  child_association = parent.abstract_model.associations.detect { |p| p.name.to_sym == child_name }
@@ -7,7 +7,7 @@ require 'rails_admin/config/fields/types/file_upload'
7
7
  RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
8
8
  model = parent.abstract_model.model
9
9
  if defined?(::CarrierWave) && model.is_a?(CarrierWave::Mount) && model.uploaders.include?(attachment_name = properties.name.to_s.chomp('_file_name').to_sym)
10
- columns = [model.uploader_options[attachment_name][:mount_on] || attachment_name, "#{attachment_name}_content_type".to_sym, "#{attachment_name}_file_size".to_sym]
10
+ columns = [model.uploader_options[attachment_name][:mount_on] || attachment_name, :"#{attachment_name}_content_type", :"#{attachment_name}_file_size"]
11
11
  field = RailsAdmin::Config::Fields::Types.load(
12
12
  %i[serialized json].include?(properties.type) ? :multiple_carrierwave : :carrierwave,
13
13
  ).new(parent, attachment_name, properties)
@@ -10,7 +10,7 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
10
10
  field = RailsAdmin::Config::Fields::Types.load(:dragonfly).new(parent, attachment_name, properties)
11
11
  children_fields = []
12
12
  extensions.each do |ext|
13
- children_column_name = "#{attachment_name}_#{ext}".to_sym
13
+ children_column_name = :"#{attachment_name}_#{ext}"
14
14
  child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
15
15
  next unless child_properties
16
16
 
@@ -11,7 +11,7 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
11
11
  field = RailsAdmin::Config::Fields::Types.load(:paperclip).new(parent, attachment_name, properties)
12
12
  children_fields = []
13
13
  extensions.each do |ext|
14
- children_column_name = "#{attachment_name}_#{ext}".to_sym
14
+ children_column_name = :"#{attachment_name}_#{ext}"
15
15
  child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
16
16
  next unless child_properties
17
17
 
@@ -16,7 +16,7 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
16
16
  field = RailsAdmin::Config::Fields::Types.load(:shrine).new(parent, attachment_name, properties)
17
17
  fields << field
18
18
 
19
- data_field_name = "#{attachment_name}_data".to_sym
19
+ data_field_name = :"#{attachment_name}_data"
20
20
  child_properties = parent.abstract_model.properties.detect { |p| p.name == data_field_name }
21
21
  next true unless child_properties
22
22
 
@@ -38,7 +38,7 @@ module RailsAdmin
38
38
  end
39
39
 
40
40
  def method_name
41
- nested_form ? "#{name}_attributes".to_sym : super
41
+ nested_form ? :"#{name}_attributes" : super
42
42
  end
43
43
 
44
44
  def multiple?
@@ -20,7 +20,7 @@ module RailsAdmin
20
20
  end
21
21
 
22
22
  def method_name
23
- nested_form ? "#{name}_attributes".to_sym : super
23
+ nested_form ? :"#{name}_attributes" : super
24
24
  end
25
25
 
26
26
  # Reader for validation errors of the bound object
@@ -28,7 +28,7 @@ module RailsAdmin
28
28
  end
29
29
 
30
30
  def method_name
31
- nested_form ? "#{name}_attributes".to_sym : super
31
+ nested_form ? :"#{name}_attributes" : super
32
32
  end
33
33
 
34
34
  def multiple?
@@ -146,7 +146,7 @@ module RailsAdmin
146
146
  versions = object.nil? ? versions_for_model(model) : object.public_send(model.model.versions_association_name)
147
147
  versions = versions.where('event LIKE ?', "%#{query}%") if query.present?
148
148
  versions = versions.order(sort)
149
- versions = all ? versions : versions.send(Kaminari.config.page_method_name, current_page).per(per_page)
149
+ versions = versions.send(Kaminari.config.page_method_name, current_page).per(per_page) unless all
150
150
  paginated_proxies = Kaminari.paginate_array([], total_count: versions.try(:total_count) || versions.count)
151
151
  paginated_proxies = paginated_proxies.send(
152
152
  paginated_proxies.respond_to?(Kaminari.config.page_method_name) ? Kaminari.config.page_method_name : :page,
@@ -4,7 +4,7 @@ module RailsAdmin
4
4
  class Version
5
5
  MAJOR = 3
6
6
  MINOR = 1
7
- PATCH = 2
7
+ PATCH = 4
8
8
  PRE = nil
9
9
 
10
10
  class << self
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_admin",
3
- "version": "3.1.2",
3
+ "version": "3.1.4",
4
4
  "description": "RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data.",
5
5
  "homepage": "https://github.com/railsadminteam/rails_admin",
6
6
  "license": "MIT",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Michaels-Ober
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2023-03-23 00:00:00.000000000 Z
15
+ date: 2024-07-09 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activemodel-serializers-xml
@@ -195,6 +195,7 @@ files:
195
195
  - lib/rails_admin.rb
196
196
  - lib/rails_admin/abstract_model.rb
197
197
  - lib/rails_admin/adapters/active_record.rb
198
+ - lib/rails_admin/adapters/active_record.rb.bak
198
199
  - lib/rails_admin/adapters/active_record/association.rb
199
200
  - lib/rails_admin/adapters/active_record/object_extension.rb
200
201
  - lib/rails_admin/adapters/active_record/property.rb
@@ -466,7 +467,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
466
467
  - !ruby/object:Gem::Version
467
468
  version: 1.8.11
468
469
  requirements: []
469
- rubygems_version: 3.3.7
470
+ rubygems_version: 3.4.10
470
471
  signing_key:
471
472
  specification_version: 4
472
473
  summary: Admin for Rails