haml 5.0.0 → 5.0.1

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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +38 -0
  5. data/CHANGELOG.md +43 -19
  6. data/Gemfile +18 -0
  7. data/README.md +1 -0
  8. data/Rakefile +6 -12
  9. data/TODO +24 -0
  10. data/benchmark.rb +66 -0
  11. data/haml.gemspec +39 -0
  12. data/lib/haml/.gitattributes +1 -0
  13. data/lib/haml/attribute_parser.rb +4 -0
  14. data/lib/haml/compiler.rb +2 -1
  15. data/lib/haml/helpers/safe_erubi_template.rb +0 -8
  16. data/lib/haml/options.rb +3 -0
  17. data/lib/haml/railtie.rb +11 -2
  18. data/lib/haml/temple_engine.rb +1 -0
  19. data/lib/haml/version.rb +1 -1
  20. data/test/attribute_parser_test.rb +4 -0
  21. data/test/engine_test.rb +7 -0
  22. data/test/filters_test.rb +2 -7
  23. data/test/template_test.rb +10 -0
  24. data/yard/default/.gitignore +1 -0
  25. data/yard/default/fulldoc/html/css/common.sass +15 -0
  26. data/yard/default/layout/html/footer.erb +12 -0
  27. metadata +13 -65
  28. data/test/erb/_av_partial_1.erb +0 -12
  29. data/test/erb/_av_partial_2.erb +0 -8
  30. data/test/erb/action_view.erb +0 -62
  31. data/test/erb/standard.erb +0 -55
  32. data/test/gemfiles/Gemfile.rails-4.0.x +0 -11
  33. data/test/gemfiles/Gemfile.rails-4.0.x.lock +0 -87
  34. data/test/gemfiles/Gemfile.rails-4.1.x +0 -5
  35. data/test/gemfiles/Gemfile.rails-4.2.x +0 -5
  36. data/test/gemfiles/Gemfile.rails-5.0.x +0 -4
  37. data/test/markaby/standard.mab +0 -52
  38. data/test/mocks/article.rb +0 -6
  39. data/test/results/bemit.xhtml +0 -4
  40. data/test/results/content_for_layout.xhtml +0 -12
  41. data/test/results/eval_suppressed.xhtml +0 -9
  42. data/test/results/helpers.xhtml +0 -72
  43. data/test/results/helpful.xhtml +0 -13
  44. data/test/results/just_stuff.xhtml +0 -71
  45. data/test/results/list.xhtml +0 -12
  46. data/test/results/nuke_inner_whitespace.xhtml +0 -40
  47. data/test/results/nuke_outer_whitespace.xhtml +0 -140
  48. data/test/results/original_engine.xhtml +0 -20
  49. data/test/results/partial_layout.xhtml +0 -6
  50. data/test/results/partial_layout_erb.xhtml +0 -6
  51. data/test/results/partials.xhtml +0 -22
  52. data/test/results/render_layout.xhtml +0 -3
  53. data/test/results/silent_script.xhtml +0 -74
  54. data/test/results/standard.xhtml +0 -159
  55. data/test/results/tag_parsing.xhtml +0 -23
  56. data/test/results/very_basic.xhtml +0 -5
  57. data/test/results/whitespace_handling.xhtml +0 -91
  58. data/test/template_test_helper.rb +0 -38
  59. data/test/templates/_av_partial_1.haml +0 -9
  60. data/test/templates/_av_partial_2.haml +0 -5
  61. data/test/templates/_layout.erb +0 -3
  62. data/test/templates/_layout_for_partial.haml +0 -3
  63. data/test/templates/_partial.haml +0 -8
  64. data/test/templates/_text_area.haml +0 -3
  65. data/test/templates/_text_area_helper.html.haml +0 -4
  66. data/test/templates/action_view.haml +0 -47
  67. data/test/templates/bemit.haml +0 -3
  68. data/test/templates/breakage.haml +0 -8
  69. data/test/templates/content_for_layout.haml +0 -8
  70. data/test/templates/eval_suppressed.haml +0 -11
  71. data/test/templates/helpers.haml +0 -55
  72. data/test/templates/helpful.haml +0 -11
  73. data/test/templates/just_stuff.haml +0 -86
  74. data/test/templates/list.haml +0 -12
  75. data/test/templates/nuke_inner_whitespace.haml +0 -32
  76. data/test/templates/nuke_outer_whitespace.haml +0 -144
  77. data/test/templates/original_engine.haml +0 -17
  78. data/test/templates/partial_layout.haml +0 -3
  79. data/test/templates/partial_layout_erb.erb +0 -4
  80. data/test/templates/partialize.haml +0 -1
  81. data/test/templates/partials.haml +0 -12
  82. data/test/templates/render_layout.haml +0 -2
  83. data/test/templates/silent_script.haml +0 -45
  84. data/test/templates/standard.haml +0 -43
  85. data/test/templates/standard_ugly.haml +0 -1
  86. data/test/templates/tag_parsing.haml +0 -21
  87. data/test/templates/very_basic.haml +0 -4
  88. data/test/templates/whitespace_handling.haml +0 -87
  89. data/test/templates/with_bom.haml +0 -1
  90. data/test/test_helper.rb +0 -99
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Haml
3
- VERSION = "5.0.0"
3
+ VERSION = "5.0.1"
4
4
  end
