opulent 1.7.3 → 1.7.4
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 +4 -4
- data/.DS_Store +0 -0
- data/.travis.yml +5 -0
- data/README.md +1 -0
- data/Rakefile +3 -1
- data/benchmarks/basic/view.erb +17 -0
- data/benchmarks/basic/view.haml +13 -0
- data/benchmarks/basic/view.op +13 -0
- data/benchmarks/basic/view.slim +12 -0
- data/benchmarks/data-attribute/view.erb +2 -0
- data/benchmarks/data-attribute/view.haml +3 -0
- data/benchmarks/data-attribute/view.op +3 -0
- data/benchmarks/data-attribute/view.slim +3 -0
- data/benchmarks/methods/view.erb +5 -0
- data/benchmarks/methods/view.haml +4 -0
- data/benchmarks/methods/view.op +4 -0
- data/benchmarks/methods/view.slim +4 -0
- data/benchmarks/{view.erb → page/view.erb} +0 -0
- data/benchmarks/{view.haml → page/view.haml} +0 -0
- data/benchmarks/{view.op → page/view.op} +4 -4
- data/benchmarks/{view.slim → page/view.slim} +0 -0
- data/benchmarks/run-benchmarks.rb +34 -18
- data/lib/opulent/compiler/buffer.rb +70 -40
- data/lib/opulent/engine.rb +3 -3
- data/lib/opulent/settings.rb +3 -3
- data/lib/opulent/template.rb +1 -1
- data/lib/opulent/tokens.rb +4 -4
- data/lib/opulent/version.rb +1 -1
- data/opulent.gemspec +2 -2
- metadata +27 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfd7c4bb2a3d68371199e60dbde0142284838c33
|
4
|
+
data.tar.gz: 439afecffbd0e1365d8776a2fea806fdac0b0abc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cb8538328cd64913156f39e660fb2be5d020ddc13cf8548d11c72d26867c2dece4c665075c274176e6cbb29aea33dca79eaadd92d5784c223c3dc8c1ac5f6ab
|
7
|
+
data.tar.gz: 4f9d9ff6ac176401c74296ed8d9ce46728644c6b2b85ced95f96f0c709db9df5f1b418920c0cf9b8f494eaac4670a410d9eae1caf2d1b35b9720cba1d6eeee5a
|
data/.DS_Store
CHANGED
Binary file
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# Opulent
|
2
|
+
[](https://travis-ci.org/opulent/opulent)
|
2
3
|
|
3
4
|
Opulent is an __Intelligent Web Templating Engine__ created for extremely fast and efficient Web Development. Based on the idea of lightweight and reusable __Web Components__, Opulent greatly increases your development speed for any project.
|
4
5
|
|
data/Rakefile
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rspec/core/rake_task"
|
3
3
|
|
4
|
-
|
5
4
|
# RSpec task
|
6
5
|
RSpec::Core::RakeTask.new(:spec)
|
7
6
|
task :test => :spec
|
@@ -10,3 +9,6 @@ task :test => :spec
|
|
10
9
|
task :benchmark do
|
11
10
|
ruby 'benchmarks/run-benchmarks.rb'
|
12
11
|
end
|
12
|
+
|
13
|
+
# Default Rake task
|
14
|
+
task default: 'test'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE HTML>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title>Simple Benchmark</title>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<h1>Page Heading</h1>
|
9
|
+
<div id="content">
|
10
|
+
<ul class="list">
|
11
|
+
<li>Test 1</li>
|
12
|
+
<li>Test 2</li>
|
13
|
+
<li>Test 3</li>
|
14
|
+
</ul>
|
15
|
+
</div>
|
16
|
+
</body>
|
17
|
+
</html>
|
File without changes
|
File without changes
|
@@ -4,14 +4,14 @@ html
|
|
4
4
|
title Simple Benchmark
|
5
5
|
body
|
6
6
|
h1 =~ header
|
7
|
-
unless item.empty?
|
7
|
+
- unless item.empty?
|
8
8
|
ul
|
9
9
|
- for i in item
|
10
|
-
if i[:current]
|
10
|
+
- if i[:current]
|
11
11
|
li
|
12
12
|
strong =~ i[:name]
|
13
|
-
else
|
13
|
+
- else
|
14
14
|
li
|
15
15
|
a href=~i[:url] =~ i[:name]
|
16
|
-
else
|
16
|
+
- else
|
17
17
|
p The list is empty.
|
File without changes
|
@@ -2,10 +2,14 @@
|
|
2
2
|
|
3
3
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'), File.dirname(__FILE__))
|
4
4
|
|
5
|
+
W = 5000
|
6
|
+
N = 100000
|
7
|
+
|
8
|
+
require 'benchmark'
|
5
9
|
require 'benchmark/ips'
|
6
10
|
|
7
11
|
require 'tilt'
|
8
|
-
require 'opulent'
|
12
|
+
require '../lib/opulent'
|
9
13
|
require 'erubis'
|
10
14
|
require 'erb'
|
11
15
|
require 'haml'
|
@@ -14,17 +18,19 @@ require 'slim'
|
|
14
18
|
require_relative 'context'
|
15
19
|
|
16
20
|
class Benchmarks
|
17
|
-
def initialize(
|
21
|
+
def initialize(test_case)
|
18
22
|
@benches = Hash.new { |h, k| h[k] = [] }
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
@
|
23
|
-
@
|
24
|
+
test_case = "page" unless test_case
|
25
|
+
|
26
|
+
@opulent_code = File.read(File.dirname(__FILE__) + "/#{test_case}/view.op")
|
27
|
+
@erb_code = File.read(File.dirname(__FILE__) + "/#{test_case}/view.erb")
|
28
|
+
@haml_code = File.read(File.dirname(__FILE__) + "/#{test_case}/view.haml")
|
29
|
+
@slim_code = File.read(File.dirname(__FILE__) + "/#{test_case}/view.slim")
|
24
30
|
|
25
31
|
init_compiled_benches
|
26
32
|
init_tilt_benches
|
27
|
-
init_parsing_benches
|
33
|
+
init_parsing_benches
|
28
34
|
end
|
29
35
|
|
30
36
|
def init_compiled_benches
|
@@ -36,10 +42,9 @@ class Benchmarks
|
|
36
42
|
haml_pretty.def_method(context, :run_haml_pretty)
|
37
43
|
haml_ugly.def_method(context, :run_haml_ugly)
|
38
44
|
context.instance_eval %{
|
39
|
-
def run_opulent_ugly; #{Opulent.new(@opulent_code).
|
45
|
+
def run_opulent_ugly; #{Opulent.new(@opulent_code).src}; end
|
40
46
|
def run_erb; #{ERB.new(@erb_code).src}; end
|
41
47
|
def run_erubis; #{Erubis::Eruby.new(@erb_code).src}; end
|
42
|
-
def run_temple_erb; #{Temple::ERB::Engine.new.call @erb_code}; end
|
43
48
|
def run_fast_erubis; #{Erubis::FastEruby.new(@erb_code).src}; end
|
44
49
|
def run_slim_pretty; #{Slim::Engine.new(pretty: true).call @slim_code}; end
|
45
50
|
def run_slim_ugly; #{Slim::Engine.new.call @slim_code}; end
|
@@ -49,7 +54,6 @@ class Benchmarks
|
|
49
54
|
bench(:compiled, 'erb') { context.run_erb }
|
50
55
|
bench(:compiled, 'erubis') { context.run_erubis }
|
51
56
|
bench(:compiled, 'fast erubis') { context.run_fast_erubis }
|
52
|
-
bench(:compiled, 'temple erb') { context.run_temple_erb }
|
53
57
|
bench(:compiled, 'slim pretty') { context.run_slim_pretty }
|
54
58
|
bench(:compiled, 'slim ugly') { context.run_slim_ugly }
|
55
59
|
bench(:compiled, 'haml pretty') { context.run_haml_pretty }
|
@@ -60,7 +64,6 @@ class Benchmarks
|
|
60
64
|
tilt_opulent = Opulent::Template.new() { @opulent_code }
|
61
65
|
tilt_erb = Tilt::ERBTemplate.new { @erb_code }
|
62
66
|
tilt_erubis = Tilt::ErubisTemplate.new { @erb_code }
|
63
|
-
tilt_temple_erb = Temple::ERB::Template.new { @erb_code }
|
64
67
|
tilt_haml_pretty = Tilt::HamlTemplate.new(format: :html5) { @haml_code }
|
65
68
|
tilt_haml_ugly = Tilt::HamlTemplate.new(format: :html5, ugly: true) { @haml_code }
|
66
69
|
tilt_slim_pretty = Slim::Template.new(pretty: true) { @slim_code }
|
@@ -71,7 +74,6 @@ class Benchmarks
|
|
71
74
|
bench(:tilt, 'opulent') { tilt_opulent.render(context) }
|
72
75
|
bench(:tilt, 'erb') { tilt_erb.render(context) }
|
73
76
|
bench(:tilt, 'erubis') { tilt_erubis.render(context) }
|
74
|
-
bench(:tilt, 'temple erb') { tilt_temple_erb.render(context) }
|
75
77
|
bench(:tilt, 'slim pretty') { tilt_slim_pretty.render(context) }
|
76
78
|
bench(:tilt, 'slim ugly') { tilt_slim_ugly.render(context) }
|
77
79
|
bench(:tilt, 'haml pretty') { tilt_haml_pretty.render(context) }
|
@@ -86,7 +88,6 @@ class Benchmarks
|
|
86
88
|
bench(:parsing, 'erb') { ERB.new(@erb_code).result(context_binding) }
|
87
89
|
bench(:parsing, 'erubis') { Erubis::Eruby.new(@erb_code).result(context_binding) }
|
88
90
|
bench(:parsing, 'fast erubis') { Erubis::FastEruby.new(@erb_code).result(context_binding) }
|
89
|
-
bench(:parsing, 'temple erb') { Temple::ERB::Template.new { @erb_code }.render(context) }
|
90
91
|
bench(:parsing, 'slim pretty') { Slim::Template.new(pretty: true) { @slim_code }.render(context) }
|
91
92
|
bench(:parsing, 'slim ugly') { Slim::Template.new { @slim_code }.render(context) }
|
92
93
|
bench(:parsing, 'haml pretty') { Haml::Engine.new(@haml_code, format: :html5).render(context) }
|
@@ -95,7 +96,25 @@ class Benchmarks
|
|
95
96
|
|
96
97
|
def run
|
97
98
|
@benches.each do |group_name, group_benches|
|
98
|
-
puts "
|
99
|
+
puts "\nRunning #{group_name} benchmarks\n\n"
|
100
|
+
|
101
|
+
puts "Warming up -------------------------------------"
|
102
|
+
Benchmark.bm do |x|
|
103
|
+
group_benches.each do |name, block|
|
104
|
+
x.report("#{group_name} #{name}") {
|
105
|
+
W.times do block.call end
|
106
|
+
}
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
puts "Measuring -------------------------------------"
|
111
|
+
Benchmark.bm do |x|
|
112
|
+
group_benches.each do |name, block|
|
113
|
+
x.report("#{group_name} #{name}") {
|
114
|
+
N.times do block.call end
|
115
|
+
}
|
116
|
+
end
|
117
|
+
end
|
99
118
|
|
100
119
|
Benchmark.ips do |x|
|
101
120
|
group_benches.each do |name, block|
|
@@ -120,9 +139,6 @@ Compiled Tilt benchmark: Template is compiled with Tilt, which gives a more
|
|
120
139
|
Parsing benchmark: Template is parsed every time.
|
121
140
|
This is not the recommended way to use the template engine
|
122
141
|
and Slim is not optimized for it. Activate this benchmark with 'rake bench slow=1'.
|
123
|
-
|
124
|
-
Temple ERB is the ERB implementation using the Temple framework. It shows the
|
125
|
-
overhead added by the Temple framework compared to ERB.
|
126
142
|
"
|
127
143
|
end
|
128
144
|
|
@@ -131,4 +147,4 @@ overhead added by the Temple framework compared to ERB.
|
|
131
147
|
end
|
132
148
|
end
|
133
149
|
|
134
|
-
Benchmarks.new(
|
150
|
+
Benchmarks.new(ARGV[0]).run
|
@@ -66,13 +66,13 @@ module Opulent
|
|
66
66
|
def buffer_attributes_to_hash(attributes)
|
67
67
|
'{' + attributes.inject([]) do |extend_map, (key, attribute)|
|
68
68
|
extend_map << (
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
69
|
+
":\"#{key}\" => " + if key == :class
|
70
|
+
'[' + attribute.map do |exp|
|
71
|
+
exp[@value]
|
72
|
+
end.join(', ') + ']'
|
73
|
+
else
|
74
|
+
attribute[@value]
|
75
|
+
end
|
76
76
|
)
|
77
77
|
end.join(', ') + '}'
|
78
78
|
end
|
@@ -88,35 +88,45 @@ module Opulent
|
|
88
88
|
buffer_class_attribute_type_check = proc do |variable, escape = true|
|
89
89
|
class_variable = buffer_set_variable :local, variable
|
90
90
|
|
91
|
-
|
91
|
+
# Check if we need to add the class attribute
|
92
|
+
buffer_eval "unless #{class_variable} and true === #{class_variable}"
|
93
|
+
|
94
|
+
# Check if class attribute has array value
|
95
|
+
buffer_eval "if Array === #{class_variable}"
|
96
|
+
ruby_code = "#{class_variable}.join ' '"
|
92
97
|
if escape
|
93
|
-
buffer_escape
|
98
|
+
buffer_escape ruby_code
|
94
99
|
else
|
95
|
-
buffer
|
100
|
+
buffer ruby_code
|
96
101
|
end
|
97
102
|
|
98
|
-
|
103
|
+
# Check if class attribute has hash value
|
104
|
+
buffer_eval "elsif Hash === #{class_variable}"
|
105
|
+
ruby_code = "#{class_variable}.to_a.join ' '"
|
99
106
|
if escape
|
100
|
-
buffer_escape
|
107
|
+
buffer_escape ruby_code
|
101
108
|
else
|
102
|
-
buffer
|
109
|
+
buffer ruby_code
|
103
110
|
end
|
104
111
|
|
105
|
-
|
106
|
-
"#{class_variable}.class"
|
107
|
-
|
112
|
+
# Other values
|
108
113
|
buffer_eval 'else'
|
114
|
+
ruby_code = "#{class_variable}"
|
109
115
|
if escape
|
110
|
-
buffer_escape
|
116
|
+
buffer_escape ruby_code
|
111
117
|
else
|
112
|
-
buffer
|
118
|
+
buffer ruby_code
|
113
119
|
end
|
114
120
|
|
121
|
+
# End cases
|
122
|
+
buffer_eval 'end'
|
123
|
+
|
124
|
+
# End
|
115
125
|
buffer_eval 'end'
|
116
126
|
end
|
117
127
|
|
118
128
|
# Handle class attributes by checking if they're simple, noninterpolated
|
119
|
-
# strings and extend them if needed
|
129
|
+
# strings or not and extend them if needed
|
120
130
|
#
|
121
131
|
buffer_class_attribute = proc do |attribute|
|
122
132
|
if attribute[@value] =~ Tokens[:exp_string_match]
|
@@ -168,43 +178,47 @@ module Opulent
|
|
168
178
|
# Proc for setting class attribute extension, used as DRY closure
|
169
179
|
#
|
170
180
|
buffer_data_attribute_type_check = proc do |key, variable, escape = true, dynamic = false|
|
181
|
+
# Check if variable is set
|
182
|
+
buffer_eval "if #{variable}"
|
183
|
+
|
171
184
|
# @Array
|
172
|
-
buffer_eval "if #{variable}
|
185
|
+
buffer_eval "if Array === #{variable}"
|
173
186
|
dynamic ? buffer("\" #{key}=\\\"\"") : buffer_freeze(" #{key}=\"")
|
174
187
|
|
188
|
+
ruby_code = "#{variable}.join '_'"
|
175
189
|
if escape
|
176
|
-
buffer_escape
|
190
|
+
buffer_escape ruby_code
|
177
191
|
else
|
178
|
-
buffer
|
192
|
+
buffer ruby_code
|
179
193
|
end
|
180
194
|
|
181
195
|
buffer_freeze '"'
|
182
196
|
|
183
197
|
# @Hash
|
184
|
-
buffer_eval "elsif #{variable}
|
198
|
+
buffer_eval "elsif Hash === #{variable}"
|
185
199
|
buffer_eval "#{variable}.each do |#{OPULENT_KEY}, #{OPULENT_VALUE}|"
|
186
200
|
# key-hashkey
|
187
201
|
dynamic ? buffer("\" #{key}-\"") : buffer_freeze(" #{key}-")
|
188
|
-
buffer "
|
202
|
+
buffer "#{OPULENT_KEY}.to_s"
|
189
203
|
#="value"
|
190
204
|
buffer_freeze "=\""
|
191
|
-
escape ? buffer_escape(
|
205
|
+
escape ? buffer_escape(OPULENT_VALUE) : buffer(OPULENT_VALUE)
|
192
206
|
buffer_freeze '"'
|
193
207
|
buffer_eval 'end'
|
194
208
|
|
195
209
|
# @TrueClass
|
196
|
-
buffer_eval "elsif #{variable}
|
210
|
+
buffer_eval "elsif true === #{variable}"
|
197
211
|
dynamic ? buffer("\" #{key}\"") : buffer_freeze(" #{key}")
|
198
212
|
|
199
|
-
# @FalseClass
|
200
|
-
buffer_eval "elsif [NilClass, FalseClass].include? #{variable}.class"
|
201
|
-
|
202
213
|
# @Object
|
203
214
|
buffer_eval 'else'
|
204
215
|
dynamic ? buffer("\" #{key}=\\\"\"") : buffer_freeze(" #{key}=\"")
|
205
216
|
escape ? buffer_escape("#{variable}") : buffer("#{variable}")
|
206
217
|
buffer_freeze '"'
|
207
218
|
|
219
|
+
# End Cases
|
220
|
+
buffer_eval 'end'
|
221
|
+
|
208
222
|
# End
|
209
223
|
buffer_eval 'end'
|
210
224
|
end
|
@@ -298,24 +312,40 @@ module Opulent
|
|
298
312
|
# @param string [String] Input string
|
299
313
|
# @param escape [Boolean] Escape string
|
300
314
|
#
|
315
|
+
# @ref slim-lang Thank you for the interpolation code
|
316
|
+
#
|
301
317
|
def buffer_split_by_interpolation(string, escape = true)
|
302
|
-
|
303
|
-
parts.
|
304
|
-
|
305
|
-
|
318
|
+
# Interpolate variables in text (#{variable}).
|
319
|
+
# Split the text into multiple dynamic and static parts.
|
320
|
+
begin
|
321
|
+
case string
|
322
|
+
when /\A\\#\{/
|
323
|
+
# Escaped interpolation
|
324
|
+
buffer_freeze '#{'
|
325
|
+
string = $'
|
326
|
+
when /\A#\{((?>[^{}]|(\{(?>[^{}]|\g<1>)*\}))*)\}/
|
327
|
+
# Interpolation
|
328
|
+
string, code = $', $1
|
329
|
+
# escape = code !~ /\A\{.*\}\Z/
|
306
330
|
if escape
|
307
|
-
|
331
|
+
buffer code
|
308
332
|
else
|
309
|
-
|
333
|
+
buffer_escape code[1..-2]
|
310
334
|
end
|
311
|
-
|
312
|
-
|
313
|
-
|
335
|
+
when /\A([#\\]?[^#\\]*([#\\][^\\#\{][^#\\]*)*)/
|
336
|
+
string_remaining = $'
|
337
|
+
string_current = $&
|
338
|
+
|
339
|
+
# Static text
|
340
|
+
if escape && string_current =~ Utils::ESCAPE_HTML_PATTERN
|
341
|
+
buffer_escape "\"#{string_current}\""
|
314
342
|
else
|
315
|
-
buffer_freeze
|
343
|
+
buffer_freeze string_current
|
316
344
|
end
|
345
|
+
|
346
|
+
string = string_remaining
|
317
347
|
end
|
318
|
-
end
|
348
|
+
end until string.empty?
|
319
349
|
end
|
320
350
|
end
|
321
351
|
end
|
data/lib/opulent/engine.rb
CHANGED
@@ -12,7 +12,7 @@ module Opulent
|
|
12
12
|
|
13
13
|
# @Engine
|
14
14
|
class Engine
|
15
|
-
attr_reader :nodes, :parser, :def, :file, :
|
15
|
+
attr_reader :nodes, :parser, :def, :file, :src, :buffer,
|
16
16
|
:code, :settings
|
17
17
|
|
18
18
|
# Update render settings
|
@@ -38,7 +38,7 @@ module Opulent
|
|
38
38
|
@nodes, @def = Parser.new(@settings).parse @code
|
39
39
|
|
40
40
|
# Compile our syntax tree using input context
|
41
|
-
@
|
41
|
+
@src = Compiler.new(@settings).compile @nodes, @def
|
42
42
|
end
|
43
43
|
|
44
44
|
# Avoid code duplication when layouting is set. When we have a layout, look
|
@@ -73,7 +73,7 @@ module Opulent
|
|
73
73
|
|
74
74
|
# Evaluate the template in the given scope (context)
|
75
75
|
begin
|
76
|
-
eval @
|
76
|
+
eval @src, scope
|
77
77
|
rescue ::SyntaxError => e
|
78
78
|
raise SyntaxError, e.message
|
79
79
|
ensure
|
data/lib/opulent/settings.rb
CHANGED
data/lib/opulent/template.rb
CHANGED
data/lib/opulent/tokens.rb
CHANGED
@@ -88,10 +88,10 @@ module Opulent
|
|
88
88
|
# Receive matching brackets for allowing multiple bracket types for
|
89
89
|
# element attributes
|
90
90
|
brackets: /\A([\(\[\{])/,
|
91
|
-
'('
|
92
|
-
'['
|
93
|
-
'{'
|
94
|
-
'<'
|
91
|
+
:'(' => /\A(\))/,
|
92
|
+
:'[' => /\A(\])/,
|
93
|
+
:'{' => /\A(\})/,
|
94
|
+
:'<' => /\A(\>)/,
|
95
95
|
|
96
96
|
# Terminators
|
97
97
|
comma: /\A(\s*\,\s*)/,
|
data/lib/opulent/version.rb
CHANGED
data/opulent.gemspec
CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |spec|
|
|
29
29
|
# This gem will work with 2.1.0 or greater...
|
30
30
|
spec.required_ruby_version = '>= 2.1.0'
|
31
31
|
|
32
|
-
spec.add_development_dependency "bundler"
|
33
|
-
spec.add_development_dependency "rake"
|
32
|
+
spec.add_development_dependency "bundler"
|
33
|
+
spec.add_development_dependency "rake"
|
34
34
|
spec.add_development_dependency "rspec"
|
35
35
|
|
36
36
|
spec.add_runtime_dependency 'escape_utils'
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opulent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Grozav
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,17 +91,30 @@ extra_rdoc_files: []
|
|
91
91
|
files:
|
92
92
|
- ".DS_Store"
|
93
93
|
- ".gitignore"
|
94
|
+
- ".travis.yml"
|
94
95
|
- CODE_OF_CONDUCT.md
|
95
96
|
- Gemfile
|
96
97
|
- LICENSE.md
|
97
98
|
- README.md
|
98
99
|
- Rakefile
|
100
|
+
- benchmarks/basic/view.erb
|
101
|
+
- benchmarks/basic/view.haml
|
102
|
+
- benchmarks/basic/view.op
|
103
|
+
- benchmarks/basic/view.slim
|
99
104
|
- benchmarks/context.rb
|
105
|
+
- benchmarks/data-attribute/view.erb
|
106
|
+
- benchmarks/data-attribute/view.haml
|
107
|
+
- benchmarks/data-attribute/view.op
|
108
|
+
- benchmarks/data-attribute/view.slim
|
109
|
+
- benchmarks/methods/view.erb
|
110
|
+
- benchmarks/methods/view.haml
|
111
|
+
- benchmarks/methods/view.op
|
112
|
+
- benchmarks/methods/view.slim
|
113
|
+
- benchmarks/page/view.erb
|
114
|
+
- benchmarks/page/view.haml
|
115
|
+
- benchmarks/page/view.op
|
116
|
+
- benchmarks/page/view.slim
|
100
117
|
- benchmarks/run-benchmarks.rb
|
101
|
-
- benchmarks/view.erb
|
102
|
-
- benchmarks/view.haml
|
103
|
-
- benchmarks/view.op
|
104
|
-
- benchmarks/view.slim
|
105
118
|
- bin/opulent
|
106
119
|
- docs/attributes.md
|
107
120
|
- docs/comments.md
|