asciidoctor-templates-compiler 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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