classproxy 0.7.11 → 0.7.12

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.
@@ -103,7 +103,7 @@ module ClassProxy
103
103
  def run_fallback(args, _self=nil)
104
104
  _self ||= self.new
105
105
 
106
- _self.instance_eval "@proxied_with_nil ||= []"
106
+ _self.instance_eval "@fallbacks_used ||= []"
107
107
 
108
108
  fallback_obj = _self.instance_exec args, &@fallback_fetch
109
109
 
@@ -118,13 +118,13 @@ module ClassProxy
118
118
  # check if its set to something else
119
119
  get_method = _self.respond_to?("no_proxy_#{key}") ? "no_proxy_#{key}" : key
120
120
  if _self.respond_to? get_method and _self.send(get_method) == nil
121
- value = fallback_obj.send(key)
122
- _self.send("#{key}=", value)
123
- _self.instance_eval "@proxied_with_nil << key.to_sym" if value == nil
121
+ _self.send("#{key}=", fallback_obj.send(key))
124
122
  end
125
123
  end
126
124
  end
127
125
 
126
+ _self.instance_eval '@fallbacks_used << "default"'
127
+
128
128
  return _self
129
129
  end
130
130
 
@@ -143,39 +143,39 @@ module ClassProxy
143
143
  # here and the setter is being used when appropriate, the @mutex_in_call_for
144
144
  # prevents endless recursion.
145
145
  @mutex_in_call_for ||= []
146
- @proxied_with_nil ||= []
147
- if v == nil and not @mutex_in_call_for.include? method_name
148
- unless @proxied_with_nil.include? method_name
149
- @mutex_in_call_for << method_name
150
- method = "_run_fallback_#{method_name}".to_sym
151
-
152
- if self.respond_to?(method)
153
- # arity == 1 means that the callback is expecting the fallback object
154
- v = if self.method(method).arity == 1
155
- # Callback method is expecting to receive the fallback object
156
- fallback_fetch_method = self.class.instance_variable_get(:@fallback_fetch)
157
- fallback_obj = fallback_fetch_method[self]
158
- self.send(method, fallback_obj)
159
- else
160
- # Callback method doesn't need the fallback object
161
- self.send(method)
162
- end
163
- else
164
- # This method has no callback, so just run the fallback
165
- args_class = ArgsClass.new(self)
166
- self.class.send :run_fallback, args_class, self
167
-
168
- # The value might have changed, so check here
169
- v = self.send("no_proxy_#{method_name}".to_sym)
170
- end
171
-
172
- # Set the defaults when this class responds to the same method
173
- self.send("#{method_name}=".to_sym, v) if v and self.respond_to?("#{method_name}=")
174
- @mutex_in_call_for.delete method_name
175
- @proxied_with_nil << method_name if v == nil
146
+
147
+ return v if v or @mutex_in_call_for.include? method_name
148
+
149
+ # Track fallbacks that were used to prevent reusing them (on nil results)
150
+ @fallbacks_used ||= []
151
+
152
+ @mutex_in_call_for << method_name
153
+ fallback_method = "_run_fallback_#{method_name}".to_sym
154
+
155
+ custom_fallback = !!self.respond_to?(fallback_method)
156
+
157
+ if custom_fallback and not @fallbacks_used.include? method_name
158
+ send_args = [fallback_method]
159
+
160
+ if self.method(fallback_method).arity == 1
161
+ def_fallback_obj = self.class.instance_variable_get(:@fallback_fetch)[self]
162
+ send_args << def_fallback_obj
176
163
  end
164
+
165
+ @fallbacks_used << method_name
166
+ elsif not custom_fallback and not @fallbacks_used.include? "default"
167
+ args_class = ArgsClass.new(self)
168
+ self.class.send :run_fallback, args_class, self
169
+
170
+ # The value might have changed, so check here
171
+ send_args = ["no_proxy_#{method_name}".to_sym]
177
172
  end
178
173
 
174
+ v = self.send(*send_args) if send_args
175
+ self.send("#{method_name}=", v) if v and custom_fallback
176
+
177
+ @mutex_in_call_for.delete method_name
178
+
179
179
  return v
180
180
  end
181
181
  end
@@ -1,3 +1,3 @@
1
1
  module ClassProxy
2
- VERSION = '0.7.11'
2
+ VERSION = '0.7.12'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: classproxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.11
4
+ version: 0.7.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-19 00:00:00.000000000 Z
12
+ date: 2012-12-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -55,7 +55,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
55
  version: '0'
56
56
  segments:
57
57
  - 0
58
- hash: 1160097082629777380
58
+ hash: 4292062125243111746
59
59
  required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  none: false
61
61
  requirements: