classproxy 0.7.12 → 0.7.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -154,24 +154,34 @@ module ClassProxy
154
154
 
155
155
  custom_fallback = !!self.respond_to?(fallback_method)
156
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
157
+ begin
158
+ if custom_fallback and not @fallbacks_used.include? method_name
159
+ send_args = [fallback_method]
160
+
161
+ if self.method(fallback_method).arity == 1
162
+ def_fallback_obj = self.class.instance_variable_get(:@fallback_fetch)[self]
163
+ send_args << def_fallback_obj
164
+ end
165
+
166
+ @fallbacks_used << method_name
167
+ elsif not custom_fallback and not @fallbacks_used.include? "default"
168
+ args_class = ArgsClass.new(self)
169
+ self.class.send :run_fallback, args_class, self
170
+
171
+ # The value might have changed, so check here
172
+ send_args = ["no_proxy_#{method_name}".to_sym]
163
173
  end
164
174
 
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]
175
+ v = self.send(*send_args) if send_args
176
+ rescue NotFound
177
+ if custom_fallback and not @fallbacks_used.include? "default"
178
+ # If a custom callback raises NotFound, run the default fallback
179
+ # (if it hasn't been used previously), that way the default fallback
180
+ # has a chance to set the method that had been overriden previously
181
+ custom_fallback = false
182
+ retry
183
+ end
172
184
  end
173
-
174
- v = self.send(*send_args) if send_args
175
185
  self.send("#{method_name}=", v) if v and custom_fallback
176
186
 
177
187
  @mutex_in_call_for.delete method_name
@@ -1,3 +1,3 @@
1
1
  module ClassProxy
2
- VERSION = '0.7.12'
2
+ VERSION = '0.7.13'
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.12
4
+ version: 0.7.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -55,7 +55,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
55
  version: '0'
56
56
  segments:
57
57
  - 0
58
- hash: 4292062125243111746
58
+ hash: -1607131441686129206
59
59
  required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  none: false
61
61
  requirements: