active_fields 0.2.0 → 1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -1
- data/README.md +633 -0
- data/app/models/active_fields/field/boolean.rb +10 -3
- data/app/models/active_fields/field/date.rb +10 -4
- data/app/models/active_fields/field/date_array.rb +12 -18
- data/app/models/active_fields/field/date_time.rb +77 -0
- data/app/models/active_fields/field/date_time_array.rb +61 -0
- data/app/models/active_fields/field/decimal.rb +35 -6
- data/app/models/active_fields/field/decimal_array.rb +28 -11
- data/app/models/active_fields/field/enum.rb +28 -9
- data/app/models/active_fields/field/enum_array.rb +29 -22
- data/app/models/active_fields/field/integer.rb +10 -4
- data/app/models/active_fields/field/integer_array.rb +12 -8
- data/app/models/active_fields/field/text.rb +10 -4
- data/app/models/active_fields/field/text_array.rb +14 -8
- data/app/models/concerns/active_fields/customizable_concern.rb +60 -51
- data/app/models/concerns/active_fields/field_array_concern.rb +25 -0
- data/app/models/concerns/active_fields/field_concern.rb +45 -24
- data/app/models/concerns/active_fields/value_concern.rb +32 -4
- data/db/migrate/20240229230000_create_active_fields_tables.rb +2 -2
- data/lib/active_fields/casters/base_caster.rb +8 -2
- data/lib/active_fields/casters/date_caster.rb +8 -6
- data/lib/active_fields/casters/date_time_array_caster.rb +19 -0
- data/lib/active_fields/casters/date_time_caster.rb +43 -0
- data/lib/active_fields/casters/decimal_caster.rb +10 -2
- data/lib/active_fields/casters/enum_array_caster.rb +13 -1
- data/lib/active_fields/casters/enum_caster.rb +15 -1
- data/lib/active_fields/casters/integer_caster.rb +2 -2
- data/lib/active_fields/config.rb +12 -1
- data/lib/active_fields/customizable_config.rb +1 -1
- data/lib/active_fields/has_active_fields.rb +1 -1
- data/lib/active_fields/validators/base_validator.rb +7 -3
- data/lib/active_fields/validators/boolean_validator.rb +2 -2
- data/lib/active_fields/validators/date_array_validator.rb +3 -3
- data/lib/active_fields/validators/date_time_array_validator.rb +26 -0
- data/lib/active_fields/validators/date_time_validator.rb +19 -0
- data/lib/active_fields/validators/date_validator.rb +3 -3
- data/lib/active_fields/validators/decimal_array_validator.rb +2 -2
- data/lib/active_fields/validators/decimal_validator.rb +2 -2
- data/lib/active_fields/validators/enum_array_validator.rb +3 -3
- data/lib/active_fields/validators/enum_validator.rb +3 -3
- data/lib/active_fields/validators/integer_array_validator.rb +2 -2
- data/lib/active_fields/validators/integer_validator.rb +2 -2
- data/lib/active_fields/validators/text_array_validator.rb +2 -2
- data/lib/active_fields/validators/text_validator.rb +2 -2
- data/lib/active_fields/version.rb +1 -1
- data/lib/active_fields.rb +4 -0
- data/lib/generators/active_fields/install/USAGE +5 -0
- data/lib/generators/active_fields/install/install_generator.rb +29 -0
- metadata +11 -16
@@ -3,11 +3,17 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class Date < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
validator: {
|
8
|
+
class_name: "ActiveFields::Validators::DateValidator",
|
9
|
+
options: -> { { required: required?, min: min, max: max } },
|
10
|
+
},
|
11
|
+
caster: {
|
12
|
+
class_name: "ActiveFields::Casters::DateCaster",
|
13
|
+
},
|
14
|
+
)
|
7
15
|
|
8
|
-
|
9
|
-
# attribute :min, :date
|
10
|
-
# attribute :max, :date
|
16
|
+
store_accessor :options, :required, :min, :max
|
11
17
|
|
12
18
|
validates :required, exclusion: [nil]
|
13
19
|
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
@@ -3,27 +3,21 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class DateArray < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
array: true,
|
8
|
+
validator: {
|
9
|
+
class_name: "ActiveFields::Validators::DateArrayValidator",
|
10
|
+
options: -> { { min: min, max: max, min_size: min_size, max_size: max_size } },
|
11
|
+
},
|
12
|
+
caster: {
|
13
|
+
class_name: "ActiveFields::Casters::DateArrayCaster",
|
14
|
+
},
|
15
|
+
)
|
16
|
+
|
17
|
+
store_accessor :options, :min, :max
|
7
18
|
|
8
|
-
# attribute :min_size, :integer
|
9
|
-
# attribute :max_size, :integer
|
10
|
-
# attribute :min, :date
|
11
|
-
# attribute :max, :date
|
12
|
-
|
13
|
-
validates :min_size, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
14
|
-
validates :max_size, comparison: { greater_than_or_equal_to: ->(r) { r.min_size || 0 } }, allow_nil: true
|
15
19
|
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
16
20
|
|
17
|
-
%i[min_size max_size].each do |column|
|
18
|
-
define_method(column) do
|
19
|
-
Casters::IntegerCaster.new.deserialize(super())
|
20
|
-
end
|
21
|
-
|
22
|
-
define_method(:"#{column}=") do |other|
|
23
|
-
super(Casters::IntegerCaster.new.serialize(other))
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
21
|
%i[min max].each do |column|
|
28
22
|
define_method(column) do
|
29
23
|
Casters::DateCaster.new.deserialize(super())
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveFields
|
4
|
+
module Field
|
5
|
+
class DateTime < ActiveFields.config.field_base_class
|
6
|
+
acts_as_active_field(
|
7
|
+
validator: {
|
8
|
+
class_name: "ActiveFields::Validators::DateTimeValidator",
|
9
|
+
options: -> { { required: required?, min: min, max: max } },
|
10
|
+
},
|
11
|
+
caster: {
|
12
|
+
class_name: "ActiveFields::Casters::DateTimeCaster",
|
13
|
+
options: -> { { precision: precision } },
|
14
|
+
},
|
15
|
+
)
|
16
|
+
|
17
|
+
store_accessor :options, :required, :min, :max, :precision
|
18
|
+
|
19
|
+
validates :required, exclusion: [nil]
|
20
|
+
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
21
|
+
validates :precision,
|
22
|
+
comparison: { greater_than_or_equal_to: 0, less_than_or_equal_to: Casters::DateTimeCaster::MAX_PRECISION },
|
23
|
+
allow_nil: true
|
24
|
+
|
25
|
+
# If precision is set after attributes that depend on it, deserialization will work correctly,
|
26
|
+
# but an incorrect internal value may be saved in the DB.
|
27
|
+
# This callback reassigns the internal values of the attributes to ensure accuracy.
|
28
|
+
before_save :reapply_precision
|
29
|
+
|
30
|
+
%i[required].each do |column|
|
31
|
+
define_method(column) do
|
32
|
+
Casters::BooleanCaster.new.deserialize(super())
|
33
|
+
end
|
34
|
+
|
35
|
+
define_method(:"#{column}?") do
|
36
|
+
!!public_send(column)
|
37
|
+
end
|
38
|
+
|
39
|
+
define_method(:"#{column}=") do |other|
|
40
|
+
super(Casters::BooleanCaster.new.serialize(other))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
%i[min max].each do |column|
|
45
|
+
define_method(column) do
|
46
|
+
Casters::DateTimeCaster.new(precision: precision).deserialize(super())
|
47
|
+
end
|
48
|
+
|
49
|
+
define_method(:"#{column}=") do |other|
|
50
|
+
super(Casters::DateTimeCaster.new(precision: precision).serialize(other))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
%i[precision].each do |column|
|
55
|
+
define_method(column) do
|
56
|
+
Casters::IntegerCaster.new.deserialize(super())
|
57
|
+
end
|
58
|
+
|
59
|
+
define_method(:"#{column}=") do |other|
|
60
|
+
super(Casters::IntegerCaster.new.serialize(other))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def set_defaults
|
67
|
+
self.required ||= false
|
68
|
+
end
|
69
|
+
|
70
|
+
def reapply_precision
|
71
|
+
self.min = min
|
72
|
+
self.max = max
|
73
|
+
self.default_value = default_value
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveFields
|
4
|
+
module Field
|
5
|
+
class DateTimeArray < ActiveFields.config.field_base_class
|
6
|
+
acts_as_active_field(
|
7
|
+
array: true,
|
8
|
+
validator: {
|
9
|
+
class_name: "ActiveFields::Validators::DateTimeArrayValidator",
|
10
|
+
options: -> { { min: min, max: max, min_size: min_size, max_size: max_size } },
|
11
|
+
},
|
12
|
+
caster: {
|
13
|
+
class_name: "ActiveFields::Casters::DateTimeArrayCaster",
|
14
|
+
options: -> { { precision: precision } },
|
15
|
+
},
|
16
|
+
)
|
17
|
+
|
18
|
+
store_accessor :options, :min, :max, :precision
|
19
|
+
|
20
|
+
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
21
|
+
validates :precision,
|
22
|
+
comparison: { greater_than_or_equal_to: 0, less_than_or_equal_to: Casters::DateTimeCaster::MAX_PRECISION },
|
23
|
+
allow_nil: true
|
24
|
+
|
25
|
+
# If precision is set after attributes that depend on it, deserialization will work correctly,
|
26
|
+
# but an incorrect internal value may be saved in the DB.
|
27
|
+
# This callback reassigns the internal values of the attributes to ensure accuracy.
|
28
|
+
before_save :reapply_precision
|
29
|
+
|
30
|
+
%i[precision].each do |column|
|
31
|
+
define_method(column) do
|
32
|
+
Casters::IntegerCaster.new.deserialize(super())
|
33
|
+
end
|
34
|
+
|
35
|
+
define_method(:"#{column}=") do |other|
|
36
|
+
super(Casters::IntegerCaster.new.serialize(other))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
%i[min max].each do |column|
|
41
|
+
define_method(column) do
|
42
|
+
Casters::DateTimeCaster.new(precision: precision).deserialize(super())
|
43
|
+
end
|
44
|
+
|
45
|
+
define_method(:"#{column}=") do |other|
|
46
|
+
super(Casters::DateTimeCaster.new(precision: precision).serialize(other))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def set_defaults; end
|
53
|
+
|
54
|
+
def reapply_precision
|
55
|
+
self.min = min
|
56
|
+
self.max = max
|
57
|
+
self.default_value = default_value
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -3,14 +3,27 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class Decimal < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
validator: {
|
8
|
+
class_name: "ActiveFields::Validators::DecimalValidator",
|
9
|
+
options: -> { { required: required?, min: min, max: max } },
|
10
|
+
},
|
11
|
+
caster: {
|
12
|
+
class_name: "ActiveFields::Casters::DecimalCaster",
|
13
|
+
options: -> { { precision: precision } },
|
14
|
+
},
|
15
|
+
)
|
7
16
|
|
8
|
-
|
9
|
-
# attribute :min, :decimal
|
10
|
-
# attribute :max, :decimal
|
17
|
+
store_accessor :options, :required, :min, :max, :precision
|
11
18
|
|
12
19
|
validates :required, exclusion: [nil]
|
13
20
|
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
21
|
+
validates :precision, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
22
|
+
|
23
|
+
# If precision is set after attributes that depend on it, deserialization will work correctly,
|
24
|
+
# but an incorrect internal value may be saved in the DB.
|
25
|
+
# This callback reassigns the internal values of the attributes to ensure accuracy.
|
26
|
+
before_save :reapply_precision
|
14
27
|
|
15
28
|
%i[required].each do |column|
|
16
29
|
define_method(column) do
|
@@ -28,11 +41,21 @@ module ActiveFields
|
|
28
41
|
|
29
42
|
%i[min max].each do |column|
|
30
43
|
define_method(column) do
|
31
|
-
Casters::DecimalCaster.new.deserialize(super())
|
44
|
+
Casters::DecimalCaster.new(precision: precision).deserialize(super())
|
45
|
+
end
|
46
|
+
|
47
|
+
define_method(:"#{column}=") do |other|
|
48
|
+
super(Casters::DecimalCaster.new(precision: precision).serialize(other))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
%i[precision].each do |column|
|
53
|
+
define_method(column) do
|
54
|
+
Casters::IntegerCaster.new.deserialize(super())
|
32
55
|
end
|
33
56
|
|
34
57
|
define_method(:"#{column}=") do |other|
|
35
|
-
super(Casters::
|
58
|
+
super(Casters::IntegerCaster.new.serialize(other))
|
36
59
|
end
|
37
60
|
end
|
38
61
|
|
@@ -41,6 +64,12 @@ module ActiveFields
|
|
41
64
|
def set_defaults
|
42
65
|
self.required ||= false
|
43
66
|
end
|
67
|
+
|
68
|
+
def reapply_precision
|
69
|
+
self.min = min
|
70
|
+
self.max = max
|
71
|
+
self.default_value = default_value
|
72
|
+
end
|
44
73
|
end
|
45
74
|
end
|
46
75
|
end
|
@@ -3,18 +3,29 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class DecimalArray < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
array: true,
|
8
|
+
validator: {
|
9
|
+
class_name: "ActiveFields::Validators::DecimalArrayValidator",
|
10
|
+
options: -> { { min: min, max: max, min_size: min_size, max_size: max_size } },
|
11
|
+
},
|
12
|
+
caster: {
|
13
|
+
class_name: "ActiveFields::Casters::DecimalArrayCaster",
|
14
|
+
options: -> { { precision: precision } },
|
15
|
+
},
|
16
|
+
)
|
17
|
+
|
18
|
+
store_accessor :options, :min, :max, :precision
|
7
19
|
|
8
|
-
# attribute :min_size, :integer
|
9
|
-
# attribute :max_size, :integer
|
10
|
-
# attribute :min, :decimal
|
11
|
-
# attribute :max, :decimal
|
12
|
-
|
13
|
-
validates :min_size, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
14
|
-
validates :max_size, comparison: { greater_than_or_equal_to: ->(r) { r.min_size || 0 } }, allow_nil: true
|
15
20
|
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
21
|
+
validates :precision, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
22
|
+
|
23
|
+
# If precision is set after attributes that depend on it, deserialization will work correctly,
|
24
|
+
# but an incorrect internal value may be saved in the DB.
|
25
|
+
# This callback reassigns the internal values of the attributes to ensure accuracy.
|
26
|
+
before_save :reapply_precision
|
16
27
|
|
17
|
-
%i[
|
28
|
+
%i[precision].each do |column|
|
18
29
|
define_method(column) do
|
19
30
|
Casters::IntegerCaster.new.deserialize(super())
|
20
31
|
end
|
@@ -26,17 +37,23 @@ module ActiveFields
|
|
26
37
|
|
27
38
|
%i[min max].each do |column|
|
28
39
|
define_method(column) do
|
29
|
-
Casters::DecimalCaster.new.deserialize(super())
|
40
|
+
Casters::DecimalCaster.new(precision: precision).deserialize(super())
|
30
41
|
end
|
31
42
|
|
32
43
|
define_method(:"#{column}=") do |other|
|
33
|
-
super(Casters::DecimalCaster.new.serialize(other))
|
44
|
+
super(Casters::DecimalCaster.new(precision: precision).serialize(other))
|
34
45
|
end
|
35
46
|
end
|
36
47
|
|
37
48
|
private
|
38
49
|
|
39
50
|
def set_defaults; end
|
51
|
+
|
52
|
+
def reapply_precision
|
53
|
+
self.min = min
|
54
|
+
self.max = max
|
55
|
+
self.default_value = default_value
|
56
|
+
end
|
40
57
|
end
|
41
58
|
end
|
42
59
|
end
|
@@ -3,10 +3,17 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class Enum < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
validator: {
|
8
|
+
class_name: "ActiveFields::Validators::EnumValidator",
|
9
|
+
options: -> { { required: required?, allowed_values: allowed_values } },
|
10
|
+
},
|
11
|
+
caster: {
|
12
|
+
class_name: "ActiveFields::Casters::EnumCaster",
|
13
|
+
},
|
14
|
+
)
|
7
15
|
|
8
|
-
|
9
|
-
# attribute :allowed_values, :string, array: true, default: []
|
16
|
+
store_accessor :options, :required, :allowed_values
|
10
17
|
|
11
18
|
validates :required, exclusion: [nil]
|
12
19
|
validate :validate_allowed_values
|
@@ -40,15 +47,27 @@ module ActiveFields
|
|
40
47
|
def validate_allowed_values
|
41
48
|
if allowed_values.nil?
|
42
49
|
errors.add(:allowed_values, :blank)
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
|
53
|
+
unless allowed_values.is_a?(Array)
|
54
|
+
errors.add(:allowed_values, :invalid)
|
55
|
+
return false
|
56
|
+
end
|
57
|
+
|
58
|
+
if allowed_values.empty?
|
59
|
+
errors.add(:allowed_values, :blank)
|
60
|
+
return false
|
61
|
+
end
|
62
|
+
|
63
|
+
allowed_values.each do |value_element|
|
64
|
+
if value_element.blank?
|
47
65
|
errors.add(:allowed_values, :invalid)
|
66
|
+
return false
|
48
67
|
end
|
49
|
-
else
|
50
|
-
errors.add(:allowed_values, :invalid)
|
51
68
|
end
|
69
|
+
|
70
|
+
true
|
52
71
|
end
|
53
72
|
|
54
73
|
def set_defaults
|
@@ -3,26 +3,21 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class EnumArray < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
array: true,
|
8
|
+
validator: {
|
9
|
+
class_name: "ActiveFields::Validators::EnumArrayValidator",
|
10
|
+
options: -> { { allowed_values: allowed_values, min_size: min_size, max_size: max_size } },
|
11
|
+
},
|
12
|
+
caster: {
|
13
|
+
class_name: "ActiveFields::Casters::EnumArrayCaster",
|
14
|
+
},
|
15
|
+
)
|
7
16
|
|
8
|
-
|
9
|
-
# attribute :max_size, :integer
|
10
|
-
# attribute :allowed_values, :string, array: true, default: []
|
17
|
+
store_accessor :options, :allowed_values
|
11
18
|
|
12
|
-
validates :min_size, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
13
|
-
validates :max_size, comparison: { greater_than_or_equal_to: ->(r) { r.min_size || 0 } }, allow_nil: true
|
14
19
|
validate :validate_allowed_values
|
15
20
|
|
16
|
-
%i[min_size max_size].each do |column|
|
17
|
-
define_method(column) do
|
18
|
-
Casters::IntegerCaster.new.deserialize(super())
|
19
|
-
end
|
20
|
-
|
21
|
-
define_method(:"#{column}=") do |other|
|
22
|
-
super(Casters::IntegerCaster.new.serialize(other))
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
21
|
%i[allowed_values].each do |column|
|
27
22
|
define_method(column) do
|
28
23
|
Casters::TextArrayCaster.new.deserialize(super())
|
@@ -38,15 +33,27 @@ module ActiveFields
|
|
38
33
|
def validate_allowed_values
|
39
34
|
if allowed_values.nil?
|
40
35
|
errors.add(:allowed_values, :blank)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
36
|
+
return false
|
37
|
+
end
|
38
|
+
|
39
|
+
unless allowed_values.is_a?(Array)
|
40
|
+
errors.add(:allowed_values, :invalid)
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
|
44
|
+
if allowed_values.empty?
|
45
|
+
errors.add(:allowed_values, :blank)
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
|
49
|
+
allowed_values.each do |value_element|
|
50
|
+
if value_element.blank?
|
45
51
|
errors.add(:allowed_values, :invalid)
|
52
|
+
return false
|
46
53
|
end
|
47
|
-
else
|
48
|
-
errors.add(:allowed_values, :invalid)
|
49
54
|
end
|
55
|
+
|
56
|
+
true
|
50
57
|
end
|
51
58
|
|
52
59
|
def set_defaults
|
@@ -3,11 +3,17 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class Integer < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
validator: {
|
8
|
+
class_name: "ActiveFields::Validators::IntegerValidator",
|
9
|
+
options: -> { { required: required?, min: min, max: max } },
|
10
|
+
},
|
11
|
+
caster: {
|
12
|
+
class_name: "ActiveFields::Casters::IntegerCaster",
|
13
|
+
},
|
14
|
+
)
|
7
15
|
|
8
|
-
|
9
|
-
# attribute :min, :integer
|
10
|
-
# attribute :max, :integer
|
16
|
+
store_accessor :options, :required, :min, :max
|
11
17
|
|
12
18
|
validates :required, exclusion: [nil]
|
13
19
|
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
@@ -3,18 +3,22 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class IntegerArray < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
array: true,
|
8
|
+
validator: {
|
9
|
+
class_name: "ActiveFields::Validators::IntegerArrayValidator",
|
10
|
+
options: -> { { min: min, max: max, min_size: min_size, max_size: max_size } },
|
11
|
+
},
|
12
|
+
caster: {
|
13
|
+
class_name: "ActiveFields::Casters::IntegerArrayCaster",
|
14
|
+
},
|
15
|
+
)
|
7
16
|
|
8
|
-
|
9
|
-
# attribute :max_size, :integer
|
10
|
-
# attribute :min, :integer
|
11
|
-
# attribute :max, :integer
|
17
|
+
store_accessor :options, :min, :max
|
12
18
|
|
13
|
-
validates :min_size, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
14
|
-
validates :max_size, comparison: { greater_than_or_equal_to: ->(r) { r.min_size || 0 } }, allow_nil: true
|
15
19
|
validates :max, comparison: { greater_than_or_equal_to: :min }, allow_nil: true, if: :min
|
16
20
|
|
17
|
-
%i[
|
21
|
+
%i[min max].each do |column|
|
18
22
|
define_method(column) do
|
19
23
|
Casters::IntegerCaster.new.deserialize(super())
|
20
24
|
end
|
@@ -3,11 +3,17 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class Text < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
validator: {
|
8
|
+
class_name: "ActiveFields::Validators::TextValidator",
|
9
|
+
options: -> { { required: required?, min_length: min_length, max_length: max_length } },
|
10
|
+
},
|
11
|
+
caster: {
|
12
|
+
class_name: "ActiveFields::Casters::TextCaster",
|
13
|
+
},
|
14
|
+
)
|
7
15
|
|
8
|
-
|
9
|
-
# attribute :min_length, :integer
|
10
|
-
# attribute :max_length, :integer
|
16
|
+
store_accessor :options, :required, :min_length, :max_length
|
11
17
|
|
12
18
|
validates :required, exclusion: [nil]
|
13
19
|
validates :min_length, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
@@ -3,19 +3,25 @@
|
|
3
3
|
module ActiveFields
|
4
4
|
module Field
|
5
5
|
class TextArray < ActiveFields.config.field_base_class
|
6
|
-
|
6
|
+
acts_as_active_field(
|
7
|
+
array: true,
|
8
|
+
validator: {
|
9
|
+
class_name: "ActiveFields::Validators::TextArrayValidator",
|
10
|
+
options: -> do
|
11
|
+
{ min_length: min_length, max_length: max_length, min_size: min_size, max_size: max_size }
|
12
|
+
end,
|
13
|
+
},
|
14
|
+
caster: {
|
15
|
+
class_name: "ActiveFields::Casters::TextArrayCaster",
|
16
|
+
},
|
17
|
+
)
|
7
18
|
|
8
|
-
|
9
|
-
# attribute :max_size, :integer
|
10
|
-
# attribute :min_length, :integer
|
11
|
-
# attribute :max_length, :integer
|
19
|
+
store_accessor :options, :min_length, :max_length
|
12
20
|
|
13
|
-
validates :min_size, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
14
|
-
validates :max_size, comparison: { greater_than_or_equal_to: ->(r) { r.min_size || 0 } }, allow_nil: true
|
15
21
|
validates :min_length, comparison: { greater_than_or_equal_to: 0 }, allow_nil: true
|
16
22
|
validates :max_length, comparison: { greater_than_or_equal_to: ->(r) { r.min_length || 0 } }, allow_nil: true
|
17
23
|
|
18
|
-
%i[
|
24
|
+
%i[min_length max_length].each do |column|
|
19
25
|
define_method(column) do
|
20
26
|
Casters::IntegerCaster.new.deserialize(super())
|
21
27
|
end
|