erector_cache 0.0.5 → 0.0.6

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
@@ -5,6 +5,7 @@ module ErectorCache
5
5
  cattr_accessor :expire_in
6
6
  extend ClassMethods
7
7
  class_inheritable_array :key_components
8
+ class_inheritable_hash :interpolations
8
9
  include InstanceMethods
9
10
  alias_method_chain :_render_via, :caching
10
11
  end
@@ -15,6 +16,10 @@ module ErectorCache
15
16
  self.key_components = components
16
17
  end
17
18
 
19
+ def interpolate(interpolations)
20
+ self.interpolations = interpolations
21
+ end
22
+
18
23
  def cache_for(ttl)
19
24
  self.expire_in = ttl
20
25
  end
@@ -54,7 +59,6 @@ module ErectorCache
54
59
  collection << [key, value]
55
60
  end.flatten.join(":")
56
61
  end
57
-
58
62
  end
59
63
 
60
64
  module InstanceMethods
@@ -72,6 +76,13 @@ module ErectorCache
72
76
  _render_via_without_caching(parent, options)
73
77
  else
74
78
  options = {:expire_in => @expire_in || 1.hour, :raw => true}
79
+ unless self.class.interpolations.blank?
80
+ options[:interpolate] = self.class.interpolations.inject({}) do |collection, interpolation|
81
+ collection[interpolation.first] = self.instance_variable_get("@#{interpolation.last}")
82
+ collection
83
+ end
84
+ end
85
+
75
86
  cached_fragment = LAWNCHAIR.cache(cache_key, options) do
76
87
  parent.capture { _render_via_without_caching(parent, options) }
77
88
  end
@@ -47,6 +47,26 @@ class NinjaTurtle < Turtle
47
47
  end
48
48
  end
49
49
 
50
+ class InterpolatedTurtle < Turtle
51
+ def content
52
+ div "Cool stuff below"
53
+ widget InterpolatedNinjaTurtle, :name => @name, :weapon => @weapon, :master => @master, :pizzas_eaten => @pizzas_eaten
54
+ end
55
+ end
56
+
57
+ class InterpolatedNinjaTurtle < NinjaTurtle
58
+ cache_with :weapon, :master => lambda {|m| m.name }
59
+ cache_for 25.years
60
+ interpolate "PIZZAS_EATEN" => :pizzas_eaten
61
+
62
+ def content
63
+ span "Weapon: #{@weapon}"
64
+ span "Cached at: #{Time.now.to_s(:db)}"
65
+ span "Eaten: PIZZAS_EATEN pizzas"
66
+ end
67
+ end
68
+
69
+
50
70
  describe ErectorCache::Widget do
51
71
  before do
52
72
  @splinter = Master.new("Splinter")
@@ -168,6 +188,35 @@ describe ErectorCache::Widget do
168
188
 
169
189
  @output.should include("Cached at: #{expected_cached_at_time}")
170
190
  end
191
+
192
+ context "when there are content interpolations set" do
193
+ before do
194
+
195
+ end
196
+
197
+ it "displays the appropriate content" do
198
+ expected_cached_at_time = Time.now.to_s(:db)
199
+
200
+ render_template do |controller|
201
+ controller.render_widget InterpolatedTurtle, :name => "Leonardo", :weapon => "Dual Katanas", :master => @splinter, :pizzas_eaten => "under 3000"
202
+ end
203
+
204
+ @output.should include("Weapon: Dual Katanas")
205
+ @output.should include("under 3000")
206
+ @output.should include("Cached at: #{expected_cached_at_time}")
207
+
208
+
209
+ sleep 1
210
+
211
+ render_template do |controller|
212
+ controller.render_widget InterpolatedTurtle, :name => "Leonardo", :weapon => "Dual Katanas", :master => @splinter, :pizzas_eaten => "over 9000"
213
+ end
214
+
215
+ @output.should include("Cached at: #{expected_cached_at_time}")
216
+ @output.should_not include("under 3000")
217
+ @output.should include("over 9000")
218
+ end
219
+ end
171
220
  end
172
221
 
173
222
  context "when there is NO cache_with set" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erector_cache
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Grockit
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-08 00:00:00 -07:00
18
+ date: 2010-11-18 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency