hamlit 1.5.9 → 1.6.0

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/doc/README.md +15 -2
  4. data/doc/engine/indent.md +24 -0
  5. data/doc/engine/new_attribute.md +77 -0
  6. data/doc/engine/old_attributes.md +127 -0
  7. data/doc/engine/silent_script.md +97 -0
  8. data/doc/engine/tag.md +48 -0
  9. data/doc/engine/text.md +7 -1
  10. data/doc/faml/README.md +19 -0
  11. data/doc/faml/engine/indent.md +24 -0
  12. data/doc/faml/engine/old_attributes.md +108 -0
  13. data/doc/faml/engine/silent_script.md +97 -0
  14. data/doc/faml/engine/text.md +35 -0
  15. data/doc/faml/filters/coffee.md +125 -0
  16. data/doc/faml/filters/erb.md +24 -0
  17. data/doc/faml/filters/javascript.md +27 -0
  18. data/doc/faml/filters/less.md +57 -0
  19. data/doc/faml/filters/plain.md +25 -0
  20. data/doc/faml/filters/sass.md +62 -0
  21. data/doc/faml/filters/scss.md +68 -0
  22. data/doc/haml/README.md +15 -0
  23. data/doc/haml/engine/new_attribute.md +77 -0
  24. data/doc/haml/engine/old_attributes.md +142 -0
  25. data/doc/haml/engine/tag.md +48 -0
  26. data/doc/haml/engine/text.md +59 -0
  27. data/doc/haml/filters/erb.md +26 -0
  28. data/doc/haml/filters/javascript.md +76 -0
  29. data/doc/haml/filters/markdown.md +31 -0
  30. data/lib/hamlit/compilers/attributes.rb +1 -1
  31. data/lib/hamlit/compilers/new_attribute.rb +6 -6
  32. data/lib/hamlit/compilers/old_attribute.rb +2 -2
  33. data/lib/hamlit/compilers/text.rb +7 -10
  34. data/lib/hamlit/concerns/lexable.rb +32 -0
  35. data/lib/hamlit/parser.rb +9 -8
  36. data/lib/hamlit/parsers/attribute.rb +6 -3
  37. data/lib/hamlit/version.rb +1 -1
  38. data/spec/hamlit/engine/indent_spec.rb +1 -1
  39. data/spec/hamlit/engine/new_attribute_spec.rb +13 -2
  40. data/spec/hamlit/engine/old_attributes_spec.rb +5 -5
  41. data/spec/hamlit/engine/silent_script_spec.rb +4 -4
  42. data/spec/hamlit/engine/tag_spec.rb +23 -0
  43. data/spec/hamlit/engine/text_spec.rb +7 -3
  44. data/spec/spec_helper.rb +7 -231
  45. data/spec/spec_helper/document_generator.rb +93 -0
  46. data/spec/spec_helper/render_helper.rb +112 -0
  47. data/spec/spec_helper/test_case.rb +55 -0
  48. metadata +33 -3
  49. data/lib/hamlit/concerns/ripperable.rb +0 -20
@@ -0,0 +1,112 @@
1
+ require 'haml'
2
+ require 'faml'
3
+ require 'hamlit'
4
+ require 'unindent'
5
+
6
+ module RenderHelper
7
+ DEFAULT_OPTIONS = { ugly: true, escape_html: true }.freeze
8
+
9
+ def parse_string(str)
10
+ Hamlit::Parser.new.call(str)
11
+ end
12
+
13
+ def render_string(str, options = {})
14
+ eval Hamlit::Engine.new(options).call(str)
15
+ end
16
+
17
+ def assert_render(haml, html, options = {})
18
+ errs = array_wrap(options.delete(:error_with) || [])
19
+ impls = array_wrap(options.delete(:compatible_only) || [:haml, :faml] - errs)
20
+ fails = [:haml, :faml] - impls - errs
21
+
22
+ test = TestCase.new
23
+ test.src_haml = haml.unindent
24
+ test.hamlit_html = html.unindent
25
+
26
+ expect(render_string(test.src_haml, options)).to eq(test.hamlit_html)
27
+ impls.each { |i| expect_compatibility(i, test, options) }
28
+ errs.each { |i| expect_compatibility(i, test, options, type: :error) }
29
+ fails.each { |i| expect_compatibility(i, test, options, type: :failure) }
30
+
31
+ if DocumentGenerator.generate_docs? && (errs.any? || fails.any?)
32
+ write_caller!(test)
33
+ DocumentGenerator.register_test!(test)
34
+ end
35
+ end
36
+
37
+ def assert_parse(haml, &block)
38
+ haml = haml.unindent
39
+ ast = block.call
40
+
41
+ expect(parse_string(haml)).to eq(ast)
42
+ end
43
+
44
+ def assert_compile(before, after)
45
+ result = described_class.new.call(before)
46
+ expect(result).to eq(after)
47
+ end
48
+
49
+ private
50
+
51
+ def write_caller!(test)
52
+ example = RSpec.current_example
53
+ test.lineno = example.metadata[:line_number]
54
+ test.dir, test.file = example.file_path.gsub(%r{^.+spec/hamlit/}, '').split('/')
55
+ end
56
+
57
+ def expect_compatibility(impl, test, options, type: :success)
58
+ case impl
59
+ when :haml
60
+ expect_haml(impl, test, options, type)
61
+ when :faml
62
+ expect_faml(impl, test, options, type)
63
+ end
64
+ end
65
+
66
+ def expect_haml(impl, test, options, type)
67
+ expect_implementation(impl, test, options, type) do |test, options|
68
+ options = DEFAULT_OPTIONS.merge(options)
69
+ Haml::Engine.new(test.src_haml, options).render(Object.new, {})
70
+ end
71
+ end
72
+
73
+ def expect_faml(impl, test, options, type)
74
+ expect_implementation(impl, test, options, type) do |test, options|
75
+ options = options.dup
76
+ options.delete(:escape_html)
77
+ eval Faml::Engine.new(options).call(test.src_haml)
78
+ end
79
+ end
80
+
81
+ def expect_implementation(impl, test, options, type, &block)
82
+ if type == :error
83
+ expect { block.call(test, options) }.to raise_error
84
+ begin
85
+ block.call(test, options)
86
+ rescue Exception => e
87
+ err = "#{e.class}: #{e.message}"
88
+ test.send(:"#{impl}_html=", err)
89
+ end
90
+ return
91
+ end
92
+
93
+ result = block.call(test, options)
94
+ test.send(:"#{impl}_html=", result)
95
+
96
+ case type
97
+ when :success
98
+ expect(test.hamlit_html).to eq(result)
99
+ when :failure
100
+ expect(test.hamlit_html).to_not eq(result)
101
+ end
102
+ end
103
+
104
+ def array_wrap(arr)
105
+ return arr if arr.is_a?(Array)
106
+ [arr]
107
+ end
108
+
109
+ def tests
110
+ @tests ||= []
111
+ end
112
+ end
@@ -0,0 +1,55 @@
1
+ require 'unindent'
2
+
3
+ # This is used to generate a document automatically.
4
+ class TestCase < Struct.new(:file, :dir, :lineno, :src_haml, :haml_html, :faml_html, :hamlit_html)
5
+ def document(impl)
6
+ base_path = '/spec/hamlit'
7
+ path = File.join(base_path, dir, file)
8
+ doc = <<-DOC
9
+ # [#{escape_markdown("#{file}:#{lineno}")}](#{path}#L#{lineno})
10
+ ## Input
11
+ ```haml
12
+ #{src_haml}
13
+ ```
14
+
15
+ ## Output
16
+ DOC
17
+
18
+ html_by_name = {
19
+ 'Haml' => haml_html,
20
+ 'Faml' => faml_html,
21
+ 'Hamlit' => hamlit_html,
22
+ }
23
+
24
+ case impl
25
+ when 'haml'
26
+ html_by_name.delete('Faml')
27
+ when 'faml'
28
+ html_by_name.delete('Haml')
29
+ end
30
+
31
+ html_by_name.group_by(&:last).each do |html, pairs|
32
+ doc << "### #{pairs.map(&:first).join(', ')}\n"
33
+ doc << "```html\n"
34
+ doc << "#{html}\n"
35
+ doc << "```\n\n"
36
+ end
37
+
38
+ doc
39
+ end
40
+
41
+ def doc_path
42
+ File.join(dir, file.gsub(/_spec\.rb$/, '.md'))
43
+ end
44
+
45
+ def spec_path
46
+ path = File.join(dir, file)
47
+ escape_markdown(path)
48
+ end
49
+
50
+ private
51
+
52
+ def escape_markdown(text)
53
+ text.gsub(/_/, '\\_')
54
+ end
55
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamlit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.9
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-08 00:00:00.000000000 Z
11
+ date: 2015-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: escape_utils
@@ -299,8 +299,24 @@ files:
299
299
  - benchmarks/view.slim
300
300
  - bin/hamlit
301
301
  - doc/README.md
302
+ - doc/engine/indent.md
303
+ - doc/engine/new_attribute.md
302
304
  - doc/engine/old_attributes.md
305
+ - doc/engine/silent_script.md
306
+ - doc/engine/tag.md
303
307
  - doc/engine/text.md
308
+ - doc/faml/README.md
309
+ - doc/faml/engine/indent.md
310
+ - doc/faml/engine/old_attributes.md
311
+ - doc/faml/engine/silent_script.md
312
+ - doc/faml/engine/text.md
313
+ - doc/faml/filters/coffee.md
314
+ - doc/faml/filters/erb.md
315
+ - doc/faml/filters/javascript.md
316
+ - doc/faml/filters/less.md
317
+ - doc/faml/filters/plain.md
318
+ - doc/faml/filters/sass.md
319
+ - doc/faml/filters/scss.md
304
320
  - doc/filters/coffee.md
305
321
  - doc/filters/erb.md
306
322
  - doc/filters/javascript.md
@@ -309,6 +325,14 @@ files:
309
325
  - doc/filters/plain.md
310
326
  - doc/filters/sass.md
311
327
  - doc/filters/scss.md
328
+ - doc/haml/README.md
329
+ - doc/haml/engine/new_attribute.md
330
+ - doc/haml/engine/old_attributes.md
331
+ - doc/haml/engine/tag.md
332
+ - doc/haml/engine/text.md
333
+ - doc/haml/filters/erb.md
334
+ - doc/haml/filters/javascript.md
335
+ - doc/haml/filters/markdown.md
312
336
  - hamlit.gemspec
313
337
  - lib/hamlit.rb
314
338
  - lib/hamlit/attribute.rb
@@ -331,9 +355,9 @@ files:
331
355
  - lib/hamlit/concerns/escapable.rb
332
356
  - lib/hamlit/concerns/included.rb
333
357
  - lib/hamlit/concerns/indentable.rb
358
+ - lib/hamlit/concerns/lexable.rb
334
359
  - lib/hamlit/concerns/line_reader.rb
335
360
  - lib/hamlit/concerns/registerable.rb
336
- - lib/hamlit/concerns/ripperable.rb
337
361
  - lib/hamlit/concerns/string_interpolation.rb
338
362
  - lib/hamlit/concerns/whitespace.rb
339
363
  - lib/hamlit/engine.rb
@@ -457,6 +481,9 @@ files:
457
481
  - spec/rails/vendor/assets/javascripts/.keep
458
482
  - spec/rails/vendor/assets/stylesheets/.keep
459
483
  - spec/spec_helper.rb
484
+ - spec/spec_helper/document_generator.rb
485
+ - spec/spec_helper/render_helper.rb
486
+ - spec/spec_helper/test_case.rb
460
487
  - test
461
488
  homepage: https://github.com/k0kubun/hamlit
462
489
  licenses:
@@ -573,3 +600,6 @@ test_files:
573
600
  - spec/rails/vendor/assets/javascripts/.keep
574
601
  - spec/rails/vendor/assets/stylesheets/.keep
575
602
  - spec/spec_helper.rb
603
+ - spec/spec_helper/document_generator.rb
604
+ - spec/spec_helper/render_helper.rb
605
+ - spec/spec_helper/test_case.rb
@@ -1,20 +0,0 @@
1
- require 'ripper'
2
-
3
- module Hamlit
4
- module Concerns
5
- module Ripperable
6
- TYPE_POSITION = 1
7
-
8
- def skip_tokens!(tokens, *types)
9
- while types.include?(type_of(tokens.first))
10
- tokens.shift
11
- end
12
- end
13
-
14
- def type_of(token)
15
- return nil unless token
16
- token[TYPE_POSITION]
17
- end
18
- end
19
- end
20
- end