asciidoctor-templates-compiler 0.4.2 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47d4105679ab592e65c3e054abb7bce74216f51a8ed94e6095f16a75486eac36
4
- data.tar.gz: ad30aa2981e5343445a6410f0b99ed75fbecd2ad44414929219165c8bf4684a4
3
+ metadata.gz: 2bb8bf4e21a7c0da30e0862a44aa6d44bb7b848454e7709586e1d500849de30e
4
+ data.tar.gz: 1793750752bdcfb66b5193de00e0a51d962c941b41b642c17f8c3129fab0b4d9
5
5
  SHA512:
6
- metadata.gz: cf9513a6eeed653fa31d1976e752c5a2444cb44a9aa49d6256b512d05a576e9472299d3580766e926d878df902c2462e5e823eb694d32804d8f7733ba6831238
7
- data.tar.gz: 6c711e96fd5c3259ae985ee9c2409ef6a734247ac21b840149fdf8eda2955d179747b8ec58d27452096e74307b7c6110d15a0497cbfb047430e161f4c94c915d
6
+ metadata.gz: 958552ef2e142a7792272b4713997129946bc39325c7325f7cf5e49e37d9d98f211f27efe3e453a2de443a24965d1da4d1de3f0e7b279e0495bd4668d02c8a78
7
+ data.tar.gz: 237265848e2094213d2387cd8c4e2f23d6296409199e8b9223949c9493a23ff81de74625f1db396bdc8bc8d4ffdb5e7bef036cc01d66ddb8f9cc4b5f444d2a8f
@@ -2,7 +2,7 @@
2
2
  :source-language: ruby
3
3
  // custom
4
4
  :gem-name: asciidoctor-templates-compiler
5
- :gem-version: 0.4.2
5
+ :gem-version: 0.5.0
6
6
  :gh-name: jirutka/{gem-name}
7
7
  :gh-branch: master
8
8
  :codacy-id: b23b8c6503474ea5b13537eaef0c73d5
@@ -57,6 +57,10 @@ delegate_backend::
57
57
  engine_opts::
58
58
  A Hash of options to pass into the templating engine that compiles templates into Ruby code.
59
59
 
60
+ ignore_convert_opts::
61
+ Ignore (i.e. do not set as local variables) options passed to the `#convert` method (i.e. to the templates).
62
+ This is needed only for Opal.
63
+
60
64
  output::
61
65
  An output stream (`IO` object like opened file, `$stdout`, …) to write the generated converter into.
62
66
  Default is `StringIO.new` (it’s the return value of `#compile_converter`).
@@ -152,6 +156,46 @@ end
152
156
  You can also look into https://github.com/jirutka/asciidoctor-html5s/[asciidoctor-html5s] for a real-world example including integration with https://github.com/asciidoctor/asciidoctor-doctest/[Asciidoctor::DocTest].
153
157
 
154
158
 
159
+ === Opal Caveats
160
+
161
+ The generated converter code can be transpiled into JavaScript using Opal.
162
+ However, there’s one feature that is known to not work: passing options to the `#convert` method.
163
+
164
+ Consider the following example:
165
+
166
+ [source, slim]
167
+ .toc.html.slim:
168
+ nav id='toc'
169
+ = converter.convert document, 'outline', toclevels: 5
170
+
171
+ [source, slim]
172
+ .outline.html.slim:
173
+ - toclevels ||= document.attr('toclevels').to_i
174
+
175
+ Variable `toclevels` in `outline.html.slim` should be initialized to `5` when this template is called from the `toc.html.slim` template.
176
+ This is implemented using `Kernel#binding` and `Binding#local_variable_set` which is not supported by Opal.
177
+ In such case you get exception like this:
178
+
179
+ ....
180
+ RuntimeError: node_modules/opal-runtime/src/opal.js
181
+ throw exception;
182
+ ^
183
+
184
+ binding: undefined method `binding` for [some Asciidoctor class]
185
+ ....
186
+
187
+ Unfortunately I don’t know how to implement this feature without using `Binding`, but you can use the following workaround.
188
+
189
+ Enable `ignore_convert_opts` (see <<Usage>>) to remove the code calling `Kernel#binding` from the converter.
190
+ The options will be still passed, but not binded to the template local variables.
191
+ If you examine the generated code, you can see that the options are passed to the convert methods via argument named `opts`.
192
+ You can exploit this fact and do something like:
193
+
194
+ [source, slim]
195
+ .outline.html.slim:
196
+ - toclevels = opts[:toclevels] || document.attr('toclevels').to_i
197
+
198
+
155
199
  == License
156
200
 
157
201
  This project is licensed under http://opensource.org/licenses/MIT/[MIT License].
@@ -40,17 +40,21 @@ module Asciidoctor::TemplatesCompiler
40
40
  # @param delegate_backend [String, nil] name of the backend (converter) to use as a fallback
41
41
  # for AST nodes not supported by the generated converter. If not specified, no fallback will
42
42
  # be used and converter will raise +NoMethodError+ when it try to convert unsupported node.
43
+ # @param ignore_convert_opts [Boolean] ignore (i.e. do not set as local variables) options
44
+ # passed to the +#convert+ method (i.e. to the templates). This is needed only for Opal.
43
45
  #
44
46
  # @raise [ArgumentError] if _helpers_code_ is not blank and does not contain module +Helpers+.
45
47
  #
46
48
  def initialize(class_name:, transforms_code:, helpers_code: nil,
47
- register_for: [], backend_info: {}, delegate_backend: nil, **)
49
+ register_for: [], backend_info: {}, delegate_backend: nil,
50
+ ignore_convert_opts: false, **)
48
51
  @class_name = class_name
49
52
  @transforms_code = transforms_code
50
53
  @helpers_code = helpers_code
51
54
  @register_for = Array(register_for)
52
55
  @backend_info = backend_info
53
56
  @delegate_backend = delegate_backend
57
+ @ignore_convert_opts = ignore_convert_opts
54
58
 
55
59
  if !helpers_code.blank? && helpers_code !~ /\bmodule Helpers[\s#]/
56
60
  raise ArgumentError, 'The helpers_code does not contain module Helpers'
@@ -166,6 +170,8 @@ module Asciidoctor::TemplatesCompiler
166
170
  end
167
171
 
168
172
  def support_methods_code
173
+ return '' if @ignore_convert_opts
174
+
169
175
  <<-EOF.reindent(2)
170
176
  def set_local_variables(binding, vars)
171
177
  vars.each do |key, val|
@@ -183,7 +189,7 @@ module Asciidoctor::TemplatesCompiler
183
189
  out << " def #{name}(node, opts = {})\n"
184
190
  out << " node.extend(Helpers)\n" unless @helpers_code.blank?
185
191
  out << " node.instance_eval do\n"
186
- out << " converter.set_local_variables(binding, opts) unless opts.empty?\n"
192
+ out << " converter.set_local_variables(binding, opts) unless opts.empty?\n" unless @ignore_convert_opts # rubocop:disable LineLength
187
193
  out << code.indent(6, ' ') << "\n"
188
194
  out << " end\n"
189
195
  out << " end\n"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module TemplatesCompiler
5
- VERSION = '0.4.2'
5
+ VERSION = '0.5.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-templates-compiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Jirutka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-11 00:00:00.000000000 Z
11
+ date: 2018-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor