eac_rails_utils 0.19.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/lib/active_record/associations/builder/has_many_for_active_model.rb +21 -0
  3. data/lib/active_record/associations/has_many_for_active_model_association.rb +72 -0
  4. data/lib/activemodel/associations.rb +15 -0
  5. data/lib/eac_rails_utils/models/tableless/attributes.rb +27 -0
  6. data/lib/eac_rails_utils/models/tableless/build_attributes.rb +63 -0
  7. data/lib/eac_rails_utils/models/tableless/columns.rb +23 -0
  8. data/lib/eac_rails_utils/models/tableless/strict_loading.rb +25 -0
  9. data/lib/eac_rails_utils/models/tableless.rb +2 -85
  10. data/lib/eac_rails_utils/models/tableless_associations/active_record_reflection.rb +38 -0
  11. data/lib/eac_rails_utils/models/tableless_associations/association_scope_extension.rb +23 -0
  12. data/lib/eac_rails_utils/models/tableless_associations/autosave_association.rb +12 -0
  13. data/lib/eac_rails_utils/models/tableless_associations/hooks.rb +10 -0
  14. data/lib/eac_rails_utils/models/tableless_associations/initialize_extension.rb +16 -0
  15. data/lib/eac_rails_utils/models/tableless_associations/override_methods.rb +111 -0
  16. data/lib/eac_rails_utils/models/tableless_associations/railtie.rb +7 -0
  17. data/lib/eac_rails_utils/models/tableless_associations/version.rb +5 -0
  18. data/lib/eac_rails_utils/models/tableless_associations.rb +54 -0
  19. data/lib/eac_rails_utils/patches/active_model_associations.rb +22 -20
  20. data/lib/eac_rails_utils/patches/rails_4.rb +1 -1
  21. data/lib/eac_rails_utils/patches/rails_5_2/active_model_association_method_fix.rb +1 -1
  22. data/lib/eac_rails_utils/patches/rails_5_2.rb +1 -1
  23. data/lib/eac_rails_utils/version.rb +1 -1
  24. metadata +22 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e4525483ddef206757144a407560d2b7569db1933b16935da157aef0e8645c4
4
- data.tar.gz: 163bb84353cde0a519afaba18890920cf8f04920291f8e457d81431743e61bf4
3
+ metadata.gz: 3aedeca11ee83d3ba78b7ed6e4018ec11ec5358279ee8aa60aeee9a704b67bc7
4
+ data.tar.gz: cf7618ee67289bbcfae473c46816562d43ed1054febf31982250b1f4c1db4184
5
5
  SHA512:
6
- metadata.gz: 7313d2b4e45e6893a574df04e25ef627d0edea64820eda383a22ead2bd21243d377fb659ced3c58c84726f1f06d1c0904678510a6a60263e4aac88c45742d414
7
- data.tar.gz: 8d5b6f1ab06c37696f0dd780e4017c519c41e1a2c717e9bbe3fa066824a30766fd84641546bdabe20978cb3adbba8808b06384bc3ec8ef3a4e93bf61c378f678
6
+ metadata.gz: ba22996dcb260db19cfc7ea31adf12da8f530220c2426178a50b8fbd50094040aa8bb140d83d7f81b9a1ea987f6c278f0f29c8e3d9793f52e29688e0020801c6
7
+ data.tar.gz: 538843dd71b2511945bede0711f03390c0620482643b7dd0beb5bbf39fae8a79dc31c723c0a3f318379dca0734d8433b1db3462dbb5f381e6b84a49c5c4a7bfd
@@ -0,0 +1,21 @@
1
+ module ActiveRecord::Associations::Builder
2
+ class HasManyForActiveModel < HasMany
3
+ if ActiveRecord.version >= Gem::Version.new("5.0.0.beta")
4
+ AR_CALLBACK_METHODS = %i(define_callback before_validation after_validation before_save after_save before_update after_update)
5
+
6
+ def self.valid_options(_options)
7
+ super + [:active_model, :target_ids] - [:through, :dependent, :source, :source_type, :counter_cache, :as]
8
+ end
9
+
10
+ def self.define_callbacks(model, reflection)
11
+ if AR_CALLBACK_METHODS.all? { |meth| self.respond_to?(meth) }
12
+ super
13
+ end
14
+ end
15
+ else
16
+ def valid_options
17
+ super + [:active_model, :target_ids] - [:through, :dependent, :source, :source_type, :counter_cache, :as]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,72 @@
1
+ module ActiveRecord::Associations
2
+ class HasManyForActiveModelAssociation < HasManyAssociation
3
+ # remove conditions: owner.new_record?, foreign_key_present?
4
+ def find_target?
5
+ !loaded? && klass
6
+ end
7
+
8
+ # no dependent action
9
+ def null_scope?
10
+ false
11
+ end
12
+
13
+ # not support counter_cache
14
+ def empty?
15
+ if loaded?
16
+ size.zero?
17
+ else
18
+ @target.blank? && !scope.exists?
19
+ end
20
+ end
21
+
22
+ # full replace simplely
23
+ def replace(other_array)
24
+ original_target = load_target.dup
25
+ other_array.each { |val| raise_on_type_mismatch!(val) }
26
+ target_ids = reflection.options[:target_ids]
27
+ owner[target_ids] = other_array.map(&:id)
28
+
29
+ old_records = original_target - other_array
30
+ old_records.each do |record|
31
+ @target.delete(record)
32
+ end
33
+
34
+ other_array.each do |record|
35
+ if index = @target.index(record)
36
+ @target[index] = record
37
+ else
38
+ @target << record
39
+ end
40
+ end
41
+ end
42
+
43
+ # no need transaction
44
+ def concat(*records)
45
+ load_target
46
+ flatten_records = records.flatten
47
+ flatten_records.each { |val| raise_on_type_mismatch!(val) }
48
+ target_ids = reflection.options[:target_ids]
49
+ owner[target_ids] ||= []
50
+ owner[target_ids].concat(flatten_records.map(&:id))
51
+
52
+ flatten_records.each do |record|
53
+ if index = @target.index(record)
54
+ @target[index] = record
55
+ else
56
+ @target << record
57
+ end
58
+ end
59
+
60
+ target
61
+ end
62
+
63
+ private
64
+
65
+ def get_records
66
+ return scope.to_a if reflection.scope_chain.any?(&:any?)
67
+
68
+ target_ids = reflection.options[:target_ids]
69
+ klass.where(id: owner[target_ids]).to_a
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,15 @@
1
+ require "active_model"
2
+ require "active_record"
3
+ require "active_support"
4
+ require "eac_rails_utils/models/tableless_associations"
5
+ require "eac_rails_utils/models/tableless_associations/hooks"
6
+
7
+ # Load Railtie
8
+ begin
9
+ require "rails"
10
+ rescue LoadError
11
+ end
12
+
13
+ if defined?(Rails)
14
+ require "eac_rails_utils/models/tableless_associations/railtie"
15
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRailsUtils
6
+ module Models
7
+ class Tableless
8
+ module Attributes
9
+ common_concern
10
+
11
+ def attributes=(values)
12
+ super(build_attributes(values))
13
+ end
14
+
15
+ # need hash like accessor, used internal Rails
16
+ def [](attr)
17
+ send(attr)
18
+ end
19
+
20
+ # need hash like accessor, used internal Rails
21
+ def []=(attr, value)
22
+ send("#{attr}=", value)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRailsUtils
4
+ module Models
5
+ class Tableless
6
+ class BuildAttributes
7
+ acts_as_instance_method
8
+ DATE_TIME_FIELDS = %i[year month day hour min sec].freeze
9
+
10
+ def initialize(model_class, values)
11
+ @model_class = model_class
12
+ @values = {}
13
+ values.each { |k, v| add(k, v) }
14
+ end
15
+
16
+ def result
17
+ @values
18
+ end
19
+
20
+ private
21
+
22
+ def add(key, value)
23
+ array_attr = parse_array_attr_key(key)
24
+ if array_attr
25
+ array_value_set(array_attr, value)
26
+ else
27
+ @values[key] = value
28
+ end
29
+ end
30
+
31
+ def parse_array_attr_key(key)
32
+ m = /\A(.+)\(([0-9]+)(.)\)\z/.match(key)
33
+ return unless m
34
+
35
+ ::OpenStruct.new(key: m[1], index: m[2].to_i - 1, converter: array_value_converter(m[3]))
36
+ end
37
+
38
+ def array_value_set(array_attr, value)
39
+ @values[array_attr.key] ||= {}
40
+ @values[array_attr.key].merge!(
41
+ DATE_TIME_FIELDS[array_attr.index] => value.send(array_attr.converter)
42
+ )
43
+ end
44
+
45
+ def array_value_converter(str_type)
46
+ case str_type
47
+ when 'i'
48
+ 'to_i'
49
+ else
50
+ raise "Unknown array type: \"#{str_type}\""
51
+ end
52
+ end
53
+
54
+ def date_time_attribute?(key)
55
+ attr = @model_class.attributes[key]
56
+ return false unless attr
57
+
58
+ raise attr.to_s
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRailsUtils
6
+ module Models
7
+ class Tableless
8
+ module Columns
9
+ common_concern
10
+
11
+ class_methods do
12
+ def columns
13
+ attribute_set.each.to_a
14
+ end
15
+
16
+ def columns_names
17
+ columns.map(&:name)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRailsUtils
6
+ module Models
7
+ class Tableless
8
+ # For Rails >= '6.1'.
9
+ module StrictLoading
10
+ common_concern
11
+
12
+ class_methods do
13
+ def strict_loading?
14
+ false
15
+ end
16
+ end
17
+
18
+ # @return [Boolean]
19
+ def strict_loading?
20
+ self.class.strict_loading?
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -8,100 +8,17 @@ module EacRailsUtils
8
8
  class Tableless
9
9
  include ActiveModel::Model
10
10
  include Virtus.model
11
- include ActiveModel::Associations
12
-
13
- class << self
14
- def columns
15
- attribute_set.each.to_a
16
- end
17
-
18
- def columns_names
19
- columns.map(&:name)
20
- end
21
- end
11
+ include EacRailsUtils::Models::TablelessAssociations
22
12
 
23
13
  def initialize(values = {})
24
14
  super(build_attributes(values))
25
15
  end
26
16
 
27
- def attributes=(values)
28
- super(build_attributes(values))
29
- end
30
-
31
- # need hash like accessor, used internal Rails
32
- def [](attr)
33
- send(attr)
34
- end
35
-
36
- # need hash like accessor, used internal Rails
37
- def []=(attr, value)
38
- send("#{attr}=", value)
39
- end
40
-
41
17
  def save!
42
18
  save || raise("#{self.class}.save failed: #{errors.messages}")
43
19
  end
44
20
 
45
- private
46
-
47
- def build_attributes(values)
48
- AttributesBuilder.new(self.class, values).to_attributes
49
- end
50
-
51
- class AttributesBuilder
52
- DATE_TIME_FIELDS = %i[year month day hour min sec].freeze
53
-
54
- def initialize(model_class, values)
55
- @model_class = model_class
56
- @values = {}
57
- values.each { |k, v| add(k, v) }
58
- end
59
-
60
- def to_attributes
61
- @values
62
- end
63
-
64
- private
65
-
66
- def add(key, value)
67
- array_attr = parse_array_attr_key(key)
68
- if array_attr
69
- array_value_set(array_attr, value)
70
- else
71
- @values[key] = value
72
- end
73
- end
74
-
75
- def parse_array_attr_key(key)
76
- m = /\A(.+)\(([0-9]+)(.)\)\z/.match(key)
77
- return unless m
78
-
79
- ::OpenStruct.new(key: m[1], index: m[2].to_i - 1, converter: array_value_converter(m[3]))
80
- end
81
-
82
- def array_value_set(array_attr, value)
83
- @values[array_attr.key] ||= {}
84
- @values[array_attr.key].merge!(
85
- DATE_TIME_FIELDS[array_attr.index] => value.send(array_attr.converter)
86
- )
87
- end
88
-
89
- def array_value_converter(str_type)
90
- case str_type
91
- when 'i'
92
- 'to_i'
93
- else
94
- raise "Unknown array type: \"#{str_type}\""
95
- end
96
- end
97
-
98
- def date_time_attribute?(key)
99
- attr = @model_class.attributes[key]
100
- return false unless attr
101
-
102
- raise attr.to_s
103
- end
104
- end
21
+ require_sub __FILE__, require_mode: :kernel, include_modules: :include
105
22
  end
