curly-templates 0.3.1 → 0.4.0

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.
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
4
4
  s.rubygems_version = '1.3.5'
5
5
 
6
6
  s.name = 'curly-templates'
7
- s.version = '0.3.1'
7
+ s.version = '0.4.0'
8
8
  s.date = '2013-04-18'
9
9
 
10
10
  s.summary = "Free your views!"
data/lib/curly.rb CHANGED
@@ -26,9 +26,9 @@
26
26
  # See Curly::Presenter for more information on presenters.
27
27
  #
28
28
  module Curly
29
- VERSION = "0.3.1"
29
+ VERSION = "0.4.0"
30
30
 
31
- REFERENCE_REGEX = %r(\{\{(\w+)\}\})
31
+ REFERENCE_REGEX = %r(\{\{([\w\.]+)\}\})
32
32
 
33
33
  class InvalidReference < StandardError
34
34
  end
@@ -63,13 +63,20 @@ module Curly
63
63
  private
64
64
 
65
65
  def compile_reference(reference)
66
+ method, argument = reference.split(".", 2)
67
+
66
68
  %(\#{
67
- if presenter.method_available?(:#{reference})
68
- result = presenter.#{reference} {|*args| yield(*args) }
69
- ERB::Util.html_escape(result)
70
- else
69
+ unless presenter.method_available?(:#{method})
71
70
  raise Curly::InvalidReference, "invalid reference `{{#{reference}}}'"
72
71
  end
72
+
73
+ if presenter.method(:#{method}).arity == 1
74
+ result = presenter.#{method}(#{argument.inspect}) {|*args| yield(*args) }
75
+ else
76
+ result = presenter.#{method} {|*args| yield(*args) }
77
+ end
78
+
79
+ ERB::Util.html_escape(result)
73
80
  })
74
81
  end
75
82
 
data/spec/curly_spec.rb CHANGED
@@ -20,8 +20,12 @@ describe Curly do
20
20
  "UNICORN"
21
21
  end
22
22
 
23
+ def parameterized(value)
24
+ value
25
+ end
26
+
23
27
  def method_available?(method)
24
- [:foo, :high_yield, :yield_value, :dirty].include?(method)
28
+ [:foo, :parameterized, :high_yield, :yield_value, :dirty].include?(method)
25
29
  end
26
30
 
27
31
  def self.available_methods
@@ -42,6 +46,14 @@ describe Curly do
42
46
  evaluate("{{foo}}").should == "FOO"
43
47
  end
44
48
 
49
+ it "passes on an optional reference parameter to the presenter method" do
50
+ evaluate("{{parameterized.foo.bar}}").should == "foo.bar"
51
+ end
52
+
53
+ it "passes an empty string to methods that take a parameter when none is provided" do
54
+ evaluate("{{parameterized}}").should == ""
55
+ end
56
+
45
57
  it "makes sure only public methods are called on the presenter object" do
46
58
  expect { evaluate("{{bar}}") }.to raise_exception(Curly::InvalidReference)
47
59
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curly-templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -142,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  segments:
144
144
  - 0
145
- hash: -1940230651346147654
145
+ hash: 2429714789931258072
146
146
  required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  none: false
148
148
  requirements: