proxy_for_template 0.0.6 → 0.0.7

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.
@@ -84,14 +84,12 @@ module ProxyForTemplate
84
84
  self.class.treat_as_nil
85
85
  end
86
86
 
87
- def treat_as_nil?(method, template_value)
87
+ def treat_as_nil?(method, template_value, self_value)
88
88
 
89
89
  proc = treat_as_nil[method.to_sym]
90
90
 
91
91
  is_nil = false
92
92
 
93
- self_value = self.send(method.to_s + '_orig')
94
-
95
93
  if(proc)
96
94
  call_info = TemplateProxyCall.new(method, template_value, self_value)
97
95
 
@@ -107,6 +105,7 @@ module ProxyForTemplate
107
105
 
108
106
  def proxy_attribute_read(method)
109
107
  self_value = nil
108
+ template_value = nil
110
109
 
111
110
  if(template_responds_to?(method))
112
111
  template_value = template.attributes[method]
@@ -114,7 +113,7 @@ module ProxyForTemplate
114
113
 
115
114
  self_value = self.attributes[method]
116
115
 
117
- if !(template_value.nil? || template_value == '')
116
+ if !(template_value.nil? || template_value == '' || treat_as_nil?(method, template_value, self_value))
118
117
  self_value = template_value
119
118
  end
120
119
 
@@ -122,7 +121,6 @@ module ProxyForTemplate
122
121
  end
123
122
 
124
123
  def proxy_read(method)
125
-
126
124
  template_value = value_from_template(method)
127
125
  self_value = nil
128
126
 
@@ -142,8 +140,10 @@ module ProxyForTemplate
142
140
  template_value = template.send(method)
143
141
  end
144
142
 
145
- if(!template_value.nil? && treat_as_nil?(method, template_value))
146
- template_value = nil
143
+ if(!template_value.nil?)
144
+ self_value = self.send(method.to_s + '_orig')
145
+
146
+ template_value = nil if treat_as_nil?(method, template_value, self_value)
147
147
  end
148
148
 
149
149
  template_value
@@ -1,3 +1,3 @@
1
1
  module ProxyForTemplate
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -20,7 +20,7 @@ class Spork < ActiveRecord::Base
20
20
  belongs_to :template, :class_name => Spork.name
21
21
  include ProxyForTemplate
22
22
 
23
- template_method :some_value
23
+ template_method :some_value, :treat_as_nil => lambda { |instance, call_info| call_info.template_value == 987 }
24
24
  end
25
25
 
26
26
  describe ProxyForTemplate, '#activerecord' do
@@ -96,4 +96,11 @@ describe ProxyForTemplate, '#activerecord' do
96
96
 
97
97
  base.some_value_before_type_cast.should eq(10)
98
98
  end
99
+
100
+ it 'value_before_type_cast should respect treat_as_nil' do
101
+ template = Spork.create(:some_value => 987)
102
+ base = Spork.create(:some_value => 1024, :template => template)
103
+
104
+ base.some_value_before_type_cast.should eq(1024)
105
+ end
99
106
  end
@@ -92,7 +92,7 @@ describe ProxyForTemplate do
92
92
  it 'should be able to enumerate treat_as_nil methods' do
93
93
  @f.treat_as_nil.keys.to_a.should eq([:a])
94
94
 
95
- @f.treat_as_nil?(:a, false).should eq(true)
95
+ @f.treat_as_nil?(:a, false, false).should eq(true)
96
96
  end
97
97
 
98
98
  it 'should obey treat false as nil' do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxy_for_template
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 6
10
- version: 0.0.6
9
+ - 7
10
+ version: 0.0.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mike Emery
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-20 00:00:00 -08:00
19
- default_executable:
18
+ date: 2012-01-25 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: rspec
@@ -112,7 +111,6 @@ files:
112
111
  - spec/activerecord_spec.rb
113
112
  - spec/proxy_spec.rb
114
113
  - spec/spec_helper.rb
115
- has_rdoc: true
116
114
  homepage: ""
117
115
  licenses: []
118
116
 
@@ -142,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
140
  requirements: []
143
141
 
144
142
  rubyforge_project: proxy_for_template
145
- rubygems_version: 1.6.2
143
+ rubygems_version: 1.8.10
146
144
  signing_key:
147
145
  specification_version: 3
148
146
  summary: Allows method calls to be delegated to a template object.