active_fields 0.1.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/.rspec +0 -1
- data/.rubocop.yml +3 -15
- data/CHANGELOG.md +19 -0
- data/README.md +633 -0
- data/Rakefile +7 -0
- data/app/models/active_fields/application_record.rb +7 -0
- data/app/models/active_fields/field/base.rb +17 -0
- data/{lib/active_fields/models → app/models/active_fields}/field/boolean.rb +14 -9
- data/{lib/active_fields/models → app/models/active_fields}/field/date.rb +16 -12
- data/app/models/active_fields/field/date_array.rb +36 -0
- 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 +75 -0
- data/app/models/active_fields/field/decimal_array.rb +59 -0
- data/{lib/active_fields/models → app/models/active_fields}/field/enum.rb +34 -17
- data/app/models/active_fields/field/enum_array.rb +64 -0
- data/{lib/active_fields/models → app/models/active_fields}/field/integer.rb +16 -12
- data/app/models/active_fields/field/integer_array.rb +36 -0
- data/{lib/active_fields/models → app/models/active_fields}/field/text.rb +16 -12
- data/app/models/active_fields/field/text_array.rb +39 -0
- data/app/models/active_fields/value.rb +15 -0
- data/app/models/concerns/active_fields/customizable_concern.rb +94 -0
- data/app/models/concerns/active_fields/field_array_concern.rb +25 -0
- data/app/models/concerns/active_fields/field_concern.rb +111 -0
- data/app/models/concerns/active_fields/value_concern.rb +83 -0
- data/config/routes.rb +4 -0
- data/{lib/generators/active_fields/install/templates/create_active_fields_tables.rb.tt → db/migrate/20240229230000_create_active_fields_tables.rb} +8 -6
- data/lib/active_fields/casters/base_caster.rb +8 -2
- data/lib/active_fields/casters/boolean_caster.rb +0 -2
- data/lib/active_fields/casters/date_array_caster.rb +0 -2
- data/lib/active_fields/casters/date_caster.rb +8 -8
- 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_array_caster.rb +0 -2
- data/lib/active_fields/casters/decimal_caster.rb +10 -4
- data/lib/active_fields/casters/enum_array_caster.rb +13 -3
- data/lib/active_fields/casters/enum_caster.rb +15 -3
- data/lib/active_fields/casters/integer_array_caster.rb +0 -2
- data/lib/active_fields/casters/integer_caster.rb +2 -4
- data/lib/active_fields/casters/text_array_caster.rb +0 -2
- data/lib/active_fields/casters/text_caster.rb +0 -2
- data/lib/active_fields/config.rb +61 -0
- data/lib/active_fields/customizable_config.rb +24 -0
- data/lib/active_fields/engine.rb +13 -0
- data/lib/active_fields/has_active_fields.rb +19 -0
- data/lib/active_fields/validators/base_validator.rb +7 -3
- data/lib/active_fields/validators/boolean_validator.rb +2 -4
- data/lib/active_fields/validators/date_array_validator.rb +3 -5
- 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 -5
- data/lib/active_fields/validators/decimal_array_validator.rb +2 -4
- data/lib/active_fields/validators/decimal_validator.rb +2 -4
- data/lib/active_fields/validators/enum_array_validator.rb +3 -5
- data/lib/active_fields/validators/enum_validator.rb +3 -5
- data/lib/active_fields/validators/integer_array_validator.rb +2 -4
- data/lib/active_fields/validators/integer_validator.rb +2 -4
- data/lib/active_fields/validators/text_array_validator.rb +2 -4
- data/lib/active_fields/validators/text_validator.rb +2 -4
- data/lib/active_fields/version.rb +1 -1
- data/lib/active_fields.rb +47 -7
- data/lib/generators/active_fields/install/USAGE +1 -1
- data/lib/generators/active_fields/install/install_generator.rb +14 -18
- data/lib/tasks/active_fields_tasks.rake +6 -0
- metadata +49 -36
- data/lib/active_fields/models/concerns/concern.rb +0 -16
- data/lib/active_fields/models/concerns/customizable.rb +0 -83
- data/lib/active_fields/models/concerns/field_concern.rb +0 -79
- data/lib/active_fields/models/concerns/value_concern.rb +0 -50
- data/lib/active_fields/models/field/date_array.rb +0 -44
- data/lib/active_fields/models/field/decimal.rb +0 -48
- data/lib/active_fields/models/field/decimal_array.rb +0 -44
- data/lib/active_fields/models/field/enum_array.rb +0 -59
- data/lib/active_fields/models/field/integer_array.rb +0 -34
- data/lib/active_fields/models/field/text_array.rb +0 -35
- data/lib/active_fields/models/field.rb +0 -27
- data/lib/active_fields/models/value.rb +0 -30
@@ -1,9 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "text_caster"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Casters
|
7
|
-
class EnumCaster <
|
5
|
+
class EnumCaster < BaseCaster
|
6
|
+
def serialize(value)
|
7
|
+
cast(value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def deserialize(value)
|
11
|
+
cast(value)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def cast(value)
|
17
|
+
value&.to_s.presence
|
18
|
+
end
|
19
|
+
end
|
8
20
|
end
|
9
21
|
end
|
@@ -1,10 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_caster"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Casters
|
7
|
-
class IntegerCaster <
|
5
|
+
class IntegerCaster < BaseCaster
|
8
6
|
def serialize(value)
|
9
7
|
cast(value)
|
10
8
|
end
|
@@ -16,7 +14,7 @@ module ActiveFields
|
|
16
14
|
private
|
17
15
|
|
18
16
|
def cast(value)
|
19
|
-
|
17
|
+
BigDecimal(value, 0, exception: false)&.to_i
|
20
18
|
end
|
21
19
|
end
|
22
20
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveFields
|
4
|
+
class Config
|
5
|
+
DEFAULT_FIELD_BASE_CLASS_NAME = "ActiveFields::Field::Base"
|
6
|
+
DEFAULT_VALUE_CLASS_NAME = "ActiveFields::Value"
|
7
|
+
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
attr_accessor :field_base_class_name, :value_class_name
|
11
|
+
attr_reader :fields
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@field_base_class_name = DEFAULT_FIELD_BASE_CLASS_NAME
|
15
|
+
@value_class_name = DEFAULT_VALUE_CLASS_NAME
|
16
|
+
@fields = {
|
17
|
+
boolean: "ActiveFields::Field::Boolean",
|
18
|
+
date: "ActiveFields::Field::Date",
|
19
|
+
date_array: "ActiveFields::Field::DateArray",
|
20
|
+
datetime: "ActiveFields::Field::DateTime",
|
21
|
+
datetime_array: "ActiveFields::Field::DateTimeArray",
|
22
|
+
decimal: "ActiveFields::Field::Decimal",
|
23
|
+
decimal_array: "ActiveFields::Field::DecimalArray",
|
24
|
+
enum: "ActiveFields::Field::Enum",
|
25
|
+
enum_array: "ActiveFields::Field::EnumArray",
|
26
|
+
integer: "ActiveFields::Field::Integer",
|
27
|
+
integer_array: "ActiveFields::Field::IntegerArray",
|
28
|
+
text: "ActiveFields::Field::Text",
|
29
|
+
text_array: "ActiveFields::Field::TextArray",
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def field_base_class
|
34
|
+
@field_base_class ||= field_base_class_name.constantize
|
35
|
+
end
|
36
|
+
|
37
|
+
def value_class
|
38
|
+
@value_class ||= value_class_name.constantize
|
39
|
+
end
|
40
|
+
|
41
|
+
def field_base_class_changed?
|
42
|
+
field_base_class_name != DEFAULT_FIELD_BASE_CLASS_NAME
|
43
|
+
end
|
44
|
+
|
45
|
+
def value_class_changed?
|
46
|
+
value_class_name != DEFAULT_VALUE_CLASS_NAME
|
47
|
+
end
|
48
|
+
|
49
|
+
def register_field(type_name, class_name)
|
50
|
+
@fields[type_name.to_sym] = class_name
|
51
|
+
end
|
52
|
+
|
53
|
+
def type_names
|
54
|
+
fields.keys
|
55
|
+
end
|
56
|
+
|
57
|
+
def type_class_names
|
58
|
+
fields.values
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,24 @@
|
|
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
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveFields
|
4
|
+
class Engine < ::Rails::Engine
|
5
|
+
isolate_namespace ActiveFields
|
6
|
+
|
7
|
+
initializer "active_fields.active_record" do
|
8
|
+
ActiveSupport.on_load(:active_record) do
|
9
|
+
include HasActiveFields
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveFields
|
4
|
+
# Mix-in that allows ActiveRecord models to enable active fields
|
5
|
+
module HasActiveFields
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
class_methods do
|
9
|
+
attr_reader :active_fields_config
|
10
|
+
|
11
|
+
def has_active_fields(types: ActiveFields.config.type_names)
|
12
|
+
include CustomizableConcern
|
13
|
+
|
14
|
+
@active_fields_config = CustomizableConfig.new(self)
|
15
|
+
@active_fields_config.types = types
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -4,24 +4,28 @@ module ActiveFields
|
|
4
4
|
module Validators
|
5
5
|
# Validates the active_value value
|
6
6
|
class BaseValidator
|
7
|
-
attr_reader :
|
7
|
+
attr_reader :options, :errors
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
@
|
9
|
+
def initialize(**options)
|
10
|
+
@options = options
|
11
11
|
@errors = Set.new
|
12
12
|
end
|
13
13
|
|
14
|
+
# Performs the validation and adds errors to the `errors` list.
|
15
|
+
# Returns `true` if no errors are found, `false` otherwise.
|
14
16
|
def validate(value)
|
15
17
|
perform_validation(value)
|
16
18
|
valid?
|
17
19
|
end
|
18
20
|
|
21
|
+
# Returns `true` if no errors are found, `false` otherwise.
|
19
22
|
def valid?
|
20
23
|
errors.empty?
|
21
24
|
end
|
22
25
|
|
23
26
|
private
|
24
27
|
|
28
|
+
# Performs the validation. If there are any errors, it should save them in `errors`.
|
25
29
|
def perform_validation(value)
|
26
30
|
raise NotImplementedError
|
27
31
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class BooleanValidator < BaseValidator
|
@@ -9,9 +7,9 @@ module ActiveFields
|
|
9
7
|
|
10
8
|
def perform_validation(value)
|
11
9
|
if value.nil?
|
12
|
-
errors << :exclusion unless
|
10
|
+
errors << :exclusion unless options[:nullable]
|
13
11
|
elsif value.is_a?(FalseClass)
|
14
|
-
errors << :required if
|
12
|
+
errors << :required if options[:required]
|
15
13
|
elsif value.is_a?(TrueClass)
|
16
14
|
nil
|
17
15
|
else
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class DateArrayValidator < BaseValidator
|
@@ -13,11 +11,11 @@ module ActiveFields
|
|
13
11
|
return
|
14
12
|
end
|
15
13
|
|
16
|
-
validate_size(value, min:
|
14
|
+
validate_size(value, min: options[:min_size], max: options[:max_size])
|
17
15
|
|
18
16
|
value.each do |elem_value|
|
19
|
-
if elem_value.
|
20
|
-
validate_minmax(elem_value, min:
|
17
|
+
if elem_value.acts_like?(:date)
|
18
|
+
validate_minmax(elem_value, min: options[:min], max: options[:max])
|
21
19
|
else
|
22
20
|
errors << :invalid
|
23
21
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveFields
|
4
|
+
module Validators
|
5
|
+
class DateTimeArrayValidator < BaseValidator
|
6
|
+
private
|
7
|
+
|
8
|
+
def perform_validation(value)
|
9
|
+
unless value.is_a?(Array)
|
10
|
+
errors << :invalid
|
11
|
+
return
|
12
|
+
end
|
13
|
+
|
14
|
+
validate_size(value, min: options[:min_size], max: options[:max_size])
|
15
|
+
|
16
|
+
value.each do |elem_value|
|
17
|
+
if elem_value.acts_like?(:time)
|
18
|
+
validate_minmax(elem_value, min: options[:min], max: options[:max])
|
19
|
+
else
|
20
|
+
errors << :invalid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveFields
|
4
|
+
module Validators
|
5
|
+
class DateTimeValidator < BaseValidator
|
6
|
+
private
|
7
|
+
|
8
|
+
def perform_validation(value)
|
9
|
+
if value.nil?
|
10
|
+
errors << :required if options[:required]
|
11
|
+
elsif value.acts_like?(:time)
|
12
|
+
validate_minmax(value, min: options[:min], max: options[:max])
|
13
|
+
else
|
14
|
+
errors << :invalid
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class DateValidator < BaseValidator
|
@@ -9,9 +7,9 @@ module ActiveFields
|
|
9
7
|
|
10
8
|
def perform_validation(value)
|
11
9
|
if value.nil?
|
12
|
-
errors << :required if
|
13
|
-
elsif value.
|
14
|
-
validate_minmax(value, min:
|
10
|
+
errors << :required if options[:required]
|
11
|
+
elsif value.acts_like?(:date)
|
12
|
+
validate_minmax(value, min: options[:min], max: options[:max])
|
15
13
|
else
|
16
14
|
errors << :invalid
|
17
15
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class DecimalArrayValidator < BaseValidator
|
@@ -13,11 +11,11 @@ module ActiveFields
|
|
13
11
|
return
|
14
12
|
end
|
15
13
|
|
16
|
-
validate_size(value, min:
|
14
|
+
validate_size(value, min: options[:min_size], max: options[:max_size])
|
17
15
|
|
18
16
|
value.each do |elem_value|
|
19
17
|
if elem_value.is_a?(Numeric)
|
20
|
-
validate_minmax(elem_value, min:
|
18
|
+
validate_minmax(elem_value, min: options[:min], max: options[:max])
|
21
19
|
else
|
22
20
|
errors << :invalid
|
23
21
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class DecimalValidator < BaseValidator
|
@@ -9,9 +7,9 @@ module ActiveFields
|
|
9
7
|
|
10
8
|
def perform_validation(value)
|
11
9
|
if value.nil?
|
12
|
-
errors << :required if
|
10
|
+
errors << :required if options[:required]
|
13
11
|
elsif value.is_a?(Numeric)
|
14
|
-
validate_minmax(value, min:
|
12
|
+
validate_minmax(value, min: options[:min], max: options[:max])
|
15
13
|
else
|
16
14
|
errors << :invalid
|
17
15
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class EnumArrayValidator < BaseValidator
|
@@ -13,11 +11,11 @@ module ActiveFields
|
|
13
11
|
return
|
14
12
|
end
|
15
13
|
|
16
|
-
validate_size(value, min:
|
14
|
+
validate_size(value, min: options[:min_size], max: options[:max_size])
|
17
15
|
|
18
|
-
if
|
16
|
+
if options[:allowed_values].is_a?(Array)
|
19
17
|
value.each do |elem_value|
|
20
|
-
validate_value_allowed(elem_value, allowed_values:
|
18
|
+
validate_value_allowed(elem_value, allowed_values: options[:allowed_values])
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class EnumValidator < BaseValidator
|
@@ -9,9 +7,9 @@ module ActiveFields
|
|
9
7
|
|
10
8
|
def perform_validation(value)
|
11
9
|
if value.nil?
|
12
|
-
errors << :required if
|
13
|
-
elsif
|
14
|
-
validate_value_allowed(value, allowed_values:
|
10
|
+
errors << :required if options[:required]
|
11
|
+
elsif options[:allowed_values].is_a?(Array)
|
12
|
+
validate_value_allowed(value, allowed_values: options[:allowed_values])
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class IntegerArrayValidator < BaseValidator
|
@@ -13,11 +11,11 @@ module ActiveFields
|
|
13
11
|
return
|
14
12
|
end
|
15
13
|
|
16
|
-
validate_size(value, min:
|
14
|
+
validate_size(value, min: options[:min_size], max: options[:max_size])
|
17
15
|
|
18
16
|
value.each do |elem_value|
|
19
17
|
if elem_value.is_a?(Numeric)
|
20
|
-
validate_minmax(elem_value, min:
|
18
|
+
validate_minmax(elem_value, min: options[:min], max: options[:max])
|
21
19
|
else
|
22
20
|
errors << :invalid
|
23
21
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class IntegerValidator < BaseValidator
|
@@ -9,9 +7,9 @@ module ActiveFields
|
|
9
7
|
|
10
8
|
def perform_validation(value)
|
11
9
|
if value.nil?
|
12
|
-
errors << :required if
|
10
|
+
errors << :required if options[:required]
|
13
11
|
elsif value.is_a?(Numeric)
|
14
|
-
validate_minmax(value, min:
|
12
|
+
validate_minmax(value, min: options[:min], max: options[:max])
|
15
13
|
else
|
16
14
|
errors << :invalid
|
17
15
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class TextArrayValidator < BaseValidator
|
@@ -13,11 +11,11 @@ module ActiveFields
|
|
13
11
|
return
|
14
12
|
end
|
15
13
|
|
16
|
-
validate_size(value, min:
|
14
|
+
validate_size(value, min: options[:min_size], max: options[:max_size])
|
17
15
|
|
18
16
|
value.each do |elem_value|
|
19
17
|
if elem_value.is_a?(String)
|
20
|
-
validate_length(elem_value, min:
|
18
|
+
validate_length(elem_value, min: options[:min_length], max: options[:max_length])
|
21
19
|
else
|
22
20
|
errors << :invalid
|
23
21
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "base_validator"
|
4
|
-
|
5
3
|
module ActiveFields
|
6
4
|
module Validators
|
7
5
|
class TextValidator < BaseValidator
|
@@ -9,9 +7,9 @@ module ActiveFields
|
|
9
7
|
|
10
8
|
def perform_validation(value)
|
11
9
|
if value.nil?
|
12
|
-
errors << :required if
|
10
|
+
errors << :required if options[:required]
|
13
11
|
elsif value.is_a?(String)
|
14
|
-
validate_length(value, min:
|
12
|
+
validate_length(value, min: options[:min_length], max: options[:max_length])
|
15
13
|
else
|
16
14
|
errors << :invalid
|
17
15
|
end
|
data/lib/active_fields.rb
CHANGED
@@ -1,13 +1,53 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "active_support"
|
4
|
-
require "active_record"
|
5
|
-
|
6
3
|
require_relative "active_fields/version"
|
7
|
-
|
8
|
-
Dir["#{__dir__}/active_fields/validators/**/*.rb"].each { |f| require_relative f }
|
9
|
-
Dir["#{__dir__}/active_fields/models/**/*.rb"].each { |f| require_relative f }
|
4
|
+
require_relative "active_fields/engine"
|
10
5
|
|
11
6
|
module ActiveFields
|
12
|
-
|
7
|
+
autoload :Config, "active_fields/config"
|
8
|
+
autoload :CustomizableConfig, "active_fields/customizable_config"
|
9
|
+
autoload :HasActiveFields, "active_fields/has_active_fields"
|
10
|
+
|
11
|
+
module Casters
|
12
|
+
autoload :BaseCaster, "active_fields/casters/base_caster"
|
13
|
+
autoload :BooleanCaster, "active_fields/casters/boolean_caster"
|
14
|
+
autoload :DateCaster, "active_fields/casters/date_caster"
|
15
|
+
autoload :DateArrayCaster, "active_fields/casters/date_array_caster"
|
16
|
+
autoload :DateTimeCaster, "active_fields/casters/date_time_caster"
|
17
|
+
autoload :DateTimeArrayCaster, "active_fields/casters/date_time_array_caster"
|
18
|
+
autoload :DecimalCaster, "active_fields/casters/decimal_caster"
|
19
|
+
autoload :DecimalArrayCaster, "active_fields/casters/decimal_array_caster"
|
20
|
+
autoload :EnumCaster, "active_fields/casters/enum_caster"
|
21
|
+
autoload :EnumArrayCaster, "active_fields/casters/enum_array_caster"
|
22
|
+
autoload :IntegerCaster, "active_fields/casters/integer_caster"
|
23
|
+
autoload :IntegerArrayCaster, "active_fields/casters/integer_array_caster"
|
24
|
+
autoload :TextCaster, "active_fields/casters/text_caster"
|
25
|
+
autoload :TextArrayCaster, "active_fields/casters/text_array_caster"
|
26
|
+
end
|
27
|
+
|
28
|
+
module Validators
|
29
|
+
autoload :BaseValidator, "active_fields/validators/base_validator"
|
30
|
+
autoload :BooleanValidator, "active_fields/validators/boolean_validator"
|
31
|
+
autoload :DateValidator, "active_fields/validators/date_validator"
|
32
|
+
autoload :DateArrayValidator, "active_fields/validators/date_array_validator"
|
33
|
+
autoload :DateTimeValidator, "active_fields/validators/date_time_validator"
|
34
|
+
autoload :DateTimeArrayValidator, "active_fields/validators/date_time_array_validator"
|
35
|
+
autoload :DecimalValidator, "active_fields/validators/decimal_validator"
|
36
|
+
autoload :DecimalArrayValidator, "active_fields/validators/decimal_array_validator"
|
37
|
+
autoload :EnumValidator, "active_fields/validators/enum_validator"
|
38
|
+
autoload :EnumArrayValidator, "active_fields/validators/enum_array_validator"
|
39
|
+
autoload :IntegerValidator, "active_fields/validators/integer_validator"
|
40
|
+
autoload :IntegerArrayValidator, "active_fields/validators/integer_array_validator"
|
41
|
+
autoload :TextValidator, "active_fields/validators/text_validator"
|
42
|
+
autoload :TextArrayValidator, "active_fields/validators/text_array_validator"
|
43
|
+
end
|
44
|
+
|
45
|
+
class << self
|
46
|
+
def config
|
47
|
+
yield Config.instance if block_given?
|
48
|
+
Config.instance
|
49
|
+
end
|
50
|
+
|
51
|
+
alias_method :configure, :config
|
52
|
+
end
|
13
53
|
end
|
@@ -5,28 +5,24 @@ require "rails/generators"
|
|
5
5
|
module ActiveFields
|
6
6
|
module Generators
|
7
7
|
class InstallGenerator < ::Rails::Generators::Base
|
8
|
-
|
8
|
+
desc "This generator creates an create_initializer and copies plugin migrations"
|
9
9
|
|
10
|
-
|
10
|
+
def create_initializer
|
11
|
+
initializer "active_fields.rb", <<~RUBY
|
12
|
+
ActiveFields.configure do |config|
|
13
|
+
# Change fields base class:
|
14
|
+
# config.field_base_class_name = "CustomField"
|
15
|
+
# Change value class:
|
16
|
+
# config.value_class_name = "CustomValue"
|
11
17
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
"create_active_fields_tables.rb.tt",
|
17
|
-
"db/migrate/create_active_fields_tables.rb",
|
18
|
-
{ migration_version: migration_version },
|
19
|
-
)
|
18
|
+
# Register custom field type:
|
19
|
+
# config.register_field :ip, "IpField"
|
20
|
+
end
|
21
|
+
RUBY
|
20
22
|
end
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
def migration_version
|
25
|
-
format(
|
26
|
-
"[%d.%d]",
|
27
|
-
ActiveRecord::VERSION::MAJOR,
|
28
|
-
ActiveRecord::VERSION::MINOR,
|
29
|
-
)
|
24
|
+
def install_migrations
|
25
|
+
rails_command "active_fields:install:migrations"
|
30
26
|
end
|
31
27
|
end
|
32
28
|
end
|