rails_admin 3.3.0 → 4.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +7 -5
  3. data/README.md +11 -11
  4. data/Rakefile +3 -11
  5. data/app/assets/builds/rails_admin.css +10 -0
  6. data/app/assets/builds/rails_admin.js +34 -0
  7. data/app/controllers/rails_admin/main_controller.rb +3 -3
  8. data/app/helpers/rails_admin/application_helper.rb +3 -15
  9. data/app/helpers/rails_admin/form_builder.rb +10 -9
  10. data/app/views/layouts/rails_admin/_head.html.erb +10 -27
  11. data/app/views/layouts/rails_admin/_head_custom.html.erb +3 -0
  12. data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +1 -1
  13. data/app/views/rails_admin/main/_dashboard_history.html.erb +1 -1
  14. data/app/views/rails_admin/main/_delete_notice.html.erb +3 -3
  15. data/app/views/rails_admin/main/_form_boolean.html.erb +9 -13
  16. data/app/views/rails_admin/main/_submit_buttons.html.erb +4 -4
  17. data/app/views/rails_admin/main/bulk_delete.html.erb +2 -2
  18. data/app/views/rails_admin/main/dashboard.html.erb +3 -3
  19. data/app/views/rails_admin/main/delete.html.erb +2 -2
  20. data/app/views/rails_admin/main/export.html.erb +2 -2
  21. data/app/views/rails_admin/main/history.html.erb +2 -2
  22. data/app/views/rails_admin/main/index.html.erb +3 -3
  23. data/config/initializers/active_record_extensions.rb +1 -4
  24. data/lib/generators/rails_admin/install_generator.rb +37 -92
  25. data/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -1
  26. data/lib/rails_admin/abstract_model.rb +69 -191
  27. data/lib/rails_admin/adapters/active_record/association.rb +1 -1
  28. data/lib/rails_admin/adapters/active_record/property.rb +7 -0
  29. data/lib/rails_admin/adapters/active_record/reflection.rb +87 -0
  30. data/lib/rails_admin/adapters/active_record/repository.rb +216 -0
  31. data/lib/rails_admin/adapters/active_record/statement_builder.rb +148 -0
  32. data/lib/rails_admin/adapters/active_record/where_builder.rb +40 -0
  33. data/lib/rails_admin/adapters/active_record.rb +7 -356
  34. data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
  35. data/lib/rails_admin/adapters/mongoid/extension.rb +16 -6
  36. data/lib/rails_admin/adapters/mongoid/property.rb +7 -0
  37. data/lib/rails_admin/adapters/mongoid/reflection.rb +58 -0
  38. data/lib/rails_admin/adapters/mongoid/repository.rb +237 -0
  39. data/lib/rails_admin/adapters/mongoid/statement_builder.rb +93 -0
  40. data/lib/rails_admin/adapters/mongoid.rb +7 -300
  41. data/lib/rails_admin/adapters/reflection.rb +105 -0
  42. data/lib/rails_admin/adapters/repository.rb +169 -0
  43. data/lib/rails_admin/adapters/statement_builder.rb +109 -0
  44. data/lib/rails_admin/adapters.rb +94 -0
  45. data/lib/rails_admin/config/actions/base.rb +8 -0
  46. data/lib/rails_admin/config/actions/bulk_delete.rb +4 -4
  47. data/lib/rails_admin/config/actions/dashboard.rb +1 -1
  48. data/lib/rails_admin/config/actions/edit.rb +3 -2
  49. data/lib/rails_admin/config/actions/index.rb +1 -1
  50. data/lib/rails_admin/config/actions/new.rb +3 -2
  51. data/lib/rails_admin/config/actions/show.rb +1 -1
  52. data/lib/rails_admin/config/configurable.rb +4 -3
  53. data/lib/rails_admin/config/fields/association.rb +9 -8
  54. data/lib/rails_admin/config/fields/base.rb +55 -37
  55. data/lib/rails_admin/config/fields/collection_association.rb +2 -2
  56. data/lib/rails_admin/config/fields/factories/carrierwave.rb +35 -20
  57. data/lib/rails_admin/config/fields/factories/dragonfly.rb +30 -18
  58. data/lib/rails_admin/config/fields/factories/enum.rb +14 -8
  59. data/lib/rails_admin/config/fields/factories/paperclip.rb +29 -19
  60. data/lib/rails_admin/config/fields/factories/shrine.rb +19 -8
  61. data/lib/rails_admin/config/fields/singular_association.rb +6 -1
  62. data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -7
  63. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +8 -4
  64. data/lib/rails_admin/config/fields/types/bson_object_id.rb +1 -1
  65. data/lib/rails_admin/config/fields/types/datetime.rb +0 -4
  66. data/lib/rails_admin/config/fields/types/dragonfly.rb +1 -1
  67. data/lib/rails_admin/config/fields/types/enum.rb +11 -2
  68. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +0 -2
  69. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +4 -4
  70. data/lib/rails_admin/config/fields/types/time.rb +1 -1
  71. data/lib/rails_admin/config/model.rb +27 -5
  72. data/lib/rails_admin/config/sections/list.rb +0 -8
  73. data/lib/rails_admin/config.rb +7 -21
  74. data/lib/rails_admin/criteria/path.rb +66 -0
  75. data/lib/rails_admin/criteria/period.rb +67 -0
  76. data/lib/rails_admin/engine.rb +11 -15
  77. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +2 -2
  78. data/lib/rails_admin/extensions/url_for_extension.rb +8 -0
  79. data/lib/rails_admin/support/asset_source.rb +42 -0
  80. data/lib/rails_admin/support/composite_keys_serializer.rb +28 -2
  81. data/lib/rails_admin/support/csv_converter.rb +3 -10
  82. data/lib/rails_admin/version.rb +7 -6
  83. data/lib/rails_admin.rb +7 -0
  84. data/lib/tasks/assets.rake +23 -0
  85. data/package.json +12 -7
  86. data/src/rails_admin/base.js +18 -15
  87. data/src/rails_admin/filter-box.js +7 -4
  88. data/src/rails_admin/filtering-multiselect.js +1 -1
  89. data/src/rails_admin/filtering-select.js +8 -8
  90. data/src/rails_admin/flatpickr.js +14 -0
  91. data/src/rails_admin/remote-form.js +74 -48
  92. data/src/rails_admin/styles/base/theming.scss +48 -25
  93. data/src/rails_admin/styles/base.scss +25 -1
  94. data/src/rails_admin/styles/filtering-select.scss +23 -62
  95. data/src/rails_admin/ui.js +1 -1
  96. data/src/rails_admin/vendor/jquery_nested_form.js +4 -4
  97. data/src/rails_admin/widgets.js +44 -11
  98. metadata +32 -128
  99. data/app/assets/javascripts/rails_admin/application.js.erb +0 -30
  100. data/app/assets/javascripts/rails_admin/custom/ui.js +0 -1
  101. data/app/assets/stylesheets/rails_admin/application.scss.erb +0 -35
  102. data/app/assets/stylesheets/rails_admin/custom/mixins.scss +0 -11
  103. data/app/assets/stylesheets/rails_admin/custom/theming.scss +0 -13
  104. data/app/assets/stylesheets/rails_admin/custom/variables.scss +0 -15
  105. data/lib/generators/rails_admin/importmap_formatter.rb +0 -28
  106. data/lib/generators/rails_admin/templates/rails_admin.vite.js +0 -2
  107. data/lib/generators/rails_admin/templates/rails_admin.webpacker.js +0 -2
  108. data/lib/rails_admin/adapters/active_record/object_extension.rb +0 -13
  109. data/lib/rails_admin/adapters/active_record.rb.bak +0 -348
  110. data/lib/rails_admin/adapters/mongoid/object_extension.rb +0 -29
  111. data/lib/rails_admin/support/es_module_processor.rb +0 -23
  112. data/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
  113. data/vendor/assets/javascripts/rails_admin/bootstrap.js +0 -5046
  114. data/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +0 -11246
  115. data/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +0 -41
  116. data/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +0 -1637
  117. data/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +0 -17
  118. data/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +0 -47
  119. data/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +0 -500
  120. data/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +0 -42
  121. data/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +0 -47
  122. data/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +0 -51
  123. data/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +0 -17
  124. data/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +0 -735
  125. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +0 -689
  126. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +0 -680
  127. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +0 -230
  128. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +0 -1561
  129. data/vendor/assets/javascripts/rails_admin/jquery3.js +0 -10881
  130. data/vendor/assets/javascripts/rails_admin/popper.js +0 -1974
  131. data/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +0 -118
  132. data/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +0 -57
  133. data/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +0 -29
  134. data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +0 -28
  135. data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +0 -139
  136. data/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -111
  137. data/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +0 -216
  138. data/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -229
  139. data/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -40
  140. data/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +0 -41
  141. data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +0 -240
  142. data/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -9
  143. data/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +0 -302
  144. data/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -33
  145. data/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +0 -9
  146. data/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +0 -42
  147. data/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -174
  148. data/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -43
  149. data/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +0 -209
  150. data/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +0 -139
  151. data/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -335
  152. data/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +0 -83
  153. data/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -64
  154. data/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +0 -51
  155. data/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +0 -158
  156. data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +0 -48
  157. data/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +0 -625
  158. data/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +0 -54
  159. data/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +0 -69
  160. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -155
  161. data/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +0 -51
  162. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -115
  163. data/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +0 -27
  164. data/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -104
  165. data/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -630
  166. data/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -1641
  167. data/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -53
  168. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +0 -63
  169. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +0 -152
  170. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +0 -219
  171. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +0 -91
  172. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +0 -72
  173. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +0 -11
  174. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +0 -121
  175. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +0 -36
  176. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +0 -12
  177. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +0 -3
  178. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +0 -12
  179. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +0 -30
  180. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +0 -26
  181. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +0 -15
  182. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +0 -15
  183. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +0 -7
  184. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +0 -8
  185. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +0 -8
  186. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +0 -11
  187. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +0 -14
  188. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -78
  189. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +0 -18
  190. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +0 -127
  191. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -133
  192. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +0 -64
  193. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -9
  194. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +0 -7
  195. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +0 -9
  196. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +0 -10
  197. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -144
  198. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -47
  199. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -151
  200. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -16
  201. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -24
  202. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +0 -7
  203. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -31
  204. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +0 -17
  205. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -6
  206. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +0 -21
  207. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-truncate.scss +0 -8
  208. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +0 -26
  209. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +0 -89
  210. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +0 -29
  211. data/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +0 -47
  212. data/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +0 -354
  213. data/vendor/assets/stylesheets/rails_admin/flatpickr.css +0 -791
  214. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +0 -6351
@@ -1,348 +0,0 @@
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
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsAdmin
4
- module Adapters
5
- module Mongoid
6
- module ObjectExtension
7
- def self.extended(object)
8
- object.associations.each do |name, association|
9
- association = Association.new(association, object.class)
10
- case association.macro
11
- when :has_many
12
- unless association.autosave?
13
- object.singleton_class.after_create do
14
- send(name).each(&:save)
15
- end
16
- end
17
- when :has_one
18
- unless association.autosave?
19
- object.singleton_class.after_create do
20
- send(name)&.save
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsAdmin
4
- module Support
5
- class ESModuleProcessor
6
- def self.instance
7
- @instance ||= new
8
- end
9
-
10
- def self.call(input)
11
- instance.call(input)
12
- end
13
-
14
- def initialize; end
15
-
16
- def call(input)
17
- return unless input[:name] == 'rails_admin/application'
18
-
19
- input[:data].gsub(/^((?:import|export) .+)$/) { "// #{Regexp.last_match(1)}" }
20
- end
21
- end
22
- end
23
- end