curly-templates 0.11.0 → 0.12.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a564172d0d4f15b3bae6c5f05579d5deb0fe845b
4
+ data.tar.gz: d28d0cf8d4998251a08d88fb13d3e44250a61a5c
5
+ SHA512:
6
+ metadata.gz: 6b360305771e280435d7ad2cb0fd07cd982728223e83701af89411037c1f61926f02e0594aee6c7e696da369dae600dcd3aceb437fc82178d2250897bf8a8a67
7
+ data.tar.gz: 8a16c5647e0059ec808fc48e92a4f843530d4036b7a744cc6aef3f19d52ae149f6d20e27c327f215b4cb2df40522b32d97a1b88d7559f34c84fff6ad9a7f7fdd
@@ -1,5 +1,13 @@
1
1
  ### Unreleased
2
2
 
3
+ * Allow Curly to output Curly syntax by using the `{{{ ... }}` syntax:
4
+
5
+ ```
6
+ {{{curly_example}}
7
+ ```
8
+
9
+ *Daniel Schierbeck and Benjamin Quorning*
10
+
3
11
  ### Curly 0.11.0 (July 31, 2013)
4
12
 
5
13
  * Make Curly raise an exception when a reference or comment is not closed.
data/README.md CHANGED
@@ -105,6 +105,11 @@ render collection: post.comments
105
105
  ```
106
106
 
107
107
 
108
+ ### Escaping Curly syntax
109
+
110
+ If you need to have `{{` rendered, you should use `{{{` in your Curly template.
111
+
112
+
108
113
  Presenters
109
114
  ----------
110
115
 
@@ -4,8 +4,8 @@ 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.11.0'
8
- s.date = '2013-07-31'
7
+ s.version = '0.12.0'
8
+ s.date = '2013-12-03'
9
9
 
10
10
  s.summary = "Free your views!"
11
11
  s.description = "A view layer for your Rails apps that separates structure and logic."
@@ -26,7 +26,7 @@
26
26
  # See Curly::Presenter for more information on presenters.
27
27
  #
28
28
  module Curly
29
- VERSION = "0.11.0"
29
+ VERSION = "0.12.0"
30
30
 
31
31
  # Compiles a Curly template to Ruby code.
32
32
  #
@@ -11,6 +11,9 @@ module Curly
11
11
  class Scanner
12
12
  CURLY_START = /\{\{/
13
13
  CURLY_END = /\}\}/
14
+
15
+ ESCAPED_CURLY_START = /\{\{\{/
16
+
14
17
  COMMENT_MARKER = /!/
15
18
 
16
19
  # Scans a Curly template for tokens.
@@ -45,7 +48,13 @@ module Curly
45
48
  # Returns a two-element Array, the first element being the Symbol type of
46
49
  # the token and the second being the String value.
47
50
  def scan_token
48
- scan_curly || scan_text
51
+ scan_escaped_curly || scan_curly || scan_text
52
+ end
53
+
54
+ def scan_escaped_curly
55
+ if @scanner.scan(ESCAPED_CURLY_START)
56
+ [:text, "{{"]
57
+ end
49
58
  end
50
59
 
51
60
  def scan_curly
@@ -99,7 +108,7 @@ module Curly
99
108
  end
100
109
 
101
110
  def scan_until_end_of_curly
102
- if value = @scanner.scan_until(CURLY_END)
111
+ if value = @scanner.scan_until(CURLY_END)
103
112
  value[0..-3]
104
113
  end
105
114
  end
@@ -19,6 +19,26 @@ class Curly::TemplateHandler
19
19
  end
20
20
  end
21
21
 
22
+ def cache_if_key_is_not_nil(context, presenter)
23
+ if key = presenter.cache_key
24
+ if presenter.class.respond_to?(:cache_key)
25
+ presenter_key = presenter.class.cache_key
26
+ else
27
+ presenter_key = nil
28
+ end
29
+
30
+ options = {
31
+ expires_in: presenter.cache_duration
32
+ }
33
+
34
+ context.cache([key, presenter_key].compact, options) do
35
+ yield
36
+ end
37
+ else
38
+ yield
39
+ end
40
+ end
41
+
22
42
  private
23
43
 
24
44
  def compile(template)
@@ -40,34 +60,16 @@ class Curly::TemplateHandler
40
60
  end
41
61
 
42
62
  presenter = #{presenter_class}.new(self, options.with_indifferent_access)
43
-
44
- view_function = lambda do
45
- #{source}
46
- end
47
-
48
63
  presenter.setup!
49
64
 
50
- if key = presenter.cache_key
51
- @output_buffer = ActiveSupport::SafeBuffer.new
52
-
53
- if #{presenter_class}.respond_to?(:cache_key)
54
- presenter_key = #{presenter_class}.cache_key
55
- else
56
- presenter_key = nil
57
- end
65
+ @output_buffer = output_buffer || ActiveSupport::SafeBuffer.new
58
66
 
59
- options = {
60
- expires_in: presenter.cache_duration
61
- }
62
-
63
- cache([key, presenter_key].compact, options) do
64
- safe_concat(view_function.call)
65
- end
66
-
67
- @output_buffer
68
- else
69
- view_function.call.html_safe
67
+ Curly::TemplateHandler.cache_if_key_is_not_nil(self, presenter) do
68
+ result = #{source}
69
+ safe_concat(result)
70
70
  end
71
+
72
+ @output_buffer
71
73
  RUBY
72
74
  end
73
75
 
@@ -41,6 +41,24 @@ describe Curly::Scanner, ".scan" do
41
41
  ]
42
42
  end
43
43
 
44
+ it "allows escaping Curly quotes" do
45
+ scan('foo {{{ bar').should == [
46
+ [:text, "foo "],
47
+ [:text, "{{"],
48
+ [:text, " bar"]
49
+ ]
50
+
51
+ scan('foo }} bar').should == [
52
+ [:text, "foo }} bar"]
53
+ ]
54
+
55
+ scan('foo {{{ lala! }} bar').should == [
56
+ [:text, "foo "],
57
+ [:text, "{{"],
58
+ [:text, " lala! }} bar"]
59
+ ]
60
+ end
61
+
44
62
  it "treats quotes as text" do
45
63
  scan('"').should == [
46
64
  [:text, '"']
@@ -47,6 +47,10 @@ describe Curly::TemplateHandler do
47
47
  @clock = 0
48
48
  end
49
49
 
50
+ def reset!
51
+ @output_buffer = ActiveSupport::SafeBuffer.new
52
+ end
53
+
50
54
  def advance_clock(duration)
51
55
  @clock += duration
52
56
  end
@@ -179,6 +183,7 @@ describe Curly::TemplateHandler do
179
183
 
180
184
  def output
181
185
  code = Curly::TemplateHandler.call(template)
186
+ context.reset!
182
187
  context.instance_eval(code)
183
188
  end
184
189
  end
metadata CHANGED
@@ -1,22 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curly-templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
5
- prerelease:
4
+ version: 0.12.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Daniel Schierbeck
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-31 00:00:00.000000000 Z
11
+ date: 2013-12-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: actionpack
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.1'
22
20
  - - <
@@ -25,9 +23,8 @@ dependencies:
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
- - - ! '>='
27
+ - - '>='
31
28
  - !ruby/object:Gem::Version
32
29
  version: '3.1'
33
30
  - - <
@@ -36,9 +33,8 @@ dependencies:
36
33
  - !ruby/object:Gem::Dependency
37
34
  name: railties
38
35
  requirement: !ruby/object:Gem::Requirement
39
- none: false
40
36
  requirements:
41
- - - ! '>='
37
+ - - '>='
42
38
  - !ruby/object:Gem::Version
43
39
  version: '3.1'
44
40
  - - <
@@ -47,9 +43,8 @@ dependencies:
47
43
  type: :development
48
44
  prerelease: false
49
45
  version_requirements: !ruby/object:Gem::Requirement
50
- none: false
51
46
  requirements:
52
- - - ! '>='
47
+ - - '>='
53
48
  - !ruby/object:Gem::Version
54
49
  version: '3.1'
55
50
  - - <
@@ -58,23 +53,20 @@ dependencies:
58
53
  - !ruby/object:Gem::Dependency
59
54
  name: rake
60
55
  requirement: !ruby/object:Gem::Requirement
61
- none: false
62
56
  requirements:
63
- - - ! '>='
57
+ - - '>='
64
58
  - !ruby/object:Gem::Version
65
59
  version: '0'
66
60
  type: :development
67
61
  prerelease: false
68
62
  version_requirements: !ruby/object:Gem::Requirement
69
- none: false
70
63
  requirements:
71
- - - ! '>='
64
+ - - '>='
72
65
  - !ruby/object:Gem::Version
73
66
  version: '0'
74
67
  - !ruby/object:Gem::Dependency
75
68
  name: rspec
76
69
  requirement: !ruby/object:Gem::Requirement
77
- none: false
78
70
  requirements:
79
71
  - - ~>
80
72
  - !ruby/object:Gem::Version
@@ -82,7 +74,6 @@ dependencies:
82
74
  type: :development
83
75
  prerelease: false
84
76
  version_requirements: !ruby/object:Gem::Requirement
85
- none: false
86
77
  requirements:
87
78
  - - ~>
88
79
  - !ruby/object:Gem::Version
@@ -90,17 +81,15 @@ dependencies:
90
81
  - !ruby/object:Gem::Dependency
91
82
  name: genspec
92
83
  requirement: !ruby/object:Gem::Requirement
93
- none: false
94
84
  requirements:
95
- - - ! '>='
85
+ - - '>='
96
86
  - !ruby/object:Gem::Version
97
87
  version: '0'
98
88
  type: :development
99
89
  prerelease: false
100
90
  version_requirements: !ruby/object:Gem::Requirement
101
- none: false
102
91
  requirements:
103
- - - ! '>='
92
+ - - '>='
104
93
  - !ruby/object:Gem::Version
105
94
  version: '0'
106
95
  description: A view layer for your Rails apps that separates structure and logic.
@@ -139,29 +128,25 @@ files:
139
128
  homepage: https://github.com/zendesk/curly
140
129
  licenses:
141
130
  - apache2
131
+ metadata: {}
142
132
  post_install_message:
143
133
  rdoc_options:
144
134
  - --charset=UTF-8
145
135
  require_paths:
146
136
  - lib
147
137
  required_ruby_version: !ruby/object:Gem::Requirement
148
- none: false
149
138
  requirements:
150
- - - ! '>='
139
+ - - '>='
151
140
  - !ruby/object:Gem::Version
152
141
  version: '0'
153
- segments:
154
- - 0
155
- hash: 1896340551249669380
156
142
  required_rubygems_version: !ruby/object:Gem::Requirement
157
- none: false
158
143
  requirements:
159
- - - ! '>='
144
+ - - '>='
160
145
  - !ruby/object:Gem::Version
161
146
  version: '0'
162
147
  requirements: []
163
148
  rubyforge_project:
164
- rubygems_version: 1.8.25
149
+ rubygems_version: 2.1.11
165
150
  signing_key:
166
151
  specification_version: 2
167
152
  summary: Free your views!