106
23
  end
107
24
  end
@@ -0,0 +1,38 @@
1
+ module EacRailsUtils::Models::TablelessAssociations
2
+ module ActiveRecordReflection
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ if ActiveRecord.version >= Gem::Version.new("4.1.2")
7
+ class_attribute :_reflections
8
+ self._reflections = ActiveSupport::HashWithIndifferentAccess.new
9
+ else
10
+ class_attribute :reflections
11
+ self.reflections = {}
12
+ end
13
+ end
14
+
15
+ module ClassMethods
16
+ if ActiveRecord.version < Gem::Version.new("4.1")
17
+ def create_reflection(macro, name, scope, options, active_record)
18
+ case macro
19
+ when :has_many, :belongs_to
20
+ klass = ActiveRecord::Reflection::AssociationReflection
21
+ reflection = klass.new(macro, name, scope, options, active_record)
22
+ end
23
+
24
+ self.reflections = self.reflections.merge(name => reflection)
25
+ reflection
26
+ end
27
+ end
28
+
29
+ def reflect_on_association(association)
30
+ if ActiveRecord.version >= Gem::Version.new("4.1.2")
31
+ _reflections[association.to_s]
32
+ else
33
+ reflections[association]
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ module EacRailsUtils::Models::TablelessAssociations
2
+ module AssociationScopeExtension
3
+ if ActiveRecord.version >= Gem::Version.new("5.0.0.beta")
4
+ def add_constraints(scope, owner, association_klass, refl, chain_head, chain_tail)
5
+ if refl.options[:active_model]
6
+ target_ids = refl.options[:target_ids]
7
+ return scope.where(id: owner[target_ids])
8
+ end
9
+
10
+ super
11
+ end
12
+ else
13
+ def add_constraints(scope, owner, assoc_klass, refl, tracker)
14
+ if refl.options[:active_model]
15
+ target_ids = refl.options[:target_ids]
16
+ return scope.where(id: owner[target_ids])
17
+ end
18
+
19
+ super
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ module EacRailsUtils::Models::TablelessAssociations
2
+ module AutosaveAssociation
3
+ extend ActiveSupport::Concern
4
+
5
+ include ActiveRecord::AutosaveAssociation
6
+
7
+ included do
8
+ extend ActiveModel::Callbacks
9
+ define_model_callbacks :save, :create, :update
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module EacRailsUtils::Models::TablelessAssociations
2
+ module Hooks
3
+ def self.init
4
+ ActiveSupport.on_load(:active_record) do
5
+ require 'eac_rails_utils/models/tableless_associations/association_scope_extension'
6
+ ActiveRecord::Associations::AssociationScope.send(:prepend, EacRailsUtils::Models::TablelessAssociations::AssociationScopeExtension)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ module EacRailsUtils::Models::TablelessAssociations
2
+ module InitializeExtension
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ prepend WithAssociationCache
7
+ end
8
+
9
+ module WithAssociationCache
10
+ def initialize(*args)
11
+ @association_cache = {}
12
+ super
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,111 @@
1
+ module EacRailsUtils::Models::TablelessAssociations
2
+ module OverrideMethods
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def generated_association_methods
7
+ @generated_association_methods ||= begin
8
+ mod = const_set(:GeneratedAssociationMethods, Module.new)
9
+ include mod
10
+ mod
11
+ end
12
+ end
13
+ alias :generated_feature_methods :generated_association_methods \
14
+ if ActiveRecord.version < Gem::Version.new("4.1")
15
+
16
+ # override
17
+ def dangerous_attribute_method?(name)
18
+ false
19
+ end
20
+
21
+ # dummy table name
22
+ def pluralize_table_names
23
+ self.to_s.pluralize
24
+ end
25
+
26
+ def clear_reflections_cache
27
+ @__reflections = nil
28
+ end
29
+
30
+ def default_scopes
31
+ []
32
+ end
33
+
34
+ protected
35
+
36
+ def compute_type(type_name)
37
+ if type_name.match(/^::/)
38
+ # If the type is prefixed with a scope operator then we assume that
39
+ # the type_name is an absolute reference.
40
+ ActiveSupport::Dependencies.constantize(type_name)
41
+ else
42
+ # Build a list of candidates to search for
43
+ candidates = []
44
+ name.scan(/::|$/) { candidates.unshift "#{$`}::#{type_name}" }
45
+ candidates << type_name
46
+
47
+ candidates.each do |candidate|
48
+ begin
49
+ constant = ActiveSupport::Dependencies.constantize(candidate)
50
+ return constant if candidate == constant.to_s
51
+ # We don't want to swallow NoMethodError < NameError errors
52
+ rescue NoMethodError
53
+ raise
54
+ rescue NameError
55
+ end
56
+ end
57
+
58
+ raise NameError.new("uninitialized constant #{candidates.first}", candidates.first)
59
+ end
60
+ end
61
+ end
62
+
63
+ # use by association accessor
64
+ def association(name) #:nodoc:
65
+ association = association_instance_get(name)
66
+
67
+ if association.nil?
68
+ reflection = self.class.reflect_on_association(name)
69
+ if reflection.options[:active_model]
70
+ association = ActiveRecord::Associations::HasManyForActiveModelAssociation.new(self, reflection)
71
+ else
72
+ association = reflection.association_class.new(self, reflection)
73
+ end
74
+ association_instance_set(name, association)
75
+ end
76
+
77
+ association
78
+ end
79
+
80
+ def read_attribute(name)
81
+ send(name)
82
+ end
83
+ alias :_read_attribute :read_attribute
84
+
85
+ # dummy
86
+ def new_record?
87
+ false
88
+ end
89
+
90
+ private
91
+
92
+ # override
93
+ def validate_collection_association(reflection)
94
+ if association = association_instance_get(reflection.name)
95
+ if records = associated_records_to_validate_or_save(association, false, reflection.options[:autosave])
96
+ records.each { |record| association_valid?(reflection, record) }
97
+ end
98
+ end
99
+ end
100
+
101
+ # use in Rails internal
102
+ def association_instance_get(name)
103
+ @association_cache[name]
104
+ end
105
+
106
+ # use in Rails internal
107
+ def association_instance_set(name, association)
108
+ @association_cache[name] = association
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,7 @@
1
+ module EacRailsUtils::Models::TablelessAssociations
2
+ class Railtie < ::Rails::Railtie #:nodoc:
3
+ initializer 'activemodel-associations' do |_|
4
+ EacRailsUtils::Models::TablelessAssociations::Hooks.init
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module ActiveModel
2
+ module Associations
3
+ VERSION = "0.2.0"
4
+ end
5
+ end
@@ -0,0 +1,54 @@
1
+ require 'eac_rails_utils/models/tableless_associations/initialize_extension'
2
+ require 'eac_rails_utils/models/tableless_associations/active_record_reflection'
3
+ require 'eac_rails_utils/models/tableless_associations/autosave_association'
4
+ require 'eac_rails_utils/models/tableless_associations/override_methods'
5
+ require 'active_record/associations/builder/has_many_for_active_model'
6
+ require 'active_record/associations/has_many_for_active_model_association'
7
+ require 'active_support/core_ext/module'
8
+
9
+ module EacRailsUtils
10
+ module Models
11
+ module TablelessAssociations
12
+ extend ActiveSupport::Concern
13
+
14
+ include InitializeExtension
15
+ include AutosaveAssociation
16
+ include ActiveRecordReflection
17
+ include OverrideMethods
18
+
19
+ included do
20
+ mattr_accessor :belongs_to_required_by_default, instance_accessor: false
21
+ end
22
+
23
+ module ClassMethods
24
+ # define association like ActiveRecord
25
+ def belongs_to(name, scope = nil, options = {})
26
+ reflection = ActiveRecord::Associations::Builder::BelongsTo.build(self, name, scope, options)
27
+ ActiveRecord::Reflection.add_reflection self, name, reflection
28
+ end
29
+
30
+ # define association like ActiveRecord
31
+ def has_many(name, scope = nil, options = {}, &extension)
32
+ options.reverse_merge!(active_model: true, target_ids: "#{name.to_s.singularize}_ids")
33
+ if scope.is_a?(Hash)
34
+ options.merge!(scope)
35
+ scope = nil
36
+ end
37
+
38
+ reflection = ActiveRecord::Associations::Builder::HasManyForActiveModel.build(self, name, scope, options, &extension)
39
+ ActiveRecord::Reflection.add_reflection self, name, reflection
40
+
41
+ mixin = generated_association_methods
42
+ mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
43
+ def #{options[:target_ids]}=(other_ids)
44
+ @#{options[:target_ids]} = other_ids
45
+ association(:#{name}).reset
46
+ association(:#{name}).reset_scope
47
+ @#{options[:target_ids]}
48
+ end
49
+ CODE
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -4,30 +4,32 @@ require 'activemodel/associations'
4
4
  require 'eac_rails_utils/patches/rails_4'
5
5
  require 'eac_rails_utils/patches/rails_5_2'
6
6
 
7
- module ActiveModel
8
- module Associations
9
- module Hooks
10
- class << self
11
- def init
12
- init_rails_4 if ::EacRailsUtils::Patches::Rails4.enabled?
13
- init_rails_5_2 if ::EacRailsUtils::Patches::Rails52.enabled?
14
- end
7
+ module EacRailsUtils
8
+ module Models
9
+ module TablelessAssociations
10
+ module Hooks
11
+ class << self
12
+ def init
13
+ init_rails_4 if ::EacRailsUtils::Patches::Rails4.enabled?
14
+ init_rails_5_2 if ::EacRailsUtils::Patches::Rails52.enabled?
15
+ end
15
16
 
16
- def init_rails_4
17
- ActiveSupport.on_load(:active_record) do
18
- ActiveRecord::Associations::AssociationScope.prepend(
19
- ::EacRailsUtils::Patches::Rails4::ActiveRecordAssociationsAssociationScope
20
- )
17
+ def init_rails_4
18
+ ActiveSupport.on_load(:active_record) do
19
+ ActiveRecord::Associations::AssociationScope.prepend(
20
+ ::EacRailsUtils::Patches::Rails4::ActiveRecordAssociationsAssociationScope
21
+ )
22
+ end
21
23
  end
22
- end
23
24
 
24
- def init_rails_5_2
25
- rails_5_2_fix_activemodel_associations_methods
26
- end
25
+ def init_rails_5_2
26
+ rails_5_2_fix_activemodel_associations_methods
27
+ end
27
28
 
28
- def rails_5_2_fix_activemodel_associations_methods
29
- %i[belongs_to has_many].each do |method|
30
- ::EacRailsUtils::Patches::Rails52::ActiveModelAssociationMethodFix.new(method)
29
+ def rails_5_2_fix_activemodel_associations_methods
30
+ %i[belongs_to has_many].each do |method|
31
+ ::EacRailsUtils::Patches::Rails52::ActiveModelAssociationMethodFix.new(method)
32
+ end
31
33
  end
32
34
  end
33
35
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_model/associations/hooks'
3
+ require 'eac_rails_utils/models/tableless_associations/hooks'
4
4
  require 'eac_ruby_utils/require_sub'
5
5
 
6
6
  module EacRailsUtils
@@ -18,7 +18,7 @@ module EacRailsUtils
18
18
  private
19
19
 
20
20
  def the_module
21
- ::ActiveModel::Associations::ClassMethods
21
+ ::EacRailsUtils::Models::TablelessAssociations::ClassMethods
22
22
  end
23
23
 
24
24
  def perform
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_model/associations/hooks'
3
+ require 'eac_rails_utils/models/tableless_associations/hooks'
4
4
  require 'eac_ruby_utils/require_sub'
5
5
 
6
6
  module EacRailsUtils
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRailsUtils
4
- VERSION = '0.19.0'
4
+ VERSION = '0.21.0'
5
5
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_rails_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - E.A.C.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-11 00:00:00.000000000 Z
11
+ date: 2023-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activemodel-associations
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.2'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.2'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bootstrap-sass
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -50,20 +36,20 @@ dependencies:
50
36
  requirements:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
- version: '0.117'
39
+ version: '0.118'
54
40
  - - ">="
55
41
  - !ruby/object:Gem::Version
56
- version: 0.117.1
42
+ version: 0.118.1
57
43
  type: :runtime
58
44
  prerelease: false
59
45
  version_requirements: !ruby/object:Gem::Requirement
60
46
  requirements:
61
47
  - - "~>"
62
48
  - !ruby/object:Gem::Version
63
- version: '0.117'
49
+ version: '0.118'
64
50
  - - ">="
65
51
  - !ruby/object:Gem::Version
66
- version: 0.117.1
52
+ version: 0.118.1
67
53
  - !ruby/object:Gem::Dependency
68
54
  name: htmlbeautifier
69
55
  requirement: !ruby/object:Gem::Requirement
@@ -212,6 +198,9 @@ files:
212
198
  - config/initializers/json.rb
213
199
  - config/locales/en.yml
214
200
  - config/locales/pt-BR.yml
201
+ - lib/active_record/associations/builder/has_many_for_active_model.rb
202
+ - lib/active_record/associations/has_many_for_active_model_association.rb
203
+ - lib/activemodel/associations.rb
215
204
  - lib/eac_rails_utils.rb
216
205
  - lib/eac_rails_utils/engine.rb
217
206
  - lib/eac_rails_utils/engine_helper.rb
@@ -220,6 +209,19 @@ files:
220
209
  - lib/eac_rails_utils/models/fetch_errors.rb
221
210
  - lib/eac_rails_utils/models/inequality_queries.rb
222
211
  - lib/eac_rails_utils/models/tableless.rb
212
+ - lib/eac_rails_utils/models/tableless/attributes.rb
213
+ - lib/eac_rails_utils/models/tableless/build_attributes.rb
214
+ - lib/eac_rails_utils/models/tableless/columns.rb
215
+ - lib/eac_rails_utils/models/tableless/strict_loading.rb
216
+ - lib/eac_rails_utils/models/tableless_associations.rb
217
+ - lib/eac_rails_utils/models/tableless_associations/active_record_reflection.rb
218
+ - lib/eac_rails_utils/models/tableless_associations/association_scope_extension.rb
219
+ - lib/eac_rails_utils/models/tableless_associations/autosave_association.rb
220
+ - lib/eac_rails_utils/models/tableless_associations/hooks.rb
221
+ - lib/eac_rails_utils/models/tableless_associations/initialize_extension.rb
222
+ - lib/eac_rails_utils/models/tableless_associations/override_methods.rb
223
+ - lib/eac_rails_utils/models/tableless_associations/railtie.rb
224
+ - lib/eac_rails_utils/models/tableless_associations/version.rb
223
225
  - lib/eac_rails_utils/models/test_utils.rb
224
226
  - lib/eac_rails_utils/models/validations.rb
225
227
  - lib/eac_rails_utils/patches.rb