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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +0 -1
  3. data/.rubocop.yml +3 -15
  4. data/CHANGELOG.md +19 -0
  5. data/README.md +633 -0
  6. data/Rakefile +7 -0
  7. data/app/models/active_fields/application_record.rb +7 -0
  8. data/app/models/active_fields/field/base.rb +17 -0
  9. data/{lib/active_fields/models → app/models/active_fields}/field/boolean.rb +14 -9
  10. data/{lib/active_fields/models → app/models/active_fields}/field/date.rb +16 -12
  11. data/app/models/active_fields/field/date_array.rb +36 -0
  12. data/app/models/active_fields/field/date_time.rb +77 -0
  13. data/app/models/active_fields/field/date_time_array.rb +61 -0
  14. data/app/models/active_fields/field/decimal.rb +75 -0
  15. data/app/models/active_fields/field/decimal_array.rb +59 -0
  16. data/{lib/active_fields/models → app/models/active_fields}/field/enum.rb +34 -17
  17. data/app/models/active_fields/field/enum_array.rb +64 -0
  18. data/{lib/active_fields/models → app/models/active_fields}/field/integer.rb +16 -12
  19. data/app/models/active_fields/field/integer_array.rb +36 -0
  20. data/{lib/active_fields/models → app/models/active_fields}/field/text.rb +16 -12
  21. data/app/models/active_fields/field/text_array.rb +39 -0
  22. data/app/models/active_fields/value.rb +15 -0
  23. data/app/models/concerns/active_fields/customizable_concern.rb +94 -0
  24. data/app/models/concerns/active_fields/field_array_concern.rb +25 -0
  25. data/app/models/concerns/active_fields/field_concern.rb +111 -0
  26. data/app/models/concerns/active_fields/value_concern.rb +83 -0
  27. data/config/routes.rb +4 -0
  28. data/{lib/generators/active_fields/install/templates/create_active_fields_tables.rb.tt → db/migrate/20240229230000_create_active_fields_tables.rb} +8 -6
  29. data/lib/active_fields/casters/base_caster.rb +8 -2
  30. data/lib/active_fields/casters/boolean_caster.rb +0 -2
  31. data/lib/active_fields/casters/date_array_caster.rb +0 -2
  32. data/lib/active_fields/casters/date_caster.rb +8 -8
  33. data/lib/active_fields/casters/date_time_array_caster.rb +19 -0
  34. data/lib/active_fields/casters/date_time_caster.rb +43 -0
  35. data/lib/active_fields/casters/decimal_array_caster.rb +0 -2
  36. data/lib/active_fields/casters/decimal_caster.rb +10 -4
  37. data/lib/active_fields/casters/enum_array_caster.rb +13 -3
  38. data/lib/active_fields/casters/enum_caster.rb +15 -3
  39. data/lib/active_fields/casters/integer_array_caster.rb +0 -2
  40. data/lib/active_fields/casters/integer_caster.rb +2 -4
  41. data/lib/active_fields/casters/text_array_caster.rb +0 -2
  42. data/lib/active_fields/casters/text_caster.rb +0 -2
  43. data/lib/active_fields/config.rb +61 -0
  44. data/lib/active_fields/customizable_config.rb +24 -0
  45. data/lib/active_fields/engine.rb +13 -0
  46. data/lib/active_fields/has_active_fields.rb +19 -0
  47. data/lib/active_fields/validators/base_validator.rb +7 -3
  48. data/lib/active_fields/validators/boolean_validator.rb +2 -4
  49. data/lib/active_fields/validators/date_array_validator.rb +3 -5
  50. data/lib/active_fields/validators/date_time_array_validator.rb +26 -0
  51. data/lib/active_fields/validators/date_time_validator.rb +19 -0
  52. data/lib/active_fields/validators/date_validator.rb +3 -5
  53. data/lib/active_fields/validators/decimal_array_validator.rb +2 -4
  54. data/lib/active_fields/validators/decimal_validator.rb +2 -4
  55. data/lib/active_fields/validators/enum_array_validator.rb +3 -5
  56. data/lib/active_fields/validators/enum_validator.rb +3 -5
  57. data/lib/active_fields/validators/integer_array_validator.rb +2 -4
  58. data/lib/active_fields/validators/integer_validator.rb +2 -4
  59. data/lib/active_fields/validators/text_array_validator.rb +2 -4
  60. data/lib/active_fields/validators/text_validator.rb +2 -4
  61. data/lib/active_fields/version.rb +1 -1
  62. data/lib/active_fields.rb +47 -7
  63. data/lib/generators/active_fields/install/USAGE +1 -1
  64. data/lib/generators/active_fields/install/install_generator.rb +14 -18
  65. data/lib/tasks/active_fields_tasks.rake +6 -0
  66. metadata +49 -36
  67. data/lib/active_fields/models/concerns/concern.rb +0 -16
  68. data/lib/active_fields/models/concerns/customizable.rb +0 -83
  69. data/lib/active_fields/models/concerns/field_concern.rb +0 -79
  70. data/lib/active_fields/models/concerns/value_concern.rb +0 -50
  71. data/lib/active_fields/models/field/date_array.rb +0 -44
  72. data/lib/active_fields/models/field/decimal.rb +0 -48
  73. data/lib/active_fields/models/field/decimal_array.rb +0 -44
  74. data/lib/active_fields/models/field/enum_array.rb +0 -59
  75. data/lib/active_fields/models/field/integer_array.rb +0 -34
  76. data/lib/active_fields/models/field/text_array.rb +0 -35
  77. data/lib/active_fields/models/field.rb +0 -27
  78. 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 < TextCaster; end
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,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "integer_caster"
4
-
5
3
  module ActiveFields
6
4
  module Casters
7
5
  class IntegerArrayCaster < IntegerCaster
@@ -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 < DecimalCaster
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
- super(value)&.to_i
17
+ BigDecimal(value, 0, exception: false)&.to_i
20
18
  end
21
19
  end
22
20
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "text_caster"
4
-
5
3
  module ActiveFields
6
4
  module Casters
7
5
  class TextArrayCaster < TextCaster
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base_caster"
4
-
5
3
  module ActiveFields
6
4
  module Casters
7
5
  class TextCaster < BaseCaster
@@ -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 :active_field, :errors
7
+ attr_reader :options, :errors
8
8
 
9
- def initialize(active_field)
10
- @active_field = active_field
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 active_field.nullable?
10
+ errors << :exclusion unless options[:nullable]
13
11
  elsif value.is_a?(FalseClass)
14
- errors << :required if active_field.required?
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: active_field.min_size, max: active_field.max_size)
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.is_a?(Date)
20
- validate_minmax(elem_value, min: active_field.min, max: active_field.max)
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 active_field.required?
13
- elsif value.is_a?(Date)
14
- validate_minmax(value, min: active_field.min, max: active_field.max)
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: active_field.min_size, max: active_field.max_size)
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: active_field.min, max: active_field.max)
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 active_field.required?
10
+ errors << :required if options[:required]
13
11
  elsif value.is_a?(Numeric)
14
- validate_minmax(value, min: active_field.min, max: active_field.max)
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: active_field.min_size, max: active_field.max_size)
14
+ validate_size(value, min: options[:min_size], max: options[:max_size])
17
15
 
18
- if active_field.allowed_values.is_a?(Array)
16
+ if options[:allowed_values].is_a?(Array)
19
17
  value.each do |elem_value|
20
- validate_value_allowed(elem_value, allowed_values: active_field.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 active_field.required?
13
- elsif active_field.allowed_values.is_a?(Array)
14
- validate_value_allowed(value, allowed_values: active_field.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: active_field.min_size, max: active_field.max_size)
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: active_field.min, max: active_field.max)
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 active_field.required?
10
+ errors << :required if options[:required]
13
11
  elsif value.is_a?(Numeric)
14
- validate_minmax(value, min: active_field.min, max: active_field.max)
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: active_field.min_size, max: active_field.max_size)
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: active_field.min_length, max: active_field.max_length)
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 active_field.required?
10
+ errors << :required if options[:required]
13
11
  elsif value.is_a?(String)
14
- validate_length(value, min: active_field.min_length, max: active_field.max_length)
12
+ validate_length(value, min: options[:min_length], max: options[:max_length])
15
13
  else
16
14
  errors << :invalid
17
15
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveFields
4
- VERSION = "0.1.0"
4
+ VERSION = "1.0.0"
5
5
  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
- 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 }
4
+ require_relative "active_fields/engine"
10
5
 
11
6
  module ActiveFields
12
- class Error < StandardError; end
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
@@ -1,5 +1,5 @@
1
1
  Description:
2
- Generates a migration to create ActiveFields tables.
2
+ Generates an initializer and copies plugin migrations.
3
3
 
4
4
  Examples:
5
5
  `bin/rails generate active_fields:install`
@@ -5,28 +5,24 @@ require "rails/generators"
5
5
  module ActiveFields
6
6
  module Generators
7
7
  class InstallGenerator < ::Rails::Generators::Base
8
- include ::Rails::Generators::Migration
8
+ desc "This generator creates an create_initializer and copies plugin migrations"
9
9
 
10
- source_root File.expand_path("templates", __dir__)
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
- 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
- )
18
+ # Register custom field type:
19
+ # config.register_field :ip, "IpField"
20
+ end
21
+ RUBY
20
22
  end
21
23
 
22
- private
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
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # desc "Explaining what the task does"
4
+ # task :active_fields do
5
+ # # Task goes here
6
+ # end