mvz-ruby-handlebars 0.0.11 → 0.0.13

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
  SHA256:
3
- metadata.gz: 8e028cfa3a1917825d23736af3ede7aa5cc5c73ab48e2b7b615053007f7fc706
4
- data.tar.gz: 041f11d9b9d907960742c200aa2c659719517087842febc9a63a0664c5fc2a84
3
+ metadata.gz: 0fb29d1fe9fe4a053ef3772b90983af24a9b1e29c922e1222c87d2bdc39382de
4
+ data.tar.gz: 1c982006f0ffe74ded0271f864de390d5b54414428ac80820fedee8a22143832
5
5
  SHA512:
6
- metadata.gz: 02dd28bba4ee51f0d3f676777b9a596e2c9ea360ca3062ed301cacba5af69c74772b5780a106b5d2d5fa59362ac07b4ae6326ab20646e4a0f544faff31762210
7
- data.tar.gz: aba3272df76c517819971f04d9ad5259d9d5b7459059840310672d8ed660ef5849a6ac3bed844974c6a41760d740d5a628c9bad5f499455da87ecdd0131f3469
6
+ metadata.gz: 6ca8bfb3a42446ac17a1711e57b6baae38b34180268289c59a4bb9069476b28f4c591b495ec3f8d5f7e7b69818f38dd80372a88a49749f08494f01830713928d
7
+ data.tar.gz: fe16a78829fdb5bf0e76939e794c73d0d14c4aa0872fbfb87be277611429b66aacd66544ace3ac7d7d596d256bc8190c9d9b4a13c8195291664e4b8cb667d3a3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ This is the changelog for mvz-ruby-handlebars
4
+
5
+ ## 0.0.13 (2024-10-26)
6
+
7
+ * Support Ruby 3.2 through 3.4, dropping support for Ruby 3.0 and 3.1
8
+ ([#40] and [#43] by [mvz])
9
+ * Remove large dynamic object constants `Handlebars::Handlebars::PARSER` and
10
+ `Handlebars::Handlebars::TRANSFORM` ([#42] by [mvz])
11
+
12
+ [#40]: https://github.com/mvz/ruby-handlebars/pull/40
13
+ [#42]: https://github.com/mvz/ruby-handlebars/pull/42
14
+ [#43]: https://github.com/mvz/ruby-handlebars/pull/43
15
+
16
+ ## 0.0.12 (2024-05-18)
17
+
18
+ * Support Ruby 3.0 through 3.3, dropping support for 2.6 and 2.7
19
+ ([#25] and [#30] by [mvz])
20
+ * Pull in upstream master. See below for the included changes ([#32] by [mvz])
21
+ * Handle single open-close curly pair ([#34] by [mvz])
22
+ * Speed up template content detection ([#35] by [mvz])
23
+ * Speed up opening and closing curly recognition ([#36] by [mvz])
24
+
25
+ [mvz]: https://github.com/mvz
26
+ [#25]: https://github.com/mvz/ruby-handlebars/pull/25
27
+ [#30]: https://github.com/mvz/ruby-handlebars/pull/30
28
+ [#32]: https://github.com/mvz/ruby-handlebars/pull/32
29
+ [#34]: https://github.com/mvz/ruby-handlebars/pull/34
30
+ [#35]: https://github.com/mvz/ruby-handlebars/pull/35
31
+ [#36]: https://github.com/mvz/ruby-handlebars/pull/36
32
+
33
+ ### [ruby-handlebars 0.4.1] (2022/06/01)
34
+
35
+ - bump dependencies
36
+ - move CI to GitHub actions
37
+
38
+ The remaining changes from this release were already included in mvz-ruby-handlebars 0.0.10
39
+
3
40
  ## 0.0.11 (2022-01-21)
4
41
 
5
42
  * Drop support for Ruby 2.4 and 2.5
@@ -7,24 +44,78 @@
7
44
 
8
45
  ## 0.0.10 (2021-08-31)
9
46
 
10
- * Pull in upstream master. See
11
- https://github.com/SmartBear/ruby-handlebars/blob/2a8ce9ef584f2c34cd5714a4ed36711c2dd9d58a/CHANGELOG.md
12
- for included changes
47
+ * Pull in upstream master. See below for included changes
13
48
  * Make helpers with only optional arguments work in replacement form
14
49
 
50
+ ### from ruby-handlebars, released in [ruby-handlebars 0.4.1]
51
+
52
+ - use separate context for each template evaluation ([#33](https://github.com/SmartBear/ruby-handlebars/pull/33) [@mvz])
53
+ - added `with`helper ([#28](https://github.com/SmartBear/ruby-handlebars/pull/28) [@creature])
54
+ - Faster parsing ([#26](https://github.com/SmartBear/ruby-handlebars/pull/26) - [@mvz])
55
+
56
+ [ruby-handlebars 0.4.1]: https://github.com/smartbear/ruby-handlebars/compare/v0.4.0...v0.4.1
57
+
15
58
  ## 0.0.9 (2021-01-04)
16
59
 
17
- * Pull in upstream master. See
18
- https://github.com/SmartBear/ruby-handlebars/blob/44dc6800dd5006865fc2dc1c26a9d4e5c1411bce/CHANGELOG.md
19
- for included changes
60
+ * Pull in upstream master. See below for included changes
20
61
  * Prefer variable over helper when processing a replacement if the helper has
21
62
  the wrong arity
22
63
 
23
- ## 0.0.8
64
+ ### [ruby-handlebars 0.4.0] (2019/10/22)
65
+
66
+ - Allow slash character in partial names ([#18](https://github.com/SmartBear/ruby-handlebars/pull/18) - [@d316])
67
+ - Add parameters for partials ([#19](https://github.com/SmartBear/ruby-handlebars/pull/19) [#20](https://github.com/SmartBear/ruby-handlebars/pull/20) - [@d316])
68
+
69
+ ### [ruby-handlebars 0.3.0] (2019/10/11)
70
+
71
+ - Support helpers with "as" notation (`{{each items as |item|}}`)
72
+
73
+ ### [ruby-handlebars 0.2.1] (2019/8/30)
74
+
75
+ - allow "else" word as being part of a path (eg: {{ my.something.else }} is okay)
76
+
77
+ ### [ruby-handlebars 0.2.0] (2019/8/30)
78
+
79
+ - allow dash in identifiers ([#15](https://github.com/SmartBear/ruby-handlebars/pull/15) - [@stewartmckee])
80
+ - add "unless" helper
81
+ - add "helperMissing" helper, called when a helper is missing
82
+ - "else" keyword is now handled by the parser directly
83
+
84
+ ### [ruby-handlebars 0.1.1] (2019/6/26)
85
+
86
+ - with_temporary_context returns the result produced by the block
87
+
88
+ ### [ruby-handlebars 0.1.0] (2019/6/26)
89
+
90
+ - add 'with_temporary_context' in context to define temporary variables
91
+ - enable @index, @first and @last variables in "each" helper ([#10](https://github.com/SmartBear/ruby-handlebars/pull/10) - [@schuetzm])
92
+ - allow specifying escaper when using double curly braces
93
+ - allow using helper calls as arguments ([#11](https://github.com/SmartBear/ruby-handlebars/pull/11) - [@schuetzm])
94
+ - escape trice-braces replacements ([#9](https://github.com/SmartBear/ruby-handlebars/pull/9) - [@schuetzm])
95
+ - allow non-hash data ([#8](https://github.com/SmartBear/ruby-handlebars/pull/8) - [@mvz])
96
+ - allow single curly braces in content ([#7](https://github.com/SmartBear/ruby-handlebars/pull/7) - [@mvz])
97
+ - allow empty literal string arguments ([pr6]https://github.com/SmartBear/ruby-handlebars/pull/6) - [@mvz])
98
+
99
+ <!-- Contributors lists -->
100
+ [@stewartmckee]: https://github.com/stewartmckee
101
+ [@schuetzm]: https://github.com/schuetzm
102
+ [@mvz]: https://github.com/mvz
103
+ [@d316]: https://github.com/d316
104
+ [@creature]: https://github.com/creature
105
+
106
+ <!-- Releases diffs -->
107
+ [ruby-handlebars 0.4.0]: https://github.com/smartbear/ruby-handlebars/compare/v0.3.0...v0.4.0
108
+ [ruby-handlebars 0.3.0]: https://github.com/smartbear/ruby-handlebars/compare/v0.2.1...v0.3.0
109
+ [ruby-handlebars 0.2.1]: https://github.com/smartbear/ruby-handlebars/compare/v0.2.0...v0.2.1
110
+ [ruby-handlebars 0.2.0]: https://github.com/smartbear/ruby-handlebars/compare/v0.1.1...v0.2.0
111
+ [ruby-handlebars 0.1.1]: https://github.com/smartbear/ruby-handlebars/compare/v0.1.0...v0.1.1
112
+ [ruby-handlebars 0.1.0]: https://github.com/smartbear/ruby-handlebars/compare/v0.0.6...v0.1.0
113
+
114
+ ## 0.0.8 (2020-11-27)
24
115
 
25
116
  * Update dependencies
26
117
 
27
- ## 0.0.7
118
+ ## 0.0.7 (2019-05-13)
28
119
 
29
120
  * Set up forked gem mvz-ruby-handlebars
30
121
  * Several improvements
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ruby-handlebars
2
2
  ===============
3
3
 
4
- [![Build Status](https://travis-ci.org/mvz/ruby-handlebars.svg?branch=master)](https://travis-ci.org/mvz/ruby-handlebars)
4
+ [![Build status](https://github.com/mvz/ruby-handlebars/actions/workflows/ruby.yml/badge.svg)](https://github.com/mvz/ruby-handlebars/actions/workflows/ruby.yml)
5
5
 
6
6
  Pure Ruby library for [Handlebars](http://handlebarsjs.com/) template system.
7
7
  This should become an alternative for using the Handlebars javascript library via
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rake/clean'
4
- require 'bundler/gem_tasks'
5
- require 'rspec/core/rake_task'
3
+ require "rake/clean"
4
+ require "bundler/gem_tasks"
5
+ require "rspec/core/rake_task"
6
6
 
7
- RSpec::Core::RakeTask.new('spec')
7
+ RSpec::Core::RakeTask.new("spec")
8
8
 
9
9
  task default: :spec
@@ -6,7 +6,7 @@ module Handlebars
6
6
  end
7
7
 
8
8
  def get(path)
9
- items = path.split('.'.freeze)
9
+ items = path.split(".".freeze)
10
10
  if locals.key? items.first.to_sym
11
11
  current = locals
12
12
  else
@@ -1,4 +1,4 @@
1
- require 'cgi'
1
+ require "cgi"
2
2
 
3
3
  module Handlebars
4
4
  module Escapers
@@ -1,4 +1,4 @@
1
- require_relative 'tree'
1
+ require_relative "tree"
2
2
 
3
3
  module Handlebars
4
4
  class Helper
@@ -1,10 +1,10 @@
1
- require_relative 'default_helper'
1
+ require_relative "default_helper"
2
2
 
3
3
  module Handlebars
4
4
  module Helpers
5
5
  class EachHelper < DefaultHelper
6
6
  def self.registry_name
7
- 'each'
7
+ "each"
8
8
  end
9
9
 
10
10
  def self.apply(context, items, block, else_block)
@@ -21,7 +21,7 @@ module Handlebars
21
21
  result = items.each_with_index.map do |item, index|
22
22
  context.add_items(name => item, :@index => index, :@first => (index == 0), :@last => (index == items.length - 1))
23
23
  block.fn(context)
24
- end.join('')
24
+ end.join("")
25
25
  end
26
26
  end
27
27
  result
@@ -1,4 +1,4 @@
1
- require_relative 'default_helper'
1
+ require_relative "default_helper"
2
2
 
3
3
  module Handlebars
4
4
  class UnknownHelper < StandardError
@@ -7,7 +7,7 @@ module Handlebars
7
7
  module Helpers
8
8
  class HelperMissingHelper < DefaultHelper
9
9
  def self.registry_name
10
- 'helperMissing'
10
+ "helperMissing"
11
11
  end
12
12
 
13
13
  def self.apply(context, name, block, else_block)
@@ -1,10 +1,10 @@
1
- require_relative 'default_helper'
1
+ require_relative "default_helper"
2
2
 
3
3
  module Handlebars
4
4
  module Helpers
5
5
  class IfHelper < DefaultHelper
6
6
  def self.registry_name
7
- 'if'
7
+ "if"
8
8
  end
9
9
 
10
10
  def self.apply(context, condition, block, else_block)
@@ -1,8 +1,8 @@
1
- require_relative 'each_helper'
2
- require_relative 'helper_missing_helper'
3
- require_relative 'if_helper'
4
- require_relative 'unless_helper'
5
- require_relative 'with_helper'
1
+ require_relative "each_helper"
2
+ require_relative "helper_missing_helper"
3
+ require_relative "if_helper"
4
+ require_relative "unless_helper"
5
+ require_relative "with_helper"
6
6
 
7
7
  module Handlebars
8
8
  module Helpers
@@ -1,10 +1,10 @@
1
- require_relative 'default_helper'
1
+ require_relative "default_helper"
2
2
 
3
3
  module Handlebars
4
4
  module Helpers
5
5
  class UnlessHelper < DefaultHelper
6
6
  def self.registry_name
7
- 'unless'
7
+ "unless"
8
8
  end
9
9
 
10
10
  def self.apply(context, condition, block, else_block)
@@ -1,10 +1,10 @@
1
- require_relative 'default_helper'
1
+ require_relative "default_helper"
2
2
 
3
3
  module Handlebars
4
4
  module Helpers
5
5
  class WithHelper < DefaultHelper
6
6
  def self.registry_name
7
- 'with'
7
+ "with"
8
8
  end
9
9
 
10
10
  def self.apply(context, data, block, else_block)
@@ -1,39 +1,37 @@
1
- require 'parslet'
1
+ require "parslet"
2
2
 
3
3
  module Handlebars
4
4
  class Parser < Parslet::Parser
5
5
  rule(:space) { match('\s').repeat(1) }
6
6
  rule(:space?) { space.maybe }
7
- rule(:dot) { str('.') }
8
- rule(:gt) { str('>')}
9
- rule(:hash) { str('#')}
10
- rule(:slash) { str('/')}
11
- rule(:ocurly) { str('{')}
12
- rule(:ccurly) { str('}')}
13
- rule(:pipe) { str('|')}
14
- rule(:eq) { str('=')}
7
+ rule(:dot) { str(".") }
8
+ rule(:gt) { str(">")}
9
+ rule(:hash) { str("#")}
10
+ rule(:slash) { str("/")}
11
+ rule(:ocurly) { str("{")}
12
+ rule(:ccurly) { str("}")}
13
+ rule(:pipe) { str("|")}
14
+ rule(:eq) { str("=")}
15
15
 
16
16
 
17
- rule(:docurly) { ocurly >> ocurly }
18
- rule(:dccurly) { ccurly >> ccurly }
19
- rule(:tocurly) { ocurly >> ocurly >> ocurly }
20
- rule(:tccurly) { ccurly >> ccurly >> ccurly }
17
+ rule(:docurly) { str("{{") }
18
+ rule(:dccurly) { str("}}") }
19
+ rule(:tocurly) { str("{{{") }
20
+ rule(:tccurly) { str("}}}") }
21
21
 
22
- rule(:else_kw) { str('else') }
23
- rule(:as_kw) { str('as') }
22
+ rule(:else_kw) { str("else") }
23
+ rule(:as_kw) { str("as") }
24
24
 
25
25
  rule(:identifier) { (else_kw >> space? >> dccurly).absent? >> match['@\-a-zA-Z0-9_\?'].repeat(1) }
26
26
  rule(:directory) { (else_kw >> space? >> dccurly).absent? >> match['@\-a-zA-Z0-9_\/\?'].repeat(1) }
27
27
  rule(:path) { identifier >> (dot >> (identifier | else_kw)).repeat }
28
28
 
29
- rule(:nocurly) { match('[^{}]') }
29
+ rule(:noocurly) { match("[^{]") }
30
30
  rule(:eof) { any.absent? }
31
31
  rule(:template_content) {
32
32
  (
33
- nocurly.repeat(1) | # A sequence of non-curlies
34
- ocurly >> nocurly | # Opening curly that doesn't start a {{}}
35
- ccurly | # Closing curly that is not inside a {{}}
36
- ocurly >> eof # Opening curly that doesn't start a {{}} because it's the end
33
+ noocurly.repeat(1) | # A sequence of non-opening-curlies
34
+ ocurly >> (noocurly | eof) # Opening curly that doesn't start a {{}}
37
35
  ).repeat(1).as(:template_content) }
38
36
 
39
37
  rule(:unsafe_replacement) { docurly >> space? >> path.as(:replaced_unsafe_item) >> space? >> dccurly }
@@ -47,7 +45,7 @@ module Handlebars
47
45
  (as_kw >> space? >> pipe).absent? >>
48
46
  (
49
47
  (path | string).as(:parameter_name) |
50
- (str('(') >> space? >> identifier.as(:safe_helper_name) >> (space? >> parameters.as(:parameters)).maybe >> space? >> str(')'))
48
+ (str("(") >> space? >> identifier.as(:safe_helper_name) >> (space? >> parameters.as(:parameters)).maybe >> space? >> str(")"))
51
49
  )
52
50
  }
53
51
  rule(:parameters) { parameter >> (space >> parameter).repeat }
@@ -1,4 +1,4 @@
1
- require_relative 'context'
1
+ require_relative "context"
2
2
 
3
3
  module Handlebars
4
4
  class Template
@@ -0,0 +1,88 @@
1
+ require "parslet"
2
+ require_relative "tree"
3
+
4
+ module Handlebars
5
+ class Transform < Parslet::Transform
6
+ rule(template_content: simple(:content)) { Tree::TemplateContent.new(content) }
7
+ rule(replaced_unsafe_item: simple(:item)) { Tree::EscapedReplacement.new(item) }
8
+ rule(replaced_safe_item: simple(:item)) { Tree::Replacement.new(item) }
9
+ rule(str_content: simple(:content)) { Tree::String.new(content) }
10
+ rule(parameter_name: simple(:name)) { Tree::Parameter.new(name) }
11
+
12
+ rule(
13
+ unsafe_helper_name: simple(:name),
14
+ parameters: subtree(:parameters)
15
+ ) do
16
+ Tree::EscapedHelper.new(name, parameters)
17
+ end
18
+
19
+ rule(
20
+ safe_helper_name: simple(:name),
21
+ parameters: subtree(:parameters)
22
+ ) do
23
+ Tree::Helper.new(name, parameters)
24
+ end
25
+
26
+ rule(
27
+ helper_name: simple(:name),
28
+ block_items: subtree(:block_items)
29
+ ) do
30
+ Tree::Helper.new(name, [], block_items)
31
+ end
32
+
33
+ rule(
34
+ helper_name: simple(:name),
35
+ block_items: subtree(:block_items),
36
+ else_block_items: subtree(:else_block_items)
37
+ ) do
38
+ Tree::Helper.new(name, [], block_items, else_block_items)
39
+ end
40
+
41
+ rule(
42
+ helper_name: simple(:name),
43
+ parameters: subtree(:parameters),
44
+ block_items: subtree(:block_items)
45
+ ) do
46
+ Tree::Helper.new(name, parameters, block_items)
47
+ end
48
+
49
+ rule(
50
+ helper_name: simple(:name),
51
+ parameters: subtree(:parameters),
52
+ block_items: subtree(:block_items),
53
+ else_block_items: subtree(:else_block_items)
54
+ ) do
55
+ Tree::Helper.new(name, parameters, block_items, else_block_items)
56
+ end
57
+
58
+ rule(
59
+ helper_name: simple(:name),
60
+ parameters: subtree(:parameters),
61
+ as_parameters: subtree(:as_parameters),
62
+ block_items: subtree(:block_items)
63
+ ) do
64
+ Tree::AsHelper.new(name, parameters, as_parameters, block_items)
65
+ end
66
+
67
+ rule(
68
+ helper_name: simple(:name),
69
+ parameters: subtree(:parameters),
70
+ as_parameters: subtree(:as_parameters),
71
+ block_items: subtree(:block_items),
72
+ else_block_items: subtree(:else_block_items)
73
+ ) do
74
+ Tree::AsHelper.new(name, parameters, as_parameters, block_items, else_block_items)
75
+ end
76
+
77
+ rule(
78
+ partial_name: simple(:partial_name),
79
+ arguments: subtree(:arguments)
80
+ ) do
81
+ Tree::PartialWithArgs.new(partial_name, arguments)
82
+ end
83
+
84
+ rule(partial_name: simple(:partial_name)) { Tree::Partial.new(partial_name) }
85
+ rule(block_items: subtree(:block_items)) { Tree::Block.new(block_items) }
86
+ rule(else_block_items: subtree(:else_block_items)) { Tree::Block.new(block_items) }
87
+ end
88
+ end
@@ -1,4 +1,4 @@
1
- require 'parslet'
1
+ require "parslet"
2
2
 
3
3
  module Handlebars
4
4
  module Tree
@@ -17,17 +17,23 @@ module Handlebars
17
17
  class Replacement < TreeItem.new(:item)
18
18
  def _eval(context)
19
19
  helper = context.get_helper(item.to_s)
20
- if helper && (helper.arity == 1 || helper.arity == -2)
20
+ if call_with_one_argument_possible?(helper)
21
21
  helper.apply(context)
22
22
  else
23
23
  context.get(item.to_s)
24
24
  end
25
25
  end
26
+
27
+ private
28
+
29
+ def call_with_one_argument_possible?(helper)
30
+ [1, -2].include? helper&.arity
31
+ end
26
32
  end
27
33
 
28
34
  class EscapedReplacement < Replacement
29
35
  def _eval(context)
30
- context.escaper.escape(super(context).to_s)
36
+ context.escaper.escape(super.to_s)
31
37
  end
32
38
  end
33
39
 
@@ -51,7 +57,7 @@ module Handlebars
51
57
  def _eval(context)
52
58
  helper = context.get_helper(name.to_s)
53
59
  if helper.nil?
54
- context.get_helper('helperMissing').apply(context, String.new(name.to_s))
60
+ context.get_helper("helperMissing").apply(context, String.new(name.to_s))
55
61
  else
56
62
  helper.apply(context, parameters, block, else_block)
57
63
  end
@@ -62,7 +68,7 @@ module Handlebars
62
68
  def _eval(context)
63
69
  helper = context.get_as_helper(name.to_s)
64
70
  if helper.nil?
65
- context.get_helper('helperMissing').apply(context, String.new(name.to_s))
71
+ context.get_helper("helperMissing").apply(context, String.new(name.to_s))
66
72
  else
67
73
  helper.apply_as(context, parameters, as_parameters, block, else_block)
68
74
  end
@@ -71,7 +77,7 @@ module Handlebars
71
77
 
72
78
  class EscapedHelper < Helper
73
79
  def _eval(context)
74
- context.escaper.escape(super(context).to_s)
80
+ context.escaper.escape(super.to_s)
75
81
  end
76
82
  end
77
83
 
@@ -102,88 +108,4 @@ module Handlebars
102
108
 
103
109
  end
104
110
  end
105
-
106
- class Transform < Parslet::Transform
107
- rule(template_content: simple(:content)) {Tree::TemplateContent.new(content)}
108
- rule(replaced_unsafe_item: simple(:item)) {Tree::EscapedReplacement.new(item)}
109
- rule(replaced_safe_item: simple(:item)) {Tree::Replacement.new(item)}
110
- rule(str_content: simple(:content)) {Tree::String.new(content)}
111
- rule(parameter_name: simple(:name)) {Tree::Parameter.new(name)}
112
-
113
- rule(
114
- unsafe_helper_name: simple(:name),
115
- parameters: subtree(:parameters)
116
- ) {
117
- Tree::EscapedHelper.new(name, parameters)
118
- }
119
-
120
- rule(
121
- safe_helper_name: simple(:name),
122
- parameters: subtree(:parameters)
123
- ) {
124
- Tree::Helper.new(name, parameters)
125
- }
126
-
127
- rule(
128
- helper_name: simple(:name),
129
- block_items: subtree(:block_items),
130
- ) {
131
- Tree::Helper.new(name, [], block_items)
132
- }
133
-
134
- rule(
135
- helper_name: simple(:name),
136
- block_items: subtree(:block_items),
137
- else_block_items: subtree(:else_block_items)
138
- ) {
139
- Tree::Helper.new(name, [], block_items, else_block_items)
140
- }
141
-
142
- rule(
143
- helper_name: simple(:name),
144
- parameters: subtree(:parameters),
145
- block_items: subtree(:block_items),
146
- ) {
147
- Tree::Helper.new(name, parameters, block_items)
148
- }
149
-
150
- rule(
151
- helper_name: simple(:name),
152
- parameters: subtree(:parameters),
153
- block_items: subtree(:block_items),
154
- else_block_items: subtree(:else_block_items)
155
- ) {
156
- Tree::Helper.new(name, parameters, block_items, else_block_items)
157
- }
158
-
159
- rule(
160
- helper_name: simple(:name),
161
- parameters: subtree(:parameters),
162
- as_parameters: subtree(:as_parameters),
163
- block_items: subtree(:block_items),
164
- ) {
165
- Tree::AsHelper.new(name, parameters, as_parameters, block_items)
166
- }
167
-
168
- rule(
169
- helper_name: simple(:name),
170
- parameters: subtree(:parameters),
171
- as_parameters: subtree(:as_parameters),
172
- block_items: subtree(:block_items),
173
- else_block_items: subtree(:else_block_items)
174
- ) {
175
- Tree::AsHelper.new(name, parameters, as_parameters, block_items, else_block_items)
176
- }
177
-
178
- rule(
179
- partial_name: simple(:partial_name),
180
- arguments: subtree(:arguments)
181
- ) {
182
- Tree::PartialWithArgs.new(partial_name, arguments)
183
- }
184
-
185
- rule(partial_name: simple(:partial_name)) {Tree::Partial.new(partial_name)}
186
- rule(block_items: subtree(:block_items)) {Tree::Block.new(block_items)}
187
- rule(else_block_items: subtree(:else_block_items)) {Tree::Block.new(block_items)}
188
- end
189
111
  end
@@ -1,3 +1,3 @@
1
1
  module Handlebars
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.13"
3
3
  end
@@ -1,11 +1,12 @@
1
- require_relative 'ruby-handlebars/version'
2
- require_relative 'ruby-handlebars/context'
3
- require_relative 'ruby-handlebars/parser'
4
- require_relative 'ruby-handlebars/tree'
5
- require_relative 'ruby-handlebars/template'
6
- require_relative 'ruby-handlebars/helper'
7
- require_relative 'ruby-handlebars/helpers/register_default_helpers'
8
- require_relative 'ruby-handlebars/escapers/html_escaper'
1
+ require_relative "ruby-handlebars/version"
2
+ require_relative "ruby-handlebars/context"
3
+ require_relative "ruby-handlebars/parser"
4
+ require_relative "ruby-handlebars/tree"
5
+ require_relative "ruby-handlebars/transform"
6
+ require_relative "ruby-handlebars/template"
7
+ require_relative "ruby-handlebars/helper"
8
+ require_relative "ruby-handlebars/helpers/register_default_helpers"
9
+ require_relative "ruby-handlebars/escapers/html_escaper"
9
10
 
10
11
  module Handlebars
11
12
  class Handlebars
@@ -15,6 +16,8 @@ module Handlebars
15
16
  @as_helpers = {}
16
17
  @helpers = {}
17
18
  @partials = {}
19
+ @parser = Parser.new
20
+ @transform = Transform.new
18
21
 
19
22
  register_default_helpers
20
23
  set_escaper
@@ -54,11 +57,10 @@ module Handlebars
54
57
 
55
58
  private
56
59
 
57
- PARSER = Parser.new
58
- TRANSFORM = Transform.new
60
+ attr_reader :parser, :transform
59
61
 
60
62
  def template_to_ast(content)
61
- TRANSFORM.apply(PARSER.parse(content))
63
+ transform.apply(parser.parse(content))
62
64
  end
63
65
 
64
66
  def register_default_helpers