active_delegate 1.0.2 → 1.0.3
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/lib/active_delegate/association/methods.rb +2 -2
- data/lib/active_delegate/attribute/methods.rb +9 -2
- data/lib/active_delegate/attribute/object.rb +21 -6
- data/lib/active_delegate/attributes.rb +15 -2
- data/lib/active_delegate/delegator.rb +1 -0
- data/lib/active_delegate/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0d5996473a59885a272818e9654d9163978b34d0a280f068078811ab6faa6b9
|
4
|
+
data.tar.gz: cc625328747d9108c7c42a85714a3be6829f8dd0be44736be2c1d6484f41d9c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3aaa1cd551c0d1758441b5365532bf57de54c8ab0d0bd369be80f3c540a6744cbba758a41f52c430905252d2ef25731709ad19126eb7d78758aa53b50f34d0cd
|
7
|
+
data.tar.gz: f73de9365f2ac2201555b3e19be8ddb3817a4db18dffab719d2a0f29b747c518e2e38bd2a0952772a3e7895cb40ea301656e50a07d73d6f8d545de56c4e48e7c
|
@@ -27,11 +27,11 @@ module ActiveDelegate
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def prefixed
|
30
|
-
prefixes.map { |s| :"#{s}#{
|
30
|
+
prefixes.map { |s| :"#{s}#{association_name}" }
|
31
31
|
end
|
32
32
|
|
33
33
|
def suffixed
|
34
|
-
suffixes.map { |s| :"#{
|
34
|
+
suffixes.map { |s| :"#{association_name}#{s}" }
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -6,7 +6,9 @@ module ActiveDelegate
|
|
6
6
|
class Methods
|
7
7
|
attr_reader :attribute_name, :association_instance
|
8
8
|
|
9
|
-
def initialize(attribute_name, association_class)
|
9
|
+
def initialize(attribute_name, association_class, writer:, dirty:)
|
10
|
+
@define_writer = writer
|
11
|
+
@define_dirty = dirty
|
10
12
|
@attribute_name = attribute_name
|
11
13
|
@association_instance = association_class.new
|
12
14
|
end
|
@@ -26,7 +28,10 @@ module ActiveDelegate
|
|
26
28
|
private
|
27
29
|
|
28
30
|
def accessor_suffixes
|
29
|
-
['', '
|
31
|
+
suffixes = ['', '?']
|
32
|
+
suffixes << '=' if @define_writer
|
33
|
+
|
34
|
+
suffixes
|
30
35
|
end
|
31
36
|
|
32
37
|
def dirty_module
|
@@ -36,6 +41,8 @@ module ActiveDelegate
|
|
36
41
|
end
|
37
42
|
|
38
43
|
def dirty_suffixes
|
44
|
+
return [] unless @define_dirty
|
45
|
+
|
39
46
|
@dirty_suffixes ||= begin
|
40
47
|
suffixes = dirty_module.attribute_method_matchers.map(&:suffix)
|
41
48
|
suffixes.select { |m| m.starts_with?('_') }
|
@@ -16,19 +16,27 @@ module ActiveDelegate
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def define?
|
19
|
-
|
19
|
+
dirty? && (in_option?(:define) || options[:define])
|
20
20
|
end
|
21
21
|
|
22
22
|
def localize?
|
23
|
-
|
23
|
+
in_option?(:localized) || options[:localized]
|
24
|
+
end
|
25
|
+
|
26
|
+
def writer?
|
27
|
+
in_option?(:writer) || options[:writer]
|
28
|
+
end
|
29
|
+
|
30
|
+
def dirty?
|
31
|
+
writer? && (in_option?(:dirty) || options[:dirty])
|
24
32
|
end
|
25
33
|
|
26
34
|
def finder?
|
27
|
-
|
35
|
+
in_option?(:finder) || options[:finder]
|
28
36
|
end
|
29
37
|
|
30
38
|
def scope?
|
31
|
-
|
39
|
+
in_option?(:scope) || options[:scope]
|
32
40
|
end
|
33
41
|
|
34
42
|
def prefix
|
@@ -69,10 +77,13 @@ module ActiveDelegate
|
|
69
77
|
|
70
78
|
def aliases
|
71
79
|
return {} unless aliased?
|
80
|
+
|
72
81
|
Hash[delegatable_methods.map { |m| generate_alias(m) }]
|
73
82
|
end
|
74
83
|
|
75
84
|
def localized
|
85
|
+
return [] unless localize?
|
86
|
+
|
76
87
|
@localized ||= Localize.new(unprefixed, association_class).attributes
|
77
88
|
end
|
78
89
|
|
@@ -86,7 +97,11 @@ module ActiveDelegate
|
|
86
97
|
|
87
98
|
def delegatable_methods
|
88
99
|
@delegatable_methods ||= [unprefixed, *localized].flat_map do |method_name|
|
89
|
-
Methods.new(
|
100
|
+
methods = Methods.new(
|
101
|
+
method_name, association_class, writer: writer?, dirty: dirty?
|
102
|
+
)
|
103
|
+
|
104
|
+
methods.delegatable
|
90
105
|
end
|
91
106
|
end
|
92
107
|
|
@@ -97,7 +112,7 @@ module ActiveDelegate
|
|
97
112
|
end
|
98
113
|
|
99
114
|
def remove_prefix(attr_name)
|
100
|
-
attr_name.to_s.sub("#{prefix}_", '').to_sym
|
115
|
+
prefix.present? ? attr_name.to_s.sub("#{prefix}_", '').to_sym : attr_name
|
101
116
|
end
|
102
117
|
|
103
118
|
def generate_alias(method_name)
|
@@ -11,6 +11,8 @@ module ActiveDelegate
|
|
11
11
|
{
|
12
12
|
except: [],
|
13
13
|
only: [],
|
14
|
+
writer: true,
|
15
|
+
dirty: true,
|
14
16
|
localized: false,
|
15
17
|
define: true,
|
16
18
|
finder: false,
|
@@ -22,7 +24,7 @@ module ActiveDelegate
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def attribute_options
|
25
|
-
keys = %i[cast_type default define alias localized finder scope]
|
27
|
+
keys = %i[cast_type default define alias writer dirty localized finder scope]
|
26
28
|
options.select { |k, _v| k.in? keys }.merge(prefix: delegation_prefix)
|
27
29
|
end
|
28
30
|
|
@@ -31,7 +33,11 @@ module ActiveDelegate
|
|
31
33
|
end
|
32
34
|
|
33
35
|
def excluded_attributes
|
34
|
-
excluded = %i[
|
36
|
+
excluded = %i[created_at updated_at]
|
37
|
+
excluded << association_reflection.active_record_primary_key.to_sym
|
38
|
+
|
39
|
+
for_key = association_reflection.foreign_key
|
40
|
+
excluded << for_key.to_sym if for_key.present?
|
35
41
|
|
36
42
|
sti_col = association_class.inheritance_column
|
37
43
|
excluded << sti_col.to_sym if sti_col.present?
|
@@ -88,10 +94,17 @@ module ActiveDelegate
|
|
88
94
|
default: attribute.default
|
89
95
|
}
|
90
96
|
|
97
|
+
redefine_reader(method_name, attr_options)
|
98
|
+
redefine_writer(method_name, attr_options) if attribute.writer?
|
99
|
+
end
|
100
|
+
|
101
|
+
def redefine_reader(method_name, attr_options)
|
91
102
|
model.send(:redefine_method, method_name) do |*args|
|
92
103
|
ActiveDelegate::Attribute::Accessor.new(self, attr_options).read(*args)
|
93
104
|
end
|
105
|
+
end
|
94
106
|
|
107
|
+
def redefine_writer(method_name, attr_options)
|
95
108
|
model.send(:redefine_method, :"#{method_name}=") do |value|
|
96
109
|
ActiveDelegate::Attribute::Accessor.new(self, attr_options).write(value)
|
97
110
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_delegate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonian Guveli
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -108,8 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
requirements: []
|
111
|
-
|
112
|
-
rubygems_version: 2.7.7
|
111
|
+
rubygems_version: 3.0.2
|
113
112
|
signing_key:
|
114
113
|
specification_version: 4
|
115
114
|
summary: Delegate ActiveRecord model attributes and associations
|