rails / execjs

Run JavaScript code from Ruby
MIT License
540 stars 282 forks source link

JSON::GeneratorError after moving from 1.4.0 to 2.0.x #29

Open lunks opened 9 years ago

lunks commented 9 years ago

I'm just moving a previous issue from the old repo here. Is there a way of doing this using ExecJS > 1.4.0?

Using this in a js.coffee erb template

$("#stats").replaceWith("<%= escape_javascript(render @template) %>")
now causes this error

JSON::GeneratorError - only generation of JSON objects or arrays allowed:
  /Users/Nick/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/json/common.rb:216:in `generate'
  /Users/Nick/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/json/common.rb:345:in `dump'
  execjs (2.0.0) lib/execjs/external_runtime.rb:19:in `eval'
  execjs (2.0.0) lib/execjs/external_runtime.rb:33:in `call'
  coffee-script (2.2.0) lib/coffee_script.rb:57:in `compile'
  app/views/admin/stats/stats.js.coffee:1:in `_app_views_admin_stats_stats_js_coffee___1014294459951170846_70216695895960'
This worked just fine with 1.4.0 Should a different approach now be used?
rafaelfranca commented 9 years ago

Is not it missing the erb extension?

chancancode commented 9 years ago

Actually. I know the problem, one of the JSON.generate call is missing quirks_mode: true. (By default it only allows you to make {...} and [...], this flag allows bare strings, numbers, booleans and nulls as well.

We just have to verify it wasn't intentional and add the flag.

chancancode commented 9 years ago

Specifically: https://github.com/rails/execjs/blob/1a92790be698d051a58760e2a90a0e31a9763b29/lib/execjs/external_runtime.rb#L46

The only thing that is giving me minor doubts is that the original commit that introduced it did it in one place but not the other, but I'm pretty sure it was just a mistake.

lunks commented 9 years ago

It has the erb extension. It seems the issue was lingering in the old repo and no one noticed it.