active_delegate 0.1.7 → 0.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e17b460409a616aa13bb2a37fedc9bc4fb136d0
4
- data.tar.gz: b7b928163141d0c4f4acb49eab1b4c5deaf07738
3
+ metadata.gz: 59b7e693e22c66982f05158ef1df7ac3a1f5f1f2
4
+ data.tar.gz: 198ecbb8547fe818fea48ddf07eb1ca5fdb879ea
5
5
  SHA512:
6
- metadata.gz: 6dd676d93994f9d99f12b20e6b5454a6423af734a89c4f2b5350e733eb75cf759d49c5c540f8c169bbc44596f5cf7786664cf5dd47cc8ea2aa46c546a6211e06
7
- data.tar.gz: 7648081d154bd45b0ba836d9a2777a9e44ee0e73952f838555ba62c5557f87a58feb7918e55901e66857c1e46e1e2883487bd86b8b5eb5b6ff3c2d32855a9664
6
+ metadata.gz: 168cede4634ec480bab04354409d72f6306cceccfb27ad5c18e6a51ea686d3e308da13a81572540cb461ab4735e73c46124f4f10d217d094f1d1707edbd3b7ff
7
+ data.tar.gz: e71530500911af1ac072a82c4e0d29feb0e03a76ef0f23dfcd0b5ac9ec6a7ad79e1bd5286da0c29e41b4e4b9eeb6168b32d7bd07fb4e142fbe5aa85e81b20e66
@@ -1,29 +1,28 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_delegate (0.1.2)
4
+ active_delegate (0.1.1)
5
5
  activerecord (~> 5.0)
6
6
  i18n (~> 0.8)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activemodel (5.1.4)
12
- activesupport (= 5.1.4)
13
- activerecord (5.1.4)
14
- activemodel (= 5.1.4)
15
- activesupport (= 5.1.4)
11
+ activemodel (5.1.1)
12
+ activesupport (= 5.1.1)
13
+ activerecord (5.1.1)
14
+ activemodel (= 5.1.1)
15
+ activesupport (= 5.1.1)
16
16
  arel (~> 8.0)
17
- activesupport (5.1.4)
17
+ activesupport (5.1.1)
18
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
19
  i18n (~> 0.7)
20
20
  minitest (~> 5.1)
21
21
  tzinfo (~> 1.1)
22
22
  arel (8.0.0)
23
23
  concurrent-ruby (1.0.5)
24
- i18n (0.9.0)
25
- concurrent-ruby (~> 1.0)
26
- minitest (5.10.3)
24
+ i18n (0.8.4)
25
+ minitest (5.10.2)
27
26
  rake (10.5.0)
28
27
  thread_safe (0.3.6)
29
28
  tzinfo (1.2.3)
@@ -39,4 +38,4 @@ DEPENDENCIES
39
38
  rake (~> 10.0)
40
39
 
41
40
  BUNDLED WITH
42
- 1.15.4
41
+ 1.14.6
@@ -18,7 +18,7 @@ module ActiveDelegate
18
18
 
19
19
  # Get default options
20
20
  def default_options
21
- { except: [], only: [], allow_nil: false, to: [], prefix: nil, localized: false }
21
+ { except: [], only: [], allow_nil: false, to: [], prefix: nil, localized: false, finder: false, scope: false }
22
22
  end
23
23
 
24
24
  # Get association reflection
@@ -135,14 +135,83 @@ module ActiveDelegate
135
135
  undefined = attributes.reject { |a| a.in? existing }
136
136
 
137
137
  undefined.each do |attrib|
138
- attr_name = attrib.to_s.sub("#{attribute_prefix}_", '')
139
- cast_type = @options[:cast_type] || association_class.attribute_types["#{attr_name}"]
138
+ attr_name = attrib.to_s.sub("#{attribute_prefix}_", '')
139
+ cast_type = @options[:cast_type] || association_class.attribute_types["#{attr_name}"]
140
+ attr_alias = @options[:alias]
141
+ attr_default = @options[:default] || association_class.column_defaults["#{attr_name}"]
142
+ attr_finder = @options[:finder] || Array(@options[:finder]).include?(attr_name)
143
+ attr_scope = @options[:scope] || Array(@options[:scope]).include?(attr_name)
140
144
 
141
145
  @model.attribute(attrib, cast_type)
142
146
 
143
- if @options[:alias].present?
144
- @model.attribute(@options[:alias], cast_type)
145
- @model.alias_attribute(@options[:alias], attrib)
147
+ define_attribute_default_value(attrib, attr_name, attr_default) unless attr_default.nil?
148
+ define_attribute_alias_method(attrib, attr_alias, cast_type) unless attr_alias.nil?
149
+ define_attribute_finder_methods(attr_alias || attrib, attr_name) if attr_finder == true
150
+ define_attribute_scope_methods(attr_alias || attrib, attr_name) if attr_scope == true
151
+ end
152
+ end
153
+
154
+ # Define delegated attribute default
155
+ def define_attribute_default_value(attrib, attr_name, attr_default)
156
+ attr_assoc = @options[:to]
157
+ attr_cattr = :"_attribute_#{attrib}_default"
158
+
159
+ @model.send(:define_singleton_method, attr_cattr) { attr_default }
160
+
161
+ @model.class_eval do
162
+ class_eval <<-EOM, __FILE__, __LINE__ + 1
163
+ def #{attrib}
164
+ send(:#{attr_assoc}).try(:#{attr_name}) || self.class.send(:#{attr_cattr})
165
+ end
166
+ EOM
167
+ end
168
+ end
169
+
170
+ # Define delegated attribute alias
171
+ def define_attribute_alias_method(attrib, attr_alias, cast_type)
172
+ @model.attribute(attr_alias, cast_type)
173
+ @model.alias_attribute(attr_alias, attrib)
174
+ end
175
+
176
+ # Define attribute finder methods
177
+ def define_attribute_finder_methods(attrib, attr_name)
178
+ attr_assoc = @options[:to]
179
+ attr_table = association_reflection.klass.table_name
180
+ attr_method = :"find_by_#{attrib}"
181
+
182
+ @model.send(:define_singleton_method, attr_method) do |value|
183
+ includes(attr_assoc).find_by(attr_table => { attr_name => value })
184
+ end
185
+
186
+ @model.send(:define_singleton_method, :"#{attr_method}!") do |value|
187
+ includes(attr_assoc).find_by!(attr_table => { attr_name => value })
188
+ end
189
+ end
190
+
191
+ # Define attribute scope methods
192
+ def define_attribute_scope_methods(attrib, attr_name)
193
+ attr_assoc = @options[:to]
194
+ attr_table = association_reflection.klass.table_name
195
+ attr_blank = { attr_table => { attr_name => nil } }
196
+
197
+ @model.scope :"with_#{attrib}", -> (*names) do
198
+ named = { attr_table => { attr_name => names } }
199
+
200
+ if names.empty?
201
+ includes(attr_assoc).where.not(attr_blank)
202
+ else
203
+ includes(attr_assoc).where(named)
204
+ end
205
+ end
206
+
207
+ @model.scope :"without_#{attrib}", -> (*names) do
208
+ named = { attr_table => { attr_name => names } }
209
+
210
+ if names.empty?
211
+ includes(attr_assoc).where(attr_blank)
212
+ else
213
+ includes(attr_assoc).where(attr_blank)
214
+ .or(includes(attr_assoc).where.not(named))
146
215
  end
147
216
  end
148
217
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveDelegate
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.8'
3
3
  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: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonian Guveli
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-12 00:00:00.000000000 Z
11
+ date: 2017-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord