temple 0.7.2 → 0.7.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7c1968702feac9a8f7896e4e008493532566765
4
- data.tar.gz: 630b90231c21489a501190a82814803d48fe5e48
3
+ metadata.gz: 7a5698e0987714d41aa759069655a1c276a5aab1
4
+ data.tar.gz: 58ae7b8dca8c28264ae03e9136e017f8a6c2efbe
5
5
  SHA512:
6
- metadata.gz: 4d9cce38ee024916f18e3ee79f1c4db8d99a52d03abbf51c01c60b91c13fb64259736484281470bf5244e12775083338797dc3c99f44908e05ce63ccc2a79356
7
- data.tar.gz: e462b1b2b1acab154556ec0dc5edf3a57004fde0075ee1856e40a54e9e6446f7826a2bdf2c14dbb5d598ea66641e101c99035e5ce2be8185cdf50596d3a01ed7
6
+ metadata.gz: b50a65d9d25973bf7470b3cc5d835bce94ff386e886570a3b6d9412b3aea312bf791bc70a6203025515a902dbe25a554d9ecf7f7ea81dcdf16322d6997e3b06a
7
+ data.tar.gz: c2e805cd2ba16d0a27af4686f0b50df4f2013b4ad146284ba952b1fe0146d4ff31d4c3954655d979ffb907b0c4eb1a4e1b81f966dbd96a5756ebc35115c80b49
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ 0.7.3
2
+
3
+ * Temple::ERB::Trimming - replace option trim_mode with trim and switch to erubis-like trimming
4
+
1
5
  0.7.2
2
6
 
3
7
  * Remove Filters::StaticFreezer, the generator does the freezing
data/lib/temple/engine.rb CHANGED
@@ -57,7 +57,11 @@ module Temple
57
57
  end
58
58
 
59
59
  def call_chain
60
- @call_chain ||= @chain.map {|name, constructor| constructor.call(self) }.compact
60
+ @call_chain ||= @chain.map do |name, constructor|
61
+ f = constructor.call(self)
62
+ raise "Constructor #{name} must return callable object" if f && !f.respond_to?(:call)
63
+ f
64
+ end.compact
61
65
  end
62
66
  end
63
67
  end
@@ -1,38 +1,23 @@
1
1
  module Temple
2
2
  module ERB
3
- # ERB trimming
4
- # Set option :trim_mode to
5
- # <> - omit newline for lines starting with <% and ending in %>
6
- # > - omit newline for lines ending in %>
7
- #
3
+ # ERB trimming like in erubis
4
+ # Deletes spaces around '<% %>' and leave spaces around '<%= %>'.
8
5
  # @api public
9
6
  class Trimming < Filter
10
- define_options :trim_mode
7
+ define_options trim: true
11
8
 
12
9
  def on_multi(*exps)
13
- case options[:trim_mode]
14
- when '>'
15
- i = 0
16
- while i < exps.size
17
- exps.delete_at(i + 1) if code?(exps[i]) && exps[i+1] == [:static, "\n"]
18
- i += 1
10
+ exps = exps.each_with_index.map do |e,i|
11
+ if e.first == :static && i > 0 && exps[i-1].first == :code
12
+ [:static, e.last.lstrip]
13
+ elsif e.first == :static && i < exps.size-1 && exps[i+1].first == :code
14
+ [:static, e.last.rstrip]
15
+ else
16
+ e
19
17
  end
20
- when '<>'
21
- i = 0
22
- while i < exps.size
23
- exps.delete_at(i + 1) if code?(exps[i]) && exps[i+1] == [:static, "\n"] &&
24
- (!exps[i-1] || (exps[i-1] == [:newline]))
25
- i += 1
26
- end
27
- end
18
+ end if options[:trim]
28
19
  [:multi, *exps]
29
20
  end
30
-
31
- protected
32
-
33
- def code?(exp)
34
- exp[0] == :escape || exp[0] == :code
35
- end
36
21
  end
37
22
  end
38
23
  end
@@ -17,15 +17,7 @@ module Temple
17
17
 
18
18
  def remove(name)
19
19
  name = chain_name(name)
20
- found = false
21
- chain.reject! do |i|
22
- if i.first == name
23
- found = true
24
- else
25
- false
26
- end
27
- end
28
- raise "#{name} not found" unless found
20
+ raise "#{name} not found" unless chain.reject! {|i| i.first == name }
29
21
  chain_modified!
30
22
  end
31
23
 
@@ -34,47 +26,24 @@ module Temple
34
26
  def before(name, *args, &block)
35
27
  name = chain_name(name)
36
28
  e = chain_element(args, block)
37
- found, i = false, 0
38
- while i < chain.size
39
- if chain[i].first == name
40
- found = true
41
- chain.insert(i, e)
42
- i += 2
43
- else
44
- i += 1
45
- end
46
- end
47
- raise "#{name} not found" unless found
29
+ chain.map! {|f| f.first == name ? [e, f] : [f] }.flatten!(1)
30
+ raise "#{name} not found" unless chain.include?(e)
48
31
  chain_modified!
49
32
  end
50
33
 
51
34
  def after(name, *args, &block)
52
35
  name = chain_name(name)
53
36
  e = chain_element(args, block)
54
- found, i = false, 0
55
- while i < chain.size
56
- if chain[i].first == name
57
- found = true
58
- i += 1
59
- chain.insert(i, e)
60
- end
61
- i += 1
62
- end
63
- raise "#{name} not found" unless found
37
+ chain.map! {|f| f.first == name ? [f, e] : [f] }.flatten!(1)
38
+ raise "#{name} not found" unless chain.include?(e)
64
39
  chain_modified!
65
40
  end
66
41
 
67
42
  def replace(name, *args, &block)
68
43
  name = chain_name(name)
69
44
  e = chain_element(args, block)
70
- found = false
71
- chain.each_with_index do |c, i|
72
- if c.first == name
73
- found = true
74
- chain[i] = e
75
- end
76
- end
77
- raise "#{name} not found" unless found
45
+ chain.map! {|f| f.first == name ? e : f }
46
+ raise "#{name} not found" unless chain.include?(e)
78
47
  chain_modified!
79
48
  end
80
49
 
@@ -108,28 +77,9 @@ module Temple
108
77
  def chain_proc_constructor(name, filter)
109
78
  raise(ArgumentError, 'Proc or blocks must have arity 0 or 1') if filter.arity > 1
110
79
  method_name = "FILTER #{name}"
111
- if Class === self
112
- define_method(method_name, &filter)
113
- filter = instance_method(method_name)
114
- if filter.arity == 1
115
- proc {|engine| filter.bind(engine) }
116
- else
117
- proc do |engine|
118
- f = filter.bind(engine).call
119
- raise 'Constructor must return callable object' unless f.respond_to?(:call)
120
- f
121
- end
122
- end
123
- else
124
- (class << self; self; end).class_eval { define_method(method_name, &filter) }
125
- filter = method(method_name)
126
- proc {|engine| filter }
127
- end
128
- end
129
-
130
- def chain_callable_constructor(filter)
131
- raise(ArgumentError, 'Class or callable argument is required') unless filter.respond_to?(:call)
132
- proc {|engine| filter }
80
+ c = Class === self ? self : singleton_class
81
+ filter = c.class_eval { define_method(method_name, &filter); instance_method(method_name) }
82
+ proc {|engine| filter.arity == 1 ? filter.bind(engine) : filter.bind(engine).call }
133
83
  end
134
84
 
135
85
  def chain_element(args, block)
@@ -164,7 +114,8 @@ module Temple
164
114
  # Other callable argument (e.g. Object of class which implements #call or Method)
165
115
  # The callable has no access to the option hash of the engine.
166
116
  raise(ArgumentError, 'Too many arguments') unless args.empty?
167
- [name, chain_callable_constructor(filter)]
117
+ raise(ArgumentError, 'Class or callable argument is required') unless filter.respond_to?(:call)
118
+ [name, proc { filter }]
168
119
  end
169
120
  end
170
121
  end
@@ -1,3 +1,3 @@
1
1
  module Temple
2
- VERSION = '0.7.2'
2
+ VERSION = '0.7.3'
3
3
  end
data/temple.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency('tilt')
26
26
  s.add_development_dependency('bacon')
27
27
  s.add_development_dependency('rake')
28
+ s.add_development_dependency('erubis')
28
29
  end
data/test/helper.rb CHANGED
@@ -19,6 +19,10 @@ module TestHelper
19
19
  def erb(src, options = {})
20
20
  Temple::ERB::Template.new(options) { src }.render
21
21
  end
22
+
23
+ def erubis(src, options = {})
24
+ Tilt::ErubisTemplate.new(options) { src }.render
25
+ end
22
26
  end
23
27
 
24
28
  class Bacon::Context
data/test/test_erb.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'helper'
2
- require 'erb'
3
- require 'tilt'
2
+ require 'tilt/erubis'
4
3
 
5
4
  describe Temple::ERB::Engine do
6
5
  it 'should compile erb' do
@@ -12,7 +11,7 @@ describe Temple::ERB::Engine do
12
11
  <% end %>
13
12
  }
14
13
 
15
- erb(src).should.equal ERB.new(src).result
14
+ erb(src).should.equal erubis(src)
16
15
  end
17
16
 
18
17
  it 'should recognize comments' do
@@ -21,7 +20,7 @@ hello
21
20
  <%# comment -- ignored -- useful in testing %>
22
21
  world}
23
22
 
24
- erb(src).should.equal ERB.new(src).result
23
+ erb(src).should.equal erubis(src)
25
24
  end
26
25
 
27
26
  it 'should recognize <%% and %%>' do
@@ -32,7 +31,7 @@ world}
32
31
  <% end %>
33
32
  }
34
33
 
35
- erb(src).should.equal "\n<%\n\n %>\n\n" #ERB.new(src).result
34
+ erb(src).should.equal "\n<%\n %>\n"
36
35
  end
37
36
 
38
37
  it 'should escape automatically' do
@@ -56,7 +55,7 @@ world}
56
55
  <% end %>
57
56
  }
58
57
 
59
- erb(src, trim_mode: '>').should.equal ERB.new(src, nil, '>').result
60
- erb(src, trim_mode: '<>').should.equal ERB.new(src, nil, '<>').result
58
+ erb(src, trim: true).should.equal erubis(src, trim: true)
59
+ erb(src, trim: false).should.equal erubis(src, trim: false)
61
60
  end
62
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: temple
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Magnus Holm
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-12-05 00:00:00.000000000 Z
12
+ date: 2014-12-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tilt
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: erubis
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
56
70
  description:
57
71
  email:
58
72
  - judofyr@gmail.com
@@ -162,26 +176,5 @@ rubygems_version: 2.2.2
162
176
  signing_key:
163
177
  specification_version: 4
164
178
  summary: Template compilation framework in Ruby
165
- test_files:
166
- - test/filters/test_code_merger.rb
167
- - test/filters/test_control_flow.rb
168
- - test/filters/test_dynamic_inliner.rb
169
- - test/filters/test_eraser.rb
170
- - test/filters/test_escapable.rb
171
- - test/filters/test_multi_flattener.rb
172
- - test/filters/test_static_merger.rb
173
- - test/helper.rb
174
- - test/html/test_attribute_merger.rb
175
- - test/html/test_attribute_remover.rb
176
- - test/html/test_attribute_sorter.rb
177
- - test/html/test_fast.rb
178
- - test/html/test_pretty.rb
179
- - test/mixins/test_dispatcher.rb
180
- - test/mixins/test_grammar_dsl.rb
181
- - test/test_engine.rb
182
- - test/test_erb.rb
183
- - test/test_filter.rb
184
- - test/test_generator.rb
185
- - test/test_grammar.rb
186
- - test/test_map.rb
187
- - test/test_utils.rb
179
+ test_files: []
180
+ has_rdoc: