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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e67f0135d7df3b6b6495593004a7e0716cfebdf1
4
- data.tar.gz: d0da9369cd9e71803aa870808a5998a324ffd736
3
+ metadata.gz: cfd7c4bb2a3d68371199e60dbde0142284838c33
4
+ data.tar.gz: 439afecffbd0e1365d8776a2fea806fdac0b0abc
5
5
  SHA512:
6
- metadata.gz: c86344fa0750534547e83dbac06310a53f2c02a820399d434df0a568f931f41aadac93ed650bd680f970af9bb2b427df908f0ad4f4032eb8d566b85b519a2cf4
7
- data.tar.gz: 4f2e9ab56ad15241da2270c8aef9f9e1497462194356573a7ea47f3f5ead1ce7fb00ab4a5ba1a813675662c528fa09aa2abdccf3ad863915e51e522354ec5eb1
6
+ metadata.gz: 2cb8538328cd64913156f39e660fb2be5d020ddc13cf8548d11c72d26867c2dece4c665075c274176e6cbb29aea33dca79eaadd92d5784c223c3dc8c1ac5f6ab
7
+ data.tar.gz: 4f9d9ff6ac176401c74296ed8d9ce46728644c6b2b85ced95f96f0c709db9df5f1b418920c0cf9b8f494eaac4670a410d9eae1caf2d1b35b9720cba1d6eeee5a
data/.DS_Store CHANGED
Binary file
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - "2.1.0"
4
+ - rbx
5
+ script: bundle exec rspec spec
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>
@@ -0,0 +1,13 @@
1
+ !!! html
2
+
3
+ %html
4
+ %head
5
+ %title Basic Markup
6
+ %body
7
+ %h1 Page Heading
8
+
9
+ %div#content
10
+ %ul.list
11
+ %li Test 1
12
+ %li Test 2
13
+ %li Test 3
@@ -0,0 +1,13 @@
1
+ doctype html
2
+ html
3
+ head
4
+ title Basic Markup
5
+ body
6
+ h1 Page Heading
7
+
8
+ - var = 3
9
+ #content
10
+ ul.list
11
+ li Test 1
12
+ li Test 2
13
+ li Test #{var}
@@ -0,0 +1,12 @@
1
+ doctype html
2
+ html
3
+ head
4
+ title Basic Markup
5
+ body
6
+ h1 Page Heading
7
+
8
+ #content
9
+ ul.list
10
+ li Test 1
11
+ li Test 2
12
+ li Test 3
@@ -0,0 +1,2 @@
1
+ <div data-a="1" data-b="2"></div>
2
+ <div ng-a="1" ng-b="2"></div>
@@ -0,0 +1,3 @@
1
+ - var = {a: 1, b: 2}
2
+ %div(data: {a: 1, b: 2})
3
+ %div(ng: var)
@@ -0,0 +1,3 @@
1
+ - var = {a: 1, b: 2}
2
+ div data={a: 1, b: 2}
3
+ div ng=var
@@ -0,0 +1,3 @@
1
+ - var = {a: 1, b: 2}
2
+ div data={a: 1, b: 2}
3
+ div ng=var
@@ -0,0 +1,5 @@
1
+ <% 10.times do |i| %>
2
+ <div id="test-<%= i %>"></div>
3
+ <div id="<%= "test".upcase %>"></div>
4
+ <div id="<%= "TEST".downcase %>"></div>
5
+ <% end %>
@@ -0,0 +1,4 @@
1
+ - 10.times do |i|
2
+ %div(id="test-#{i}")
3
+ %div(id="test")
4
+ %div(id="TEST")
@@ -0,0 +1,4 @@
1
+ / - 10.times do |i|
2
+ div id="test-#{i}"
3
+ div(id="test".upcase)
4
+ div(id="TEST".downcase)
@@ -0,0 +1,4 @@
1
+ - 10.times do |i|
2
+ div id="test-#{i}"
3
+ div(id="test".upcase)
4
+ div(id="TEST".downcase)
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(slow)
21
+ def initialize(test_case)
18
22
  @benches = Hash.new { |h, k| h[k] = [] }
19
23
 
