temple 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
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: