haml 5.0.1 → 5.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f839cdb94174ba8781070c63c81802476e784313
4
- data.tar.gz: 95438da1cb7cd8137a2d5d6a838c126530165797
3
+ metadata.gz: 1516ce57a2223bbb3e48b98b360ee5afd000187c
4
+ data.tar.gz: 4684ec8a3d54757e1b42f3431e5972a99fc3ed3d
5
5
  SHA512:
6
- metadata.gz: 8bf0fb1e2b30d0c6b0fb02bc26ce4e994a3a806fcc2a3e46f8ef4b4ef850642b3e85cbfe5660b174bddd44d04e72facceefb2c2229eb57abc5ca32bd8305790d
7
- data.tar.gz: 23439f7250b7c914333b0702a9eade9c96a7bbf123e5df44c6099c826263bd69e3986ab5343f2c8cf7bc1a68644283a4a46685c8cbd750680ee4ec9b01b4ec62
6
+ metadata.gz: 815057d4871feeff8fdb368b55d640444fa730f06ef8a0344fcc8f9e23e8d17d444057d2a09531249a2a3905d848c4da4ba0be478a0429b9b1296e7bfe8fb0b4
7
+ data.tar.gz: d72bf87bad6fdf37a18291cb19dfccbb6a4d10aed7151be5c4461925bf4bddc45fe01dd8eab6c561a936c727e19c0d57017abe3628a2adb56ddcc5d7706e5e08
@@ -8,14 +8,15 @@ rvm:
8
8
  - 2.2.7
9
9
  - 2.1.10
10
10
  - 2.0.0
11
- - jruby-9.1.8.0
11
+ - jruby-9.1.12.0
12
12
  - rbx-3
13
13
  gemfile:
14
- - test/gemfiles/Gemfile.rails-4.0.x
15
- - test/gemfiles/Gemfile.rails-4.1.x
16
- - test/gemfiles/Gemfile.rails-4.2.x
17
- - test/gemfiles/Gemfile.rails-5.0.x
18
14
  - test/gemfiles/Gemfile.rails-5.1.x
15
+ - test/gemfiles/Gemfile.rails-5.0.x
16
+ - test/gemfiles/Gemfile.rails-4.2.x
17
+ - test/gemfiles/Gemfile.rails-4.1.x
18
+ - test/gemfiles/Gemfile.rails-4.0.x
19
+ - test/gemfiles/Gemfile.rails-edge
19
20
  matrix:
20
21
  exclude:
21
22
  - rvm: 2.0.0
@@ -34,5 +35,6 @@ matrix:
34
35
  gemfile: test/gemfiles/Gemfile.rails-4.2.x
35
36
  allow_failures:
36
37
  - rvm: rbx-3
38
+ - gemfile: test/gemfiles/Gemfile.rails-edge
37
39
  fast_finish: true
38
40
  script: "bundle exec rake submodules test"
@@ -1,5 +1,17 @@
1
1
  # Haml Changelog
2
2
 
3
+ ## 5.0.2
4
+
5
+ Released on August 1, 2017
6
+ ([diff](https://github.com/haml/haml/compare/v5.0.2...v5.0.1)).
7
+
8
+ * Let `haml -c` fail if generated Ruby code is syntax error. [#880](https://github.com/haml/haml/issues/880) (Takashi Kokubun)
9
+ * Fix `NoMethodError` bug caused with Sprockets 3 and :sass filter. [#930](https://github.com/haml/haml/pull/930) (thanks [Gonzalez Maximiliano](https://github.com/emaxi))
10
+ * Fix `list_of` helper with multi-line content. [#933](https://github.com/haml/haml/pull/933) (thanks [Benoit Larroque](https://github.com/zetaben))
11
+ * Optimize rendering performance by changing timing to fix textareas. [#941](https://github.com/haml/haml/pull/941) (Takashi Kokubun)
12
+ * Fix `TypeError` with empty :ruby filter. [#942](https://github.com/haml/haml/pull/942) (Takashi Kokubun)
13
+ * Fix inconsitent attribute sort order. (Takashi Kokubun)
14
+
3
15
  ## 5.0.1
4
16
 
5
17
  Released on May 3, 2017
@@ -19,7 +31,9 @@ Breaking Changes
19
31
  * Haml now requires Ruby 2.0.0 or above.
20
32
  * Rails 3 is no longer supported, matching the official
21
33
  [Maintenance Policy for Ruby on Rails](http://weblog.rubyonrails.org/2013/2/24/maintenance-policy-for-ruby-on-rails/).
34
+ Use Haml 4 if you want to use Rails 3.
22
35
  (Tee Parham)
36
+ * Remove `:ugly` option ([#894](https://github.com/haml/haml/pull/894))
23
37
  * The `haml` command's debug option (`-d`) no longer executes the Haml code, but
24
38
  rather checks the generated Ruby syntax for errors.
25
39
  * Drop parser/compiler accessor from `Haml::Engine`. Modify `Haml::Engine#initialize` options
data/Gemfile CHANGED
@@ -1,6 +1,7 @@
1
1
  source "https://rubygems.org"
2
2
  gemspec
3
3
 
4
+ gem "m"
4
5
  gem "pry"
5
6
 
6
7
  group :docs do
data/README.md CHANGED
@@ -42,12 +42,6 @@ To use Haml with Rails, simply add Haml to your Gemfile and run `bundle`.
42
42
  gem 'haml'
43
43
  ~~~
44
44
 
45
- Haml 5 will require Rails version 4.0 or later. If you are using Rails 3.x, you should use Haml version 4.0.x:
46
-
47
- ~~~ruby
48
- gem 'haml', '~> 4.0.5'
49
- ~~~
50
-
51
45
  If you'd like to replace Rails's Erb-based generators with Haml, add
52
46
  [haml-rails](https://github.com/indirect/haml-rails) to your Gemfile as well.
53
47
 
@@ -1120,8 +1120,8 @@ is compiled to
1120
1120
  <p>I <strong>really</strong> prefer <em>raspberry</em> jam.</p>
1121
1121
  </div>
1122
1122
 
1123
- Currently, filters ignore the {Haml::Options#escape_html `:escape_html`} option.
1124
- This means that `#{}` interpolation within filters is never HTML-escaped.
1123
+ Note that `#{}` interpolation within filters is HTML-escaped if you specify
1124
+ {Haml::Options#escape_html `:escape_html`} option.
1125
1125
 
1126
1126
  The functionality of some filters such as Markdown can be provided by many
1127
1127
  different libraries. Usually you don't have to worry about this - you can just
@@ -1144,9 +1144,9 @@ Surrounds the filtered text with CDATA tags.
1144
1144
 
1145
1145
  ### `:coffee` {#coffee-filter}
1146
1146
 
1147
- Compiles the filtered text to Javascript using Coffeescript. You can also
1148
- reference this filter as `:coffeescript`. This filter is implemented using
1149
- Tilt.
1147
+ Compiles the filtered text to JavaScript in `<script>` tag using CoffeeScript.
1148
+ You can also reference this filter as `:coffeescript`. This filter is
1149
+ implemented using Tilt.
1150
1150
 
1151
1151
  ### `:css` {#css-filter}
1152
1152
 
@@ -1174,7 +1174,7 @@ option} to control when CDATA tags are added.
1174
1174
 
1175
1175
  ### `:less` {#less-filter}
1176
1176
 
1177
- Parses the filtered text with [Less](http://lesscss.org/) to produce CSS output.
1177
+ Parses the filtered text with [Less](http://lesscss.org/) to produce CSS output in `<style>` tag.
1178
1178
  This filter is implemented using Tilt.
1179
1179
 
1180
1180
  ### `:markdown` {#markdown-filter}
@@ -1217,12 +1217,13 @@ template.
1217
1217
  ### `:sass` {#sass-filter}
1218
1218
 
1219
1219
  Parses the filtered text with [Sass](http://sass-lang.com/) to produce CSS
1220
- output. This filter is implemented using Tilt.
1220
+ output in `<style>` tag. This filter is implemented using Tilt.
1221
1221
 
1222
1222
  ### `:scss` {#scss-filter}
1223
1223
 
1224
1224
  Parses the filtered text with Sass like the `:sass` filter, but uses the newer
1225
- SCSS syntax to produce CSS output. This filter is implemented using Tilt.
1225
+ SCSS syntax to produce CSS output in `<style>` tag. This filter is implemented
1226
+ using Tilt.
1226
1227
 
1227
1228
  ### `:textile` {#textile-filter}
1228
1229
 
data/Rakefile CHANGED
@@ -4,13 +4,19 @@ require "bundler/gem_tasks"
4
4
 
5
5
  task :default => :test
6
6
 
7
- #FIXME: Redefining :test task to run each test in isolated process.
7
+ # FIXME: Redefining :test task to run test/options_test.rb in isolated process since it depends on whether Rails is loaded or not.
8
8
  # Remove this task when we finished changing escape_html option to be true by default.
9
- task :test do
10
- test_files = Dir.glob('test/**/*_test.rb').reject { |f| f.start_with?('test/gemfiles/vendor/bundle') }
11
- test_files.all? do |file|
12
- sh(Gem.ruby, '-w', '-I/lib', '-Itest', file)
13
- end || raise('Failures')
9
+ isolated_test = Rake::TestTask.new do |t|
10
+ t.libs << 'test'
11
+ t.test_files = %w[test/options_test.rb]
12
+ t.warning = true
13
+ t.verbose = true
14
+ end
15
+ Rake::TestTask.new do |t|
16
+ t.libs << 'test'
17
+ t.test_files = Dir['test/*_test.rb'] + Dir['test/haml-spec/*_test.rb'] - isolated_test.file_list
18
+ t.warning = true
19
+ t.verbose = true
14
20
  end
15
21
 
16
22
  CLEAN.replace %w(pkg doc coverage .yardoc test/haml vendor)
@@ -15,7 +15,6 @@ Gem::Specification.new do |spec|
15
15
  end
16
16
  spec.homepage = 'http://haml.info/'
17
17
  spec.has_rdoc = false
18
- spec.test_files = Dir["test/**/*_test.rb"]
19
18
  spec.license = "MIT"
20
19
 
21
20
  spec.required_ruby_version = '>= 2.0.0'
@@ -16,12 +16,6 @@ module Haml
16
16
  value
17
17
  end
18
18
  end
19
-
20
- # Key's substring before a hyphen. This is necessary because values with the same
21
- # base_key can conflict by Haml::AttributeBuidler#build_data_keys.
22
- def base_key
23
- key.split('-', 2).first
24
- end
25
19
  end
26
20
 
27
21
  # Returns a script to render attributes on runtime.
@@ -62,14 +56,28 @@ module Haml
62
56
  attribute_values = build_attribute_values(attributes, parsed_hashes)
63
57
  AttributeBuilder.verify_attribute_names!(attribute_values.map(&:key))
64
58
 
65
- values_by_base_key = attribute_values.group_by(&:base_key)
66
- [:multi, *values_by_base_key.keys.sort.map { |base_key|
67
- compile_attribute_values(values_by_base_key[base_key])
59
+ [:multi, *group_values_for_sort(attribute_values).map { |value_group|
60
+ compile_attribute_values(value_group)
68
61
  }]
69
62
  end
70
63
 
71
64
  private
72
65
 
66
+ # Build array of grouped values whose sort order may go back and forth, which is also sorted with key name.
67
+ # This method needs to group values with the same start because it can be changed in `Haml::AttributeBuidler#build_data_keys`.
68
+ # @param values [Array<Haml::AttributeCompiler::AttributeValue>]
69
+ # @return [Array<Array<Haml::AttributeCompiler::AttributeValue>>]
70
+ def group_values_for_sort(values)
71
+ sorted_values = values.sort_by(&:key)
72
+ [].tap do |value_groups|
73
+ until sorted_values.empty?
74
+ key = sorted_values.first.key
75
+ value_group, sorted_values = sorted_values.partition { |v| v.key.start_with?(key) }
76
+ value_groups << value_group
77
+ end
78
+ end
79
+ end
80
+
73
81
  # Returns array of AttributeValue instances from static attributes and dynamic_attributes. For each key,
74
82
  # the values' order in returned value is preserved in the same order as Haml::Buffer#attributes's merge order.
75
83
  #
@@ -89,9 +97,9 @@ module Haml
89
97
  end
90
98
  end
91
99
 
92
- # Compiles attribute values with the same base_key to Temple expression.
100
+ # Compiles attribute values with the similar key to Temple expression.
93
101
  #
94
- # @param values [Array<AttributeValue>] `base_key`'s results are the same. `key`'s result may differ.
102
+ # @param values [Array<AttributeValue>] whose `key`s are partially or fully the same from left.
95
103
  # @return [Array] Temple expression
96
104
  def compile_attribute_values(values)
97
105
  if values.map(&:key).uniq.size == 1
@@ -159,7 +159,7 @@ module Haml
159
159
  # @since Haml 4.0.1
160
160
  # @private
161
161
  def fix_textareas!(input)
162
- return input unless toplevel? && input.include?('<textarea'.freeze)
162
+ return input unless input.include?('<textarea'.freeze)
163
163
 
164
164
  pattern = /<(textarea)([^>]*)>(\n|&#x000A;)(.*?)<\/textarea>/im
165
165
  input.gsub!(pattern) do |s|
@@ -287,11 +287,11 @@ module Haml
287
287
  text = "(#{text}).strip"
288
288
  end
289
289
  if opts[:preserve_tag]
290
- text = "::Haml::Helpers.preserve(#{text})"
290
+ text = "_hamlout.fix_textareas!(::Haml::Helpers.preserve(#{text}))"
291
291
  elsif opts[:preserve_script]
292
- text = "::Haml::Helpers.find_and_preserve(#{text}, _hamlout.options[:preserve])"
292
+ text = "_hamlout.fix_textareas!(::Haml::Helpers.find_and_preserve(#{text}, _hamlout.options[:preserve]))"
293
293
  end
294
- "_hamlout.fix_textareas!(#{text});"
294
+ "#{text};"
295
295
  end
296
296
 
297
297
  def push_generated_script(text)
@@ -301,6 +301,11 @@ END
301
301
  engine = ::Haml::Engine.new(template, @options[:for_engine])
302
302
 
303
303
  if @options[:check_syntax]
304
+ error = validate_ruby(engine.precompiled)
305
+ if error
306
+ puts error.message.split("\n").first
307
+ exit 1
308
+ end
304
309
  puts "Syntax OK"
305
310
  return
306
311
  end
@@ -333,7 +338,7 @@ END
333
338
 
334
339
  def validate_ruby(code)
335
340
  begin
336
- eval("BEGIN {return nil}; #{code}")
341
+ eval("BEGIN {return nil}; #{code}", binding, @options[:filename])
337
342
  rescue ::SyntaxError # Not to be confused with Haml::SyntaxError
338
343
  $!
339
344
  end
@@ -282,7 +282,7 @@ RUBY
282
282
  def compile(compiler, text)
283
283
  return if compiler.options[:suppress_eval]
284
284
  compiler.instance_eval do
285
- push_silent <<-FIRST.tr("\n", ';') + text + <<-LAST.tr("\n", ';')
285
+ push_silent "#{<<-FIRST.tr("\n", ';')}#{text}#{<<-LAST.tr("\n", ';')}"
286
286
  begin
287
287
  haml_io = StringIO.new(_hamlout.buffer, 'a')
288
288
  FIRST
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ # frozen_string_literal: false
2
2
  module Haml
3
3
  # Ruby code generator, which is a limited version of Temple::Generator.
4
4
  # Limit methods since Haml doesn't need most of them.
@@ -206,7 +206,7 @@ MESSAGE
206
206
 
207
207
  if result.count("\n") > 1
208
208
  result.gsub!("\n", "\n ")
209
- result = "\n #{result.strip!}\n"
209
+ result = "\n #{result.strip}\n"
210
210
  else
211
211
  result.strip!
212
212
  end
@@ -58,11 +58,15 @@ module ActionView
58
58
  preserve = haml_buffer.options.fetch(:preserve, %w[textarea pre code]).include?(name.to_s)
59
59
 
60
60
  if block_given? && block_is_haml?(block) && preserve
61
- return content_tag_without_haml(name, *args) {preserve(&block)}
61
+ return content_tag_without_haml(name, *args) do
62
+ haml_buffer.fix_textareas!(Haml::Helpers.preserve(&block)).html_safe
63
+ end
62
64
  end
63
65
 
64
66
  content = content_tag_without_haml(name, *args, &block)
65
- content = Haml::Helpers.preserve(content) if preserve && content
67
+ if preserve && content
68
+ content = haml_buffer.fix_textareas!(Haml::Helpers.preserve(content)).html_safe
69
+ end
66
70
  content
67
71
  end
68
72
 
@@ -668,7 +668,7 @@ module Haml
668
668
  return attributes_hash, rest, last_line
669
669
  end
670
670
 
671
- # @return [Array<Hash,String,nil>] - [static_attributs (Hash), dynamic_attributes (nil or String starting with `{` and ending with `}`)]
671
+ # @return [Array<Hash,String,nil>] - [static_attributes (Hash), dynamic_attributes (nil or String starting with `{` and ending with `}`)]
672
672
  # @return [String] rest
673
673
  # @return [Integer] last_line
674
674
  def parse_new_attributes(text)
@@ -6,7 +6,7 @@ module Haml
6
6
  class SassRailsTemplate < ::Sass::Rails::SassTemplate
7
7
  if Gem::Version.new(Sprockets::VERSION) >= Gem::Version.new('3.0.0')
8
8
  def render(scope=Object.new, locals={}, &block)
9
- environment = ::Sprockets::Railtie.build_environment(Rails.application)
9
+ environment = ::Sprockets::Railtie.build_environment(::Rails.application)
10
10
  scope = environment.context_class.new(
11
11
  environment: environment,
12
12
  filename: "/",
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Haml
3
- VERSION = "5.0.1"
3
+ VERSION = "5.0.2"
4
4
  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.1
4
+ version: 5.0.2
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-05-03 00:00:00.000000000 Z
14
+ date: 2017-08-01 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: temple
@@ -157,15 +157,6 @@ files:
157
157
  - lib/haml/temple_line_counter.rb
158
158
  - lib/haml/util.rb
159
159
  - lib/haml/version.rb
160
- - test/attribute_parser_test.rb
161
- - test/engine_test.rb
162
- - test/filters_test.rb
163
- - test/helper_test.rb
164
- - test/options_test.rb
165
- - test/parser_test.rb
166
- - test/template_test.rb
167
- - test/temple_line_counter_test.rb
168
- - test/util_test.rb
169
160
  - yard/default/.gitignore
170
161
  - yard/default/fulldoc/html/css/common.sass
171
162
  - yard/default/layout/html/footer.erb
@@ -189,18 +180,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
180
  version: '0'
190
181
  requirements: []
191
182
  rubyforge_project:
192
- rubygems_version: 2.6.11
183
+ rubygems_version: 2.5.2
193
184
  signing_key:
194
185
  specification_version: 4
195
186
  summary: An elegant, structured (X)HTML/XML templating engine.
196
- test_files:
197
- - test/attribute_parser_test.rb
198
- - test/engine_test.rb
199
- - test/filters_test.rb
200
- - test/helper_test.rb
201
- - test/options_test.rb
202
- - test/parser_test.rb
203
- - test/template_test.rb
204
- - test/temple_line_counter_test.rb
205
- - test/util_test.rb
187
+ test_files: []
206
188
  has_rdoc: false
@@ -1,105 +0,0 @@
1
- require 'test_helper'
2
-
3
- class AttributeParserTeset < Haml::TestCase
4
- describe '.parse' do
5
- def assert_parse(expected, haml)
6
- actual = Haml::AttributeParser.parse(haml)
7
- if expected.nil?
8
- assert_nil actual
9
- else
10
- assert_equal expected, actual
11
- end
12
- end
13
-
14
- if Haml::AttributeParser.available?
15
- it { assert_parse(nil, '') }
16
- it { assert_parse({}, '{}') }
17
-
18
- describe 'invalid hash' do
19
- it { assert_parse(nil, '{hash}') }
20
- it { assert_parse(nil, '{hash, foo: bar}') }
21
- it { assert_parse(nil, '{ {hash} }') }
22
- it { assert_parse(nil, '{ { hash, foo: bar } }') }
23
- it { assert_parse(nil, '{}.merge({})') }
24
- end
25
-
26
- describe 'non single hash' do
27
- it { assert_parse(nil, '{ a: 0 };{}') }
28
- it { assert_parse(nil, '{ a: 0 }[nil] = {}') }
29
- end
30
-
31
- describe 'dynamic key' do
32
- it { assert_parse(nil, '{foo => bar}') }
33
- it { assert_parse(nil, '{[] => bar}') }
34
- it { assert_parse(nil, '{[1,2,3] => bar}') }
35
- end
36
-
37
- describe 'foo: bar' do
38
- it { assert_parse({ '_' => '1' }, '{_:1,}') }
39
- it { assert_parse({ 'foo' => 'bar' }, '{ foo: bar }') }
40
- it { assert_parse({ 'a' => 'b', 'c' => ':d' }, '{a: b, c: :d}') }
41
- it { assert_parse({ 'a' => '[]', 'c' => '"d"' }, '{a: [], c: "d"}') }
42
- end
43
-
44
- describe ':foo => bar' do
45
- it { assert_parse({ 'foo' => ':bar' }, '{ :foo => :bar }') }
46
- it { assert_parse({ '_' => '"foo"' }, '{:_=>"foo"}') }
47
- it { assert_parse({ 'a' => '[]', 'c' => '""', 'b' => '"#{3}"' }, '{:a => [], c: "", :b => "#{3}"}') }
48
- it { assert_parse(nil, '{:"f#{o}o" => bar}') }
49
- it { assert_parse(nil, '{:"#{f}oo" => bar}') }
50
- it { assert_parse(nil, '{:"#{foo}" => bar}') }
51
- end
52
-
53
- describe '"foo" => bar' do
54
- it { assert_parse({ 'foo' => '[1]' }, '{"foo"=>[1]}') }
55
- it { assert_parse({ 'foo' => 'nya' }, "{ 'foo' => nya }") }
56
- it { assert_parse({ 'foo' => 'bar' }, '{%q[foo] => bar }') }
57
- it { assert_parse({ 'foo' => '[1]' }, ' { "foo"=>[1] } ') }
58
- it { assert_parse({ 'foo' => 'nya' }, " { 'foo' => nya } ") }
59
- it { assert_parse({ 'foo' => 'bar' }, ' { %q[foo] => bar } ') }
60
- it { assert_parse(nil, '{"f#{o}o" => bar}') }
61
- it { assert_parse(nil, '{"#{f}oo" => bar}') }
62
- it { assert_parse(nil, '{"#{foo}" => bar}') }
63
- it { assert_parse({ 'f#{o}o' => 'bar' }, '{ %q[f#{o}o] => bar }') }
64
- it { assert_parse({ 'f#{o}o' => 'bar' }, '{ %q[f#{o}o] => bar, }') }
65
- it { assert_parse(nil, '%Q[f#{o}o] => bar ') }
66
- end
67
-
68
- describe 'string interpolation' do
69
- it { assert_parse({ 'foo' => %q["#{bar baz, '/abc/'}"] }, %q[{foo: "#{bar baz, '/abc/'}"}]) }
70
- end
71
-
72
- describe 'multi lines' do
73
- it { assert_parse({ 'a' => 'b', 'c' => 'd' }, "{a: b,\nc: d}") }
74
- end
75
-
76
- if RUBY_VERSION >= '2.2.0'
77
- describe '"foo": bar' do
78
- it { assert_parse({ 'foo' => '()' }, '{"foo":()}') }
79
- it { assert_parse({ 'foo' => 'nya' }, " {'foo': nya} ") }
80
- it { assert_parse({ 'foo' => '()' }, ' { "foo":() , }') }
81
- it { assert_parse({ 'foo' => 'nya' }, " { 'foo': nya , }") }
82
- it { assert_parse(nil, '{"f#{o}o": bar}') }
83
- it { assert_parse(nil, '{"#{f}oo": bar}') }
84
- it { assert_parse(nil, '{"#{foo}": bar}') }
85
- end
86
- end
87
-
88
- describe 'nested array' do
89
- it { assert_parse({ 'foo' => '[1,2,]' }, '{foo: [1,2,],}') }
90
- it { assert_parse({ 'foo' => '[1,2,[3,4],5]' }, '{foo: [1,2,[3,4],5],}') }
91
- it { assert_parse({ 'foo' => '[1,2,[3,4],5]', 'bar' => '[[1,2],]'}, '{foo: [1,2,[3,4],5],bar: [[1,2],],}') }
92
- end
93
-
94
- describe 'nested hash' do
95
- it { assert_parse({ 'foo' => '{ }', 'bar' => '{}' }, '{foo: { }, bar: {}}') }
96
- it { assert_parse({ 'foo' => '{ bar: baz, hoge: fuga, }' }, '{foo: { bar: baz, hoge: fuga, }, }') }
97
- it { assert_parse({ 'data' => '{ confirm: true, disable: false }', 'hello' => '{ world: foo, }' }, '{data: { confirm: true, disable: false }, :hello => { world: foo, },}') }
98
- end
99
-
100
- describe 'nested method' do
101
- it { assert_parse({ 'foo' => 'bar(a, b)', 'hoge' => 'piyo(a, b,)' }, '{ foo: bar(a, b), hoge: piyo(a, b,), }') }
102
- end
103
- end
104
- end
105
- end