@@ -65,6 +65,10 @@ class AttributeParserTeset < Haml::TestCase
65
65
  it { assert_parse(nil, '%Q[f#{o}o] => bar ') }
66
66
  end
67
67
 
68
+ describe 'string interpolation' do
69
+ it { assert_parse({ 'foo' => %q["#{bar baz, '/abc/'}"] }, %q[{foo: "#{bar baz, '/abc/'}"}]) }
70
+ end
71
+
68
72
  describe 'multi lines' do
69
73
  it { assert_parse({ 'a' => 'b', 'c' => 'd' }, "{a: b,\nc: d}") }
70
74
  end
@@ -151,6 +151,13 @@ class EngineTest < Haml::TestCase
151
151
  assert_equal("<p class='3'>foo</p>", render("%p{:class => 1+2} foo").chomp)
152
152
  end
153
153
 
154
+ def test_attributes_with_interpolation
155
+ assert_equal("<iframe id='test' src='http://www.google.com/abc/'></iframe>\n", render(<<-'HAML'))
156
+ - base_url = "http://www.google.com"
157
+ %iframe#test{src: "#{File.join base_url, '/abc/'}"}
158
+ HAML
159
+ end
160
+
154
161
  def test_class_attr_with_array
155
162
  assert_equal("<p class='a b'>foo</p>\n", render("%p{:class => %w[a b]} foo")) # basic
156
163
  assert_equal("<p class='a b css'>foo</p>\n", render("%p.css{:class => %w[a b]} foo")) # merge with css
@@ -126,23 +126,18 @@ end
126
126
 
127
127
  class ErbFilterTest < Haml::TestCase
128
128
  test "multiline expressions should work" do
129
- html = "foobarbaz\n"
129
+ html = "foobarbaz\n\n"
130
130
  haml = %Q{:erb\n <%= "foo" +\n "bar" +\n "baz" %>}
131
131
  assert_equal(html, render(haml))
132
132
  end
133
133
 
134
134
  test "should evaluate in the same context as Haml" do
135
135
  haml = ":erb\n <%= foo %>"
136
- html = "bar\n"
136
+ html = "bar\n\n"
137
137
  scope = Object.new.instance_eval {foo = "bar"; nil if foo; binding}
138
138
  assert_equal(html, render(haml, :scope => scope))
139
139
  end
140
140
 
141
- test "should use Rails's XSS safety features" do
142
- assert_equal("&lt;img&gt;\n", render(":erb\n <%= '<img>' %>"))
143
- assert_equal("<img>\n", render(":erb\n <%= '<img>'.html_safe %>"))
144
- end
145
-
146
141
  end
147
142
 
148
143
  class JavascriptFilterTest < Haml::TestCase
@@ -250,6 +250,16 @@ HAML
250
250
  assert_equal("Foo & Bar &amp; Baz\n", render('Foo #{Haml::Util.html_safe("&")} Bar #{"&"} Baz', :action_view))
251
251
  end
252
252
 
253
+ def test_xss_protection_with_erb_filter
254
+ if defined?(Haml::SafeErubiTemplate)
255
+ assert_equal("&lt;img&gt;\n\n", render(":erb\n <%= '<img>' %>", :action_view))
256
+ assert_equal("<img>\n\n", render(":erb\n <%= '<img>'.html_safe %>", :action_view))
257
+ else # For Haml::SafeErubisTemplate
258
+ assert_equal("&lt;img&gt;\n", render(":erb\n <%= '<img>' %>", :action_view))
259
+ assert_equal("<img>\n", render(":erb\n <%= '<img>'.html_safe %>", :action_view))
260
+ end
261
+ end
262
+
253
263
  def test_rendered_string_is_html_safe
254
264
  assert(render("Foo").html_safe?)
255
265
  end
@@ -0,0 +1 @@
1
+ *.css
@@ -0,0 +1,15 @@
1
+ #filecontents
2
+ *:target, dt:target + dd
3
+ background-color: #ccf
4
+ border: 1px solid #88b
5
+ dt
6
+ font-weight: bold
7
+ dd
8
+ margin:
9
+ left: 0
10
+ bottom: 0.7em
11
+ padding-left: 3em
12
+ dt:target
13
+ border-bottom-style: none
14
+ & + dd
15
+ border-top-style: none
@@ -0,0 +1,12 @@
1
+ <%= superb :footer %>
2
+ <% if ENV["ANALYTICS"] %>
3
+ <script type="text/javascript">
4
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
5
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
6
+ </script>
7
+ <script type="text/javascript">
8
+ try {
9
+ var pageTracker = _gat._getTracker("<%= ENV["ANALYTICS"] %>");
10
+ pageTracker._trackPageview();
11
+ } catch(err) {}</script>
12
+ <% end %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natalie Weizenbaum
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-04-27 00:00:00.000000000 Z
14
+ date: 2017-05-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: temple
@@ -111,15 +111,23 @@ executables:
111
111
  extensions: []
112
112
  extra_rdoc_files: []
113
113
  files:
114
+ - ".gitignore"
115
+ - ".gitmodules"
116
+ - ".travis.yml"
114
117
  - ".yardopts"
115
118
  - CHANGELOG.md
116
119
  - FAQ.md
120
+ - Gemfile
117
121
  - MIT-LICENSE
118
122
  - README.md
119
123
  - REFERENCE.md
120
124
  - Rakefile
125
+ - TODO
126
+ - benchmark.rb
121
127
  - bin/haml
128
+ - haml.gemspec
122
129
  - lib/haml.rb
130
+ - lib/haml/.gitattributes
123
131
  - lib/haml/attribute_builder.rb
124
132
  - lib/haml/attribute_compiler.rb
125
133
  - lib/haml/attribute_parser.rb
@@ -151,76 +159,16 @@ files:
151
159
  - lib/haml/version.rb
152
160
  - test/attribute_parser_test.rb
153
161
  - test/engine_test.rb
154
- - test/erb/_av_partial_1.erb
155
- - test/erb/_av_partial_2.erb
156
- - test/erb/action_view.erb
157
- - test/erb/standard.erb
158
162
  - test/filters_test.rb
159
- - test/gemfiles/Gemfile.rails-4.0.x
160
- - test/gemfiles/Gemfile.rails-4.0.x.lock
161
- - test/gemfiles/Gemfile.rails-4.1.x
162
- - test/gemfiles/Gemfile.rails-4.2.x
163
- - test/gemfiles/Gemfile.rails-5.0.x
164
163
  - test/helper_test.rb
165
- - test/markaby/standard.mab
166
- - test/mocks/article.rb
167
164
  - test/options_test.rb
168
165
  - test/parser_test.rb
169
- - test/results/bemit.xhtml
170
- - test/results/content_for_layout.xhtml
171
- - test/results/eval_suppressed.xhtml
172
- - test/results/helpers.xhtml
173
- - test/results/helpful.xhtml
174
- - test/results/just_stuff.xhtml
175
- - test/results/list.xhtml
176
- - test/results/nuke_inner_whitespace.xhtml
177
- - test/results/nuke_outer_whitespace.xhtml
178
- - test/results/original_engine.xhtml
179
- - test/results/partial_layout.xhtml
180
- - test/results/partial_layout_erb.xhtml
181
- - test/results/partials.xhtml
182
- - test/results/render_layout.xhtml
183
- - test/results/silent_script.xhtml
184
- - test/results/standard.xhtml
185
- - test/results/tag_parsing.xhtml
186
- - test/results/very_basic.xhtml
187
- - test/results/whitespace_handling.xhtml
188
166
  - test/template_test.rb
189
- - test/template_test_helper.rb
190
- - test/templates/_av_partial_1.haml
191
- - test/templates/_av_partial_2.haml
192
- - test/templates/_layout.erb
193
- - test/templates/_layout_for_partial.haml
194
- - test/templates/_partial.haml
195
- - test/templates/_text_area.haml
196
- - test/templates/_text_area_helper.html.haml
197
- - test/templates/action_view.haml
198
- - test/templates/bemit.haml
199
- - test/templates/breakage.haml
200
- - test/templates/content_for_layout.haml
201
- - test/templates/eval_suppressed.haml
202
- - test/templates/helpers.haml
203
- - test/templates/helpful.haml
204
- - test/templates/just_stuff.haml
205
- - test/templates/list.haml
206
- - test/templates/nuke_inner_whitespace.haml
207
- - test/templates/nuke_outer_whitespace.haml
208
- - test/templates/original_engine.haml
209
- - test/templates/partial_layout.haml
210
- - test/templates/partial_layout_erb.erb
211
- - test/templates/partialize.haml
212
- - test/templates/partials.haml
213
- - test/templates/render_layout.haml
214
- - test/templates/silent_script.haml
215
- - test/templates/standard.haml
216
- - test/templates/standard_ugly.haml
217
- - test/templates/tag_parsing.haml
218
- - test/templates/very_basic.haml
219
- - test/templates/whitespace_handling.haml
220
- - test/templates/with_bom.haml
221
167
  - test/temple_line_counter_test.rb
222
- - test/test_helper.rb
223
168
  - test/util_test.rb
169
+ - yard/default/.gitignore
170
+ - yard/default/fulldoc/html/css/common.sass
171
+ - yard/default/layout/html/footer.erb
224
172
  homepage: http://haml.info/
225
173
  licenses:
226
174
  - MIT
@@ -1,12 +0,0 @@
1
- <h2>This is a pretty complicated partial</h2>
2
- <div class="partial">
3
- <p>It has several nested partials,</p>
4
- <ul>
5
- <% 5.times do %>
6
- <li>
7
- <strong>Partial:</strong>
8
- <% @nesting = 5 %>
9
- <%= render :partial => 'erb/av_partial_2' %>
10
- <% end %>
11
- </ul>
12
- </div>
@@ -1,8 +0,0 @@
1
- <% @nesting -= 1 %>
2
- <div class="partial" level="<%= @nesting %>">
3
- <h3>This is a crazy deep-nested partial.</h3>
4
- <p>Nesting level <%= @nesting %></p>
5
- <% if @nesting > 0 %>
6
- <%= render :partial => 'erb/av_partial_2' %>
7
- <% end %>
8
- </div>
@@ -1,62 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en-US'>
3
- <head>
4
- <title>Hampton Catlin Is Totally Awesome</title>
5
- <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
6
- </head>
7
- <body>
8
- <h1>
9
- This is very much like the standard template,
10
- except that it has some ActionView-specific stuff.
11
- It's only used for benchmarking.
12
- </h1>
13
- <div class="crazy_partials">
14
- <%= render :partial => 'erb/av_partial_1' %>
15
- </div>
16
- <!-- You're In my house now! -->
17
- <div class='header'>
18
- Yes, ladies and gentileman. He is just that egotistical.
19
- Fantastic! This should be multi-line output
20
- The question is if this would translate! Ahah!
21
- <%= 1 + 9 + 8 + 2 %>
22
- <%# numbers should work and this should be ignored %>
23
- </div>
24
- <% 120.times do |number| -%>
25
- <%= number %>
26
- <% end -%>
27
- <div id='body'><%= " Quotes should be loved! Just like people!" %></div>
28
- Wow.
29
- <p>
30
- <%= "Holy cow " +
31
- "multiline " +
32
- "tags! " +
33
- "A pipe (|) even!" %>
34
- <%= [1, 2, 3].collect { |n| "PipesIgnored|" } %>
35
- <%= [1, 2, 3].collect { |n|
36
- n.to_s
37
- }.join("|") %>
38
- </p>
39
- <div class='silent'>
40
- <% foo = String.new
41
- foo << "this"
42
- foo << " shouldn't"
43
- foo << " evaluate" %>
44
- <%= foo + "but now it should!" %>
45
- <%# Woah crap a comment! %>
46
- </div>
47
- <ul class='really cool'>
48
- <% ('a'..'f').each do |a|%>
49
- <li><%= a %>
50
- <% end %>
51
- <div class='of_divs_with_underscore' id='combo'><%= @should_eval = "with this text" %></div>
52
- <%= [ 104, 101, 108, 108, 111 ].map do |byte|
53
- byte.chr
54
- end %>
55
- <div class='footer'>
56
- <strong class='shout'>
57
- <%= "This is a really long ruby quote. It should be loved and wrapped because its more than 50 characters. This value may change in the future and this test may look stupid.\n" +
58
- " So, I'm just making it *really* long. God, I hope this works" %>
59
- </strong>
60
- </div>
61
- </body>
62
- </html>
@@ -1,55 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en-US' lang='en-US'>
3
- <head>
4
- <title>Hampton Catlin Is Totally Awesome</title>
5
- <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
6
- </head>
7
- <body>
8
- <!-- You're In my house now! -->
9
- <div class='header'>
10
- Yes, ladies and gentileman. He is just that egotistical.
11
- Fantastic! This should be multi-line output
12
- The question is if this would translate! Ahah!
13
- <%= 1 + 9 + 8 + 2 %>
14
- <%# numbers should work and this should be ignored %>
15
- </div>
16
- <% 120.times do |number| -%>
17
- <%= number %>
18
- <% end -%>
19
- <div id='body'><%= " Quotes should be loved! Just like people!" %></div>
20
- Wow.
21
- <p code="<%= 1 + 2 %>">
22
- <%= "Holy cow " +
23
- "multiline " +
24
- "tags! " +
25
- "A pipe (|) even!" %>
26
- <%= [1, 2, 3].collect { |n| "PipesIgnored|" }.join %>
27
- <%= [1, 2, 3].collect { |n|
28
- n.to_s
29
- }.join("|") %>
30
- </p>
31
- <% bar = 17 %>
32
- <div class='silent' foo="<%= bar %>">
33
- <% foo = String.new
34
- foo << "this"
35
- foo << " shouldn't"
36
- foo << " evaluate" %>
37
- <%= foo + "but now it should!" %>
38
- <%# Woah crap a comment! %>
39
- </div>
40
- <ul class='really cool'>
41
- <% ('a'..'f').each do |a|%>
42
- <li><%= a %></li>
43
- <% end %>
44
- <div class='of_divs_with_underscore' id='combo'><%= @should_eval = "with this text" %></div>
45
- <%= "foo".each_line do |line|
46
- nil
47
- end %>
48
- <div class='footer'>
49
- <strong class='shout'>
50
- <%= "This is a really long ruby quote. It should be loved and wrapped because its more than 50 characters. This value may change in the future and this test may look stupid.\n" +
51
- " So, I'm just making it *really* long. God, I hope this works" %>
52
- </strong>
53
- </div>
54
- </body>
55
- </html>
@@ -1,11 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- if ENV['TRAVIS']
4
- platform :mri_21 do
5
- gem 'coveralls', require: false
6
- end
7
- end
8
-
9
- gem 'rails', '~> 4.0.0'
10
- gem 'nokogiri', RUBY_VERSION < '2.1' ? '~> 1.6.0' : '>= 1.7'
11
- gemspec :path => '../..'
@@ -1,87 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- haml (4.0.7)
5
- tilt
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- actionmailer (4.0.13)
11
- actionpack (= 4.0.13)
12
- mail (~> 2.5, >= 2.5.4)
13
- actionpack (4.0.13)
14
- activesupport (= 4.0.13)
15
- builder (~> 3.1.0)
16
- erubis (~> 2.7.0)
17
- rack (~> 1.5.2)
18
- rack-test (~> 0.6.2)
19
- activemodel (4.0.13)
20
- activesupport (= 4.0.13)
21
- builder (~> 3.1.0)
22
- activerecord (4.0.13)
23
- activemodel (= 4.0.13)
24
- activerecord-deprecated_finders (~> 1.0.2)
25
- activesupport (= 4.0.13)
26
- arel (~> 4.0.0)
27
- activerecord-deprecated_finders (1.0.4)
28
- activesupport (4.0.13)
29
- i18n (~> 0.6, >= 0.6.9)
30
- minitest (~> 4.2)
31
- multi_json (~> 1.3)
32
- thread_safe (~> 0.1)
33
- tzinfo (~> 0.3.37)
34
- arel (4.0.2)
35
- builder (3.1.4)
36
- concurrent-ruby (1.0.2)
37
- erubis (2.7.0)
38
- i18n (0.7.0)
39
- mail (2.6.4)
40
- mime-types (>= 1.16, < 4)
41
- mime-types (2.99.2)
42
- minitest (4.7.5)
43
- multi_json (1.12.1)
44
- nokogiri (1.5.11)
45
- rack (1.5.5)
46
- rack-test (0.6.3)
47
- rack (>= 1.0)
48
- rails (4.0.13)
49
- actionmailer (= 4.0.13)
50
- actionpack (= 4.0.13)
51
- activerecord (= 4.0.13)
52
- activesupport (= 4.0.13)
53
- bundler (>= 1.3.0, < 2.0)
54
- railties (= 4.0.13)
55
- sprockets-rails (~> 2.0)
56
- railties (4.0.13)
57
- actionpack (= 4.0.13)
58
- activesupport (= 4.0.13)
59
- rake (>= 0.8.7)
60
- thor (>= 0.18.1, < 2.0)
61
- rake (11.2.2)
62
- rbench (0.2.3)
63
- sprockets (3.7.0)
64
- concurrent-ruby (~> 1.0)
65
- rack (> 1, < 3)
66
- sprockets-rails (2.3.3)
67
- actionpack (>= 3.0)
68
- activesupport (>= 3.0)
69
- sprockets (>= 2.8, < 4.0)
70
- thor (0.19.1)
71
- thread_safe (0.3.5)
72
- tilt (2.0.5)
73
- tzinfo (0.3.51)
74
-
75
- PLATFORMS
76
- ruby
77
-
78
- DEPENDENCIES
79
- haml!
80
- mime-types (< 3)
81
- minitest
82
- nokogiri (~> 1.5.10)
83
- rails (~> 4.0.0)
84
- rbench
85
-
86
- BUNDLED WITH
87
- 1.12.5