opulent 1.7.3 → 1.7.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/opulent/opulent.svg?branch=master)](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
|