20
- @opulent_code = File.read(File.dirname(__FILE__) + '/view.op')
21
- @erb_code = File.read(File.dirname(__FILE__) + '/view.erb')
22
- @haml_code = File.read(File.dirname(__FILE__) + '/view.haml')
23
- @slim_code = File.read(File.dirname(__FILE__) + '/view.slim')
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 if slow
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).template}; end
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 "Running #{group_name} benchmarks:"
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(ENV['slow']).run
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
- ":\"#{key}\" => " + if key == :class
70
- '[' + attribute.map do |exp|
71
- exp[@value]
72
- end.join(', ') + ']'
73
- else
74
- attribute[@value]
75
- end
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
- buffer_eval "if #{class_variable}.is_a? Array"
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("#{class_variable}.join ' '")
98
+ buffer_escape ruby_code
94
99
  else
95
- buffer("#{class_variable}.join ' '")
100
+ buffer ruby_code
96
101
  end
97
102
 
98
- buffer_eval "elsif #{class_variable}.is_a? Hash"
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("#{class_variable}.to_a.join ' '")
107
+ buffer_escape ruby_code
101
108
  else
102
- buffer("#{class_variable}.to_a.join ' '")
109
+ buffer ruby_code
103
110
  end
104
111
 
105
- buffer_eval 'elsif [TrueClass, NilClass, FalseClass].include? ' \
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("#{class_variable}")
116
+ buffer_escape ruby_code
111
117
  else
112
- buffer("#{class_variable}")
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}.is_a? Array"
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("#{variable}.join '_'")
190
+ buffer_escape ruby_code
177
191
  else
178
- buffer("#{variable}.join '_'")
192
+ buffer ruby_code
179
193
  end
180
194
 
181
195
  buffer_freeze '"'
182
196
 
183
197
  # @Hash
184
- buffer_eval "elsif #{variable}.is_a? Hash"
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 "\"\#{#{OPULENT_KEY}}\""
202
+ buffer "#{OPULENT_KEY}.to_s"
189
203
  #="value"
190
204
  buffer_freeze "=\""
191
- escape ? buffer_escape('_opulent_value') : buffer('_opulent_value')
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}.is_a? TrueClass"
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
- parts = string.split Utils::INTERPOLATION_PATTERN
303
- parts.each do |input|
304
- if input =~ Utils::INTERPOLATION_PATTERN
305
- input = input[2..-2]
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
- buffer_escape input
331
+ buffer code
308
332
  else
309
- buffer input
333
+ buffer_escape code[1..-2]
310
334
  end
311
- else
312
- if escape && input =~ Utils::ESCAPE_HTML_PATTERN
313
- buffer_escape(input.inspect)
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(input)
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
@@ -12,7 +12,7 @@ module Opulent
12
12
 
13
13
  # @Engine
14
14
  class Engine
15
- attr_reader :nodes, :parser, :def, :file, :template, :buffer,
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
- @template = Compiler.new(@settings).compile @nodes, @def
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 @template, scope
76
+ eval @src, scope
77
77
  rescue ::SyntaxError => e
78
78
  raise SyntaxError, e.message
79
79
  ensure
@@ -43,9 +43,9 @@ module Opulent
43
43
 
44
44
  # Shorthand attribute associations
45
45
  SHORTHAND = {
46
- '.': :class,
47
- '#': :id,
48
- '&': :name
46
+ :'.' => :class,
47
+ :'#' => :id,
48
+ :'&' => :name
49
49
  }
50
50
 
51
51
  # Opulent runtime settings
@@ -39,7 +39,7 @@ module Opulent
39
39
  # compilation.
40
40
  #
41
41
  def precompiled_template(_locals = {})
42
- @engine.template
42
+ @engine.src
43
43
  end
44
44
  end
45
45
 
@@ -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
- '(': /\A(\))/,
92
- '[': /\A(\])/,
93
- '{': /\A(\})/,
94
- '<': /\A(\>)/,
91
+ :'(' => /\A(\))/,
92
+ :'[' => /\A(\])/,
93
+ :'{' => /\A(\})/,
94
+ :'<' => /\A(\>)/,
95
95
 
96
96
  # Terminators
97
97
  comma: /\A(\s*\,\s*)/,
@@ -1,4 +1,4 @@
1
1
  # @Opulent
2
2
  module Opulent
3
- VERSION = '1.7.3'
3
+ VERSION = '1.7.4'
4
4
  end
@@ -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", "~> 1.10"
33
- spec.add_development_dependency "rake", "~> 10.0"
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.3
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-20 00:00:00.000000000 Z
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: '1.10'
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: '1.10'
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: '10.0'
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: '10.0'
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