active_fields 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/.rubocop.yml +60 -0
  4. data/CHANGELOG.md +5 -0
  5. data/CODE_OF_CONDUCT.md +84 -0
  6. data/LICENSE +21 -0
  7. data/README.md +5 -0
  8. data/Rakefile +3 -0
  9. data/lib/active_fields/casters/base_caster.rb +18 -0
  10. data/lib/active_fields/casters/boolean_caster.rb +23 -0
  11. data/lib/active_fields/casters/date_array_caster.rb +21 -0
  12. data/lib/active_fields/casters/date_caster.rb +25 -0
  13. data/lib/active_fields/casters/decimal_array_caster.rb +21 -0
  14. data/lib/active_fields/casters/decimal_caster.rb +23 -0
  15. data/lib/active_fields/casters/enum_array_caster.rb +9 -0
  16. data/lib/active_fields/casters/enum_caster.rb +9 -0
  17. data/lib/active_fields/casters/integer_array_caster.rb +21 -0
  18. data/lib/active_fields/casters/integer_caster.rb +23 -0
  19. data/lib/active_fields/casters/text_array_caster.rb +21 -0
  20. data/lib/active_fields/casters/text_caster.rb +23 -0
  21. data/lib/active_fields/models/concerns/concern.rb +16 -0
  22. data/lib/active_fields/models/concerns/customizable.rb +83 -0
  23. data/lib/active_fields/models/concerns/field_concern.rb +79 -0
  24. data/lib/active_fields/models/concerns/value_concern.rb +50 -0
  25. data/lib/active_fields/models/field/boolean.rb +38 -0
  26. data/lib/active_fields/models/field/date.rb +48 -0
  27. data/lib/active_fields/models/field/date_array.rb +44 -0
  28. data/lib/active_fields/models/field/decimal.rb +48 -0
  29. data/lib/active_fields/models/field/decimal_array.rb +44 -0
  30. data/lib/active_fields/models/field/enum.rb +62 -0
  31. data/lib/active_fields/models/field/enum_array.rb +59 -0
  32. data/lib/active_fields/models/field/integer.rb +48 -0
  33. data/lib/active_fields/models/field/integer_array.rb +34 -0
  34. data/lib/active_fields/models/field/text.rb +49 -0
  35. data/lib/active_fields/models/field/text_array.rb +35 -0
  36. data/lib/active_fields/models/field.rb +27 -0
  37. data/lib/active_fields/models/value.rb +30 -0
  38. data/lib/active_fields/validators/base_validator.rb +73 -0
  39. data/lib/active_fields/validators/boolean_validator.rb +23 -0
  40. data/lib/active_fields/validators/date_array_validator.rb +28 -0
  41. data/lib/active_fields/validators/date_validator.rb +21 -0
  42. data/lib/active_fields/validators/decimal_array_validator.rb +28 -0
  43. data/lib/active_fields/validators/decimal_validator.rb +21 -0
  44. data/lib/active_fields/validators/enum_array_validator.rb +36 -0
  45. data/lib/active_fields/validators/enum_validator.rb +25 -0
  46. data/lib/active_fields/validators/integer_array_validator.rb +28 -0
  47. data/lib/active_fields/validators/integer_validator.rb +21 -0
  48. data/lib/active_fields/validators/text_array_validator.rb +28 -0
  49. data/lib/active_fields/validators/text_validator.rb +21 -0
  50. data/lib/active_fields/version.rb +5 -0
  51. data/lib/active_fields.rb +13 -0
  52. data/lib/generators/active_fields/install/USAGE +5 -0
  53. data/lib/generators/active_fields/install/install_generator.rb +33 -0
  54. data/lib/generators/active_fields/install/templates/create_active_fields_tables.rb.tt +30 -0
  55. data/sig/active_fields.rbs +4 -0
  56. metadata +282 -0
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class DateArrayValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ unless value.is_a?(Array)
12
+ errors << :invalid
13
+ return
14
+ end
15
+
16
+ validate_size(value, min: active_field.min_size, max: active_field.max_size)
17
+
18
+ value.each do |elem_value|
19
+ if elem_value.is_a?(Date)
20
+ validate_minmax(elem_value, min: active_field.min, max: active_field.max)
21
+ else
22
+ errors << :invalid
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class DateValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ if value.nil?
12
+ errors << :required if active_field.required?
13
+ elsif value.is_a?(Date)
14
+ validate_minmax(value, min: active_field.min, max: active_field.max)
15
+ else
16
+ errors << :invalid
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class DecimalArrayValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ unless value.is_a?(Array)
12
+ errors << :invalid
13
+ return
14
+ end
15
+
16
+ validate_size(value, min: active_field.min_size, max: active_field.max_size)
17
+
18
+ value.each do |elem_value|
19
+ if elem_value.is_a?(Numeric)
20
+ validate_minmax(elem_value, min: active_field.min, max: active_field.max)
21
+ else
22
+ errors << :invalid
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class DecimalValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ if value.nil?
12
+ errors << :required if active_field.required?
13
+ elsif value.is_a?(Numeric)
14
+ validate_minmax(value, min: active_field.min, max: active_field.max)
15
+ else
16
+ errors << :invalid
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class EnumArrayValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ unless value.is_a?(Array)
12
+ errors << :invalid
13
+ return
14
+ end
15
+
16
+ validate_size(value, min: active_field.min_size, max: active_field.max_size)
17
+
18
+ if active_field.allowed_values.is_a?(Array)
19
+ value.each do |elem_value|
20
+ validate_value_allowed(elem_value, allowed_values: active_field.allowed_values)
21
+ end
22
+ end
23
+
24
+ if value.size != value.uniq.size
25
+ errors << :duplicate
26
+ end
27
+ end
28
+
29
+ def validate_value_allowed(value, allowed_values:)
30
+ return if allowed_values.include?(value)
31
+
32
+ errors << :inclusion
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class EnumValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ if value.nil?
12
+ errors << :required if active_field.required?
13
+ elsif active_field.allowed_values.is_a?(Array)
14
+ validate_value_allowed(value, allowed_values: active_field.allowed_values)
15
+ end
16
+ end
17
+
18
+ def validate_value_allowed(value, allowed_values:)
19
+ return if allowed_values.include?(value)
20
+
21
+ errors << :inclusion
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class IntegerArrayValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ unless value.is_a?(Array)
12
+ errors << :invalid
13
+ return
14
+ end
15
+
16
+ validate_size(value, min: active_field.min_size, max: active_field.max_size)
17
+
18
+ value.each do |elem_value|
19
+ if elem_value.is_a?(Numeric)
20
+ validate_minmax(elem_value, min: active_field.min, max: active_field.max)
21
+ else
22
+ errors << :invalid
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class IntegerValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ if value.nil?
12
+ errors << :required if active_field.required?
13
+ elsif value.is_a?(Numeric)
14
+ validate_minmax(value, min: active_field.min, max: active_field.max)
15
+ else
16
+ errors << :invalid
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class TextArrayValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ unless value.is_a?(Array)
12
+ errors << :invalid
13
+ return
14
+ end
15
+
16
+ validate_size(value, min: active_field.min_size, max: active_field.max_size)
17
+
18
+ value.each do |elem_value|
19
+ if elem_value.is_a?(String)
20
+ validate_length(elem_value, min: active_field.min_length, max: active_field.max_length)
21
+ else
22
+ errors << :invalid
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module ActiveFields
6
+ module Validators
7
+ class TextValidator < BaseValidator
8
+ private
9
+
10
+ def perform_validation(value)
11
+ if value.nil?
12
+ errors << :required if active_field.required?
13
+ elsif value.is_a?(String)
14
+ validate_length(value, min: active_field.min_length, max: active_field.max_length)
15
+ else
16
+ errors << :invalid
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveFields
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support"
4
+ require "active_record"
5
+
6
+ require_relative "active_fields/version"
7
+ Dir["#{__dir__}/active_fields/casters/**/*.rb"].each { |f| require_relative f }
8
+ Dir["#{__dir__}/active_fields/validators/**/*.rb"].each { |f| require_relative f }
9
+ Dir["#{__dir__}/active_fields/models/**/*.rb"].each { |f| require_relative f }
10
+
11
+ module ActiveFields
12
+ class Error < StandardError; end
13
+ end
@@ -0,0 +1,5 @@
1
+ Description:
2
+ Generates a migration to create ActiveFields tables.
3
+
4
+ Examples:
5
+ `bin/rails generate active_fields:install`
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/generators"
4
+
5
+ module ActiveFields
6
+ module Generators
7
+ class InstallGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ desc "This generator creates a migration to create ActiveFields tables"
13
+
14
+ def copy_migration
15
+ migration_template(
16
+ "create_active_fields_tables.rb.tt",
17
+ "db/migrate/create_active_fields_tables.rb",
18
+ { migration_version: migration_version },
19
+ )
20
+ end
21
+
22
+ private
23
+
24
+ def migration_version
25
+ format(
26
+ "[%d.%d]",
27
+ ActiveRecord::VERSION::MAJOR,
28
+ ActiveRecord::VERSION::MINOR,
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,30 @@
1
+ class CreateActiveFieldsTables < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :active_fields do |t|
4
+ t.string :name, null: false
5
+ t.string :type, null: false
6
+ t.string :customizable_type, null: false
7
+ t.jsonb :default_value
8
+ t.jsonb :options, null: false, default: {}
9
+
10
+ t.timestamps
11
+
12
+ t.index [:name, :customizable_type], unique: true
13
+ t.index :customizable_type
14
+ end
15
+
16
+ create_table :active_fields_values do |t|
17
+ t.references :customizable, polymorphic: true, null: false, index: false
18
+ t.references :active_field,
19
+ null: false,
20
+ foreign_key: { to_table: :active_fields, name: :active_fields_values_active_field_id_fk }
21
+ t.jsonb :value
22
+
23
+ t.timestamps
24
+
25
+ t.index [:customizable_type, :customizable_id, :active_field_id],
26
+ unique: true,
27
+ name: "index_active_fields_values_on_customizable_and_field"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveFields
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,282 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_fields
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kirill Usanov
8
+ - LassoID
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2024-05-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '6.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '6.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: activesupport
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '6.0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '6.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: database_cleaner-active_record
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: factory_bot
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: pg
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rspec
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop-performance
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rubocop-rails
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: rubocop-rake
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: rubocop-rspec
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ - !ruby/object:Gem::Dependency
183
+ name: rubocop-shopify
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ description: Extend your Rails models without changing DB schema.
197
+ email: kirill@lassoid.ru
198
+ executables: []
199
+ extensions: []
200
+ extra_rdoc_files: []
201
+ files:
202
+ - ".rspec"
203
+ - ".rubocop.yml"
204
+ - CHANGELOG.md
205
+ - CODE_OF_CONDUCT.md
206
+ - LICENSE
207
+ - README.md
208
+ - Rakefile
209
+ - lib/active_fields.rb
210
+ - lib/active_fields/casters/base_caster.rb
211
+ - lib/active_fields/casters/boolean_caster.rb
212
+ - lib/active_fields/casters/date_array_caster.rb
213
+ - lib/active_fields/casters/date_caster.rb
214
+ - lib/active_fields/casters/decimal_array_caster.rb
215
+ - lib/active_fields/casters/decimal_caster.rb
216
+ - lib/active_fields/casters/enum_array_caster.rb
217
+ - lib/active_fields/casters/enum_caster.rb
218
+ - lib/active_fields/casters/integer_array_caster.rb
219
+ - lib/active_fields/casters/integer_caster.rb
220
+ - lib/active_fields/casters/text_array_caster.rb
221
+ - lib/active_fields/casters/text_caster.rb
222
+ - lib/active_fields/models/concerns/concern.rb
223
+ - lib/active_fields/models/concerns/customizable.rb
224
+ - lib/active_fields/models/concerns/field_concern.rb
225
+ - lib/active_fields/models/concerns/value_concern.rb
226
+ - lib/active_fields/models/field.rb
227
+ - lib/active_fields/models/field/boolean.rb
228
+ - lib/active_fields/models/field/date.rb
229
+ - lib/active_fields/models/field/date_array.rb
230
+ - lib/active_fields/models/field/decimal.rb
231
+ - lib/active_fields/models/field/decimal_array.rb
232
+ - lib/active_fields/models/field/enum.rb
233
+ - lib/active_fields/models/field/enum_array.rb
234
+ - lib/active_fields/models/field/integer.rb
235
+ - lib/active_fields/models/field/integer_array.rb
236
+ - lib/active_fields/models/field/text.rb
237
+ - lib/active_fields/models/field/text_array.rb
238
+ - lib/active_fields/models/value.rb
239
+ - lib/active_fields/validators/base_validator.rb
240
+ - lib/active_fields/validators/boolean_validator.rb
241
+ - lib/active_fields/validators/date_array_validator.rb
242
+ - lib/active_fields/validators/date_validator.rb
243
+ - lib/active_fields/validators/decimal_array_validator.rb
244
+ - lib/active_fields/validators/decimal_validator.rb
245
+ - lib/active_fields/validators/enum_array_validator.rb
246
+ - lib/active_fields/validators/enum_validator.rb
247
+ - lib/active_fields/validators/integer_array_validator.rb
248
+ - lib/active_fields/validators/integer_validator.rb
249
+ - lib/active_fields/validators/text_array_validator.rb
250
+ - lib/active_fields/validators/text_validator.rb
251
+ - lib/active_fields/version.rb
252
+ - lib/generators/active_fields/install/USAGE
253
+ - lib/generators/active_fields/install/install_generator.rb
254
+ - lib/generators/active_fields/install/templates/create_active_fields_tables.rb.tt
255
+ - sig/active_fields.rbs
256
+ homepage: https://github.com/lassoid/active_fields
257
+ licenses:
258
+ - MIT
259
+ metadata:
260
+ homepage_uri: https://github.com/lassoid/active_fields
261
+ source_code_uri: https://github.com/lassoid/active_fields
262
+ changelog_uri: https://github.com/lassoid/active_fields/blob/main/CHANGELOG.md
263
+ post_install_message:
264
+ rdoc_options: []
265
+ require_paths:
266
+ - lib
267
+ required_ruby_version: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: 3.0.0
272
+ required_rubygems_version: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ version: '0'
277
+ requirements: []
278
+ rubygems_version: 3.5.9
279
+ signing_key:
280
+ specification_version: 4
281
+ summary: Add custom fields to ActiveRecord models at runtime.
282
+ test_files: []