active_fields 1.1.0 → 2.0.0

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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -4
  3. data/CHANGELOG.md +27 -2
  4. data/README.md +411 -38
  5. data/app/models/active_fields/field/boolean.rb +3 -0
  6. data/app/models/active_fields/field/date.rb +3 -0
  7. data/app/models/active_fields/field/date_array.rb +3 -0
  8. data/app/models/active_fields/field/date_time.rb +4 -1
  9. data/app/models/active_fields/field/date_time_array.rb +4 -1
  10. data/app/models/active_fields/field/decimal.rb +6 -1
  11. data/app/models/active_fields/field/decimal_array.rb +6 -1
  12. data/app/models/active_fields/field/enum.rb +3 -0
  13. data/app/models/active_fields/field/enum_array.rb +3 -0
  14. data/app/models/active_fields/field/integer.rb +3 -0
  15. data/app/models/active_fields/field/integer_array.rb +3 -0
  16. data/app/models/active_fields/field/text.rb +3 -0
  17. data/app/models/active_fields/field/text_array.rb +3 -0
  18. data/app/models/active_fields/field.rb +5 -0
  19. data/app/models/concerns/active_fields/customizable_concern.rb +89 -3
  20. data/app/models/concerns/active_fields/field_concern.rb +26 -3
  21. data/db/migrate/20240229230000_create_active_fields_tables.rb +1 -1
  22. data/lib/active_fields/casters/date_time_caster.rb +1 -3
  23. data/lib/active_fields/casters/decimal_caster.rb +2 -5
  24. data/lib/active_fields/constants.rb +55 -0
  25. data/lib/active_fields/engine.rb +2 -1
  26. data/lib/active_fields/finders/array_finder.rb +112 -0
  27. data/lib/active_fields/finders/base_finder.rb +73 -0
  28. data/lib/active_fields/finders/boolean_finder.rb +20 -0
  29. data/lib/active_fields/finders/date_array_finder.rb +65 -0
  30. data/lib/active_fields/finders/date_finder.rb +32 -0
  31. data/lib/active_fields/finders/date_time_array_finder.rb +65 -0
  32. data/lib/active_fields/finders/date_time_finder.rb +32 -0
  33. data/lib/active_fields/finders/decimal_array_finder.rb +65 -0
  34. data/lib/active_fields/finders/decimal_finder.rb +32 -0
  35. data/lib/active_fields/finders/enum_array_finder.rb +41 -0
  36. data/lib/active_fields/finders/enum_finder.rb +20 -0
  37. data/lib/active_fields/finders/integer_array_finder.rb +65 -0
  38. data/lib/active_fields/finders/integer_finder.rb +32 -0
  39. data/lib/active_fields/finders/singular_finder.rb +66 -0
  40. data/lib/active_fields/finders/text_array_finder.rb +47 -0
  41. data/lib/active_fields/finders/text_finder.rb +81 -0
  42. data/lib/active_fields/has_active_fields.rb +3 -4
  43. data/lib/active_fields/registry.rb +38 -0
  44. data/lib/active_fields/version.rb +1 -1
  45. data/lib/active_fields.rb +29 -1
  46. data/lib/generators/active_fields/scaffold/scaffold_generator.rb +9 -0
  47. data/lib/generators/active_fields/scaffold/templates/controllers/active_fields_controller.rb +0 -10
  48. data/lib/generators/active_fields/scaffold/templates/controllers/concerns/active_fields_controller_concern.rb +33 -0
  49. data/lib/generators/active_fields/scaffold/templates/helpers/active_fields_helper.rb +67 -0
  50. data/lib/generators/active_fields/scaffold/templates/javascript/controllers/active_fields_finders_form_controller.js +59 -0
  51. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/_form.html.erb +42 -0
  52. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_array_size.html.erb +16 -0
  53. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_boolean.html.erb +21 -0
  54. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_date.html.erb +16 -0
  55. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_date_array.html.erb +16 -0
  56. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_datetime.html.erb +16 -0
  57. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_datetime_array.html.erb +16 -0
  58. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_decimal.html.erb +16 -0
  59. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_decimal_array.html.erb +16 -0
  60. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_enum.html.erb +16 -0
  61. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_enum_array.html.erb +16 -0
  62. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_integer.html.erb +16 -0
  63. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_integer_array.html.erb +16 -0
  64. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_text.html.erb +16 -0
  65. data/lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_text_array.html.erb +16 -0
  66. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_boolean.html.erb +1 -1
  67. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_date.html.erb +1 -1
  68. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_date_array.html.erb +1 -1
  69. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_datetime.html.erb +2 -2
  70. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_datetime_array.html.erb +2 -2
  71. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_decimal.html.erb +2 -2
  72. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_decimal_array.html.erb +2 -2
  73. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_enum.html.erb +1 -1
  74. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_enum_array.html.erb +1 -1
  75. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_integer.html.erb +1 -1
  76. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_integer_array.html.erb +1 -1
  77. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_text.html.erb +1 -1
  78. data/lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_text_array.html.erb +1 -1
  79. data/lib/generators/active_fields/scaffold/templates/views/shared/_array_field.html.erb +1 -1
  80. metadata +42 -10
  81. data/lib/active_fields/customizable_config.rb +0 -24
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -49,7 +49,7 @@
49
49
 
50
50
  <div>
51
51
  <%= f.label :precision %>
52
- <%= f.number_field :precision, min: 0, max: ActiveFields::Casters::DateTimeCaster::MAX_PRECISION, disabled: active_field.persisted? %>
52
+ <%= f.number_field :precision, min: 0, max: ActiveFields::MAX_DATETIME_PRECISION, disabled: active_field.persisted? %>
53
53
  </div>
54
54
 
55
55
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -54,7 +54,7 @@
54
54
 
55
55
  <div>
56
56
  <%= f.label :precision %>
57
- <%= f.number_field :precision, min: 0, max: ActiveFields::Casters::DateTimeCaster::MAX_PRECISION, disabled: active_field.persisted? %>
57
+ <%= f.number_field :precision, min: 0, max: ActiveFields::MAX_DATETIME_PRECISION, disabled: active_field.persisted? %>
58
58
  </div>
59
59
 
60
60
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -49,7 +49,7 @@
49
49
 
50
50
  <div>
51
51
  <%= f.label :precision %>
52
- <%= f.number_field :precision, min: 0, disabled: active_field.persisted? %>
52
+ <%= f.number_field :precision, min: 0, max: ActiveFields::MAX_DECIMAL_PRECISION, disabled: active_field.persisted? %>
53
53
  </div>
54
54
 
55
55
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -54,7 +54,7 @@
54
54
 
55
55
  <div>
56
56
  <%= f.label :precision %>
57
- <%= f.number_field :precision, min: 0, disabled: active_field.persisted? %>
57
+ <%= f.number_field :precision, min: 0, max: ActiveFields::MAX_DECIMAL_PRECISION, disabled: active_field.persisted? %>
58
58
  </div>
59
59
 
60
60
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -24,7 +24,7 @@
24
24
 
25
25
  <div>
26
26
  <%= f.label :customizable_type %>
27
- <%= f.select :customizable_type, ["TODO: add allowed customizable model names"], {}, { disabled: active_field.persisted? } %>
27
+ <%= f.select :customizable_type, active_field.available_customizable_types, {}, { disabled: active_field.persisted? } %>
28
28
  </div>
29
29
 
30
30
  <div>
@@ -1,5 +1,5 @@
1
1
  <div data-controller="array-field">
2
- <div data-array-field-target="templateFieldGroup">
2
+ <div data-array-field-target="templateFieldGroup" style="display: none;">
3
3
  <%= form.public_send(field_method, name, { multiple: true, value: "", **field_opts }) %>
4
4
  <% unless field_opts[:disabled] %>
5
5
  <%= button_tag "Remove", type: "button", data: { action: "click->array-field#removeField" } %>
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_fields
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Usanov
8
8
  - LassoID
9
- autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2024-09-10 00:00:00.000000000 Z
11
+ date: 2025-02-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
@@ -17,14 +16,14 @@ dependencies:
17
16
  requirements:
18
17
  - - ">="
19
18
  - !ruby/object:Gem::Version
20
- version: '6.0'
19
+ version: '7.1'
21
20
  type: :runtime
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
24
  - - ">="
26
25
  - !ruby/object:Gem::Version
27
- version: '6.0'
26
+ version: '7.1'
28
27
  - !ruby/object:Gem::Dependency
29
28
  name: factory_bot
30
29
  requirement: !ruby/object:Gem::Requirement
@@ -207,6 +206,7 @@ files:
207
206
  - README.md
208
207
  - Rakefile
209
208
  - app/models/active_fields/application_record.rb
209
+ - app/models/active_fields/field.rb
210
210
  - app/models/active_fields/field/base.rb
211
211
  - app/models/active_fields/field/boolean.rb
212
212
  - app/models/active_fields/field/date.rb
@@ -244,9 +244,26 @@ files:
244
244
  - lib/active_fields/casters/text_array_caster.rb
245
245
  - lib/active_fields/casters/text_caster.rb
246
246
  - lib/active_fields/config.rb
247
- - lib/active_fields/customizable_config.rb
247
+ - lib/active_fields/constants.rb
248
248
  - lib/active_fields/engine.rb
249
+ - lib/active_fields/finders/array_finder.rb
250
+ - lib/active_fields/finders/base_finder.rb
251
+ - lib/active_fields/finders/boolean_finder.rb
252
+ - lib/active_fields/finders/date_array_finder.rb
253
+ - lib/active_fields/finders/date_finder.rb
254
+ - lib/active_fields/finders/date_time_array_finder.rb
255
+ - lib/active_fields/finders/date_time_finder.rb
256
+ - lib/active_fields/finders/decimal_array_finder.rb
257
+ - lib/active_fields/finders/decimal_finder.rb
258
+ - lib/active_fields/finders/enum_array_finder.rb
259
+ - lib/active_fields/finders/enum_finder.rb
260
+ - lib/active_fields/finders/integer_array_finder.rb
261
+ - lib/active_fields/finders/integer_finder.rb
262
+ - lib/active_fields/finders/singular_finder.rb
263
+ - lib/active_fields/finders/text_array_finder.rb
264
+ - lib/active_fields/finders/text_finder.rb
249
265
  - lib/active_fields/has_active_fields.rb
266
+ - lib/active_fields/registry.rb
250
267
  - lib/active_fields/validators/base_validator.rb
251
268
  - lib/active_fields/validators/boolean_validator.rb
252
269
  - lib/active_fields/validators/date_array_validator.rb
@@ -267,9 +284,26 @@ files:
267
284
  - lib/generators/active_fields/scaffold/USAGE
268
285
  - lib/generators/active_fields/scaffold/scaffold_generator.rb
269
286
  - lib/generators/active_fields/scaffold/templates/controllers/active_fields_controller.rb
287
+ - lib/generators/active_fields/scaffold/templates/controllers/concerns/active_fields_controller_concern.rb
270
288
  - lib/generators/active_fields/scaffold/templates/helpers/active_fields_helper.rb
289
+ - lib/generators/active_fields/scaffold/templates/javascript/controllers/active_fields_finders_form_controller.js
271
290
  - lib/generators/active_fields/scaffold/templates/javascript/controllers/array_field_controller.js
272
291
  - lib/generators/active_fields/scaffold/templates/views/active_fields/edit.html.erb
292
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/_form.html.erb
293
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_array_size.html.erb
294
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_boolean.html.erb
295
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_date.html.erb
296
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_date_array.html.erb
297
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_datetime.html.erb
298
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_datetime_array.html.erb
299
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_decimal.html.erb
300
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_decimal_array.html.erb
301
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_enum.html.erb
302
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_enum_array.html.erb
303
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_integer.html.erb
304
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_integer_array.html.erb
305
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_text.html.erb
306
+ - lib/generators/active_fields/scaffold/templates/views/active_fields/finders/inputs/_text_array.html.erb
273
307
  - lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_boolean.html.erb
274
308
  - lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_date.html.erb
275
309
  - lib/generators/active_fields/scaffold/templates/views/active_fields/forms/_date_array.html.erb
@@ -309,7 +343,6 @@ metadata:
309
343
  homepage_uri: https://github.com/lassoid/active_fields
310
344
  source_code_uri: https://github.com/lassoid/active_fields
311
345
  changelog_uri: https://github.com/lassoid/active_fields/blob/main/CHANGELOG.md
312
- post_install_message:
313
346
  rdoc_options: []
314
347
  require_paths:
315
348
  - lib
@@ -317,15 +350,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
317
350
  requirements:
318
351
  - - ">="
319
352
  - !ruby/object:Gem::Version
320
- version: 3.0.0
353
+ version: 3.1.0
321
354
  required_rubygems_version: !ruby/object:Gem::Requirement
322
355
  requirements:
323
356
  - - ">="
324
357
  - !ruby/object:Gem::Version
325
358
  version: '0'
326
359
  requirements: []
327
- rubygems_version: 3.5.16
328
- signing_key:
360
+ rubygems_version: 3.6.2
329
361
  specification_version: 4
330
362
  summary: Add custom fields to ActiveRecord models at runtime.
331
363
  test_files: []
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveFields
4
- class CustomizableConfig
5
- attr_reader :customizable_model, :types
6
-
7
- def initialize(customizable_model)
8
- @customizable_model = customizable_model
9
- end
10
-
11
- def types=(value)
12
- invalid_types = value - ActiveFields.config.type_names
13
- if invalid_types.any?
14
- raise ArgumentError, "undefined ActiveFields types provided for #{customizable_model}: #{invalid_types}"
15
- end
16
-
17
- @types = value
18
- end
19
-
20
- def types_class_names
21
- ActiveFields.config.fields.values_at(*types)
22
- end
23
- end
24
- end