Sha256: 7d376c678203e023fec647e2d4063ace0e7ae14e447a6c3f766d267376597a7f

Contents?: true

Size: 1.33 KB

Versions: 13

Compression:

Stored size: 1.33 KB

Contents

require 'wunderbar/render'
require 'ruby2js/filter/react'
require 'execjs'

react = File.expand_path('../vendor/react-with-addons.min.js', __FILE__)
Wunderbar::Asset.script name: 'react-min.js', file: react, render: true

reactdom = File.expand_path('../vendor/react-dom.min.js', __FILE__)
Wunderbar::Asset.script name: 'react-dom.min.js', file: reactdom, render: true,
  server: File.expand_path('../vendor/react-dom-server.min.js', __FILE__)

class Wunderbar::Render
  RUBY2JS_OPTIONS = {react: true}

  def self.server(common)
    "ReactDOMServer.renderToString(#{common})"
  end

  def self.client(common, element, target)
    "ReactDOM.render(#{common}, #{element})"
  end

  def self.eval(scripts, server)
    context = ExecJS.compile(scripts.compact.join(";\n"))
    context.eval(server)
  rescue ExecJS::ProgramError => e
    Wunderbar.error e
    "<pre>" + e.message.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;') +
      "</pre>"
  end
end

# Monkeypatch to address https://github.com/sstephenson/execjs/pull/180
require 'execjs'
class ExecJS::ExternalRuntime::Context
  alias_method :w_write_to_tempfile, :write_to_tempfile
  def write_to_tempfile(*args)
    tmpfile = w_write_to_tempfile(*args).path.untaint
    tmpfile = Struct.new(:path, :to_str).new(tmpfile, tmpfile)
    def tmpfile.unlink
      File.unlink path
    end
    tmpfile
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
wunderbar-1.3.1 lib/wunderbar/react.rb
wunderbar-1.3.0 lib/wunderbar/react.rb
wunderbar-1.2.10 lib/wunderbar/react.rb
wunderbar-1.2.9 lib/wunderbar/react.rb
wunderbar-1.2.8 lib/wunderbar/react.rb
wunderbar-1.2.7 lib/wunderbar/react.rb
wunderbar-1.2.6 lib/wunderbar/react.rb
wunderbar-1.2.5 lib/wunderbar/react.rb
wunderbar-1.2.4 lib/wunderbar/react.rb
wunderbar-1.2.3 lib/wunderbar/react.rb
wunderbar-1.2.2 lib/wunderbar/react.rb
wunderbar-1.2.1 lib/wunderbar/react.rb
wunderbar-1.2.0 lib/wunderbar/react.rb