diff --git a/lib/react/jsx.rb b/lib/react/jsx.rb index d4947521..79b2e349 100644 --- a/lib/react/jsx.rb +++ b/lib/react/jsx.rb @@ -1,4 +1,5 @@ require 'execjs' +require 'react/jsx/processor' require 'react/jsx/template' require 'react/jsx/jsx_transformer' require 'react/jsx/babel_transformer' diff --git a/lib/react/jsx/processor.rb b/lib/react/jsx/processor.rb new file mode 100644 index 00000000..28dd6d9d --- /dev/null +++ b/lib/react/jsx/processor.rb @@ -0,0 +1,9 @@ +module React + module JSX + class Processor + def self.call(input) + JSX::transform(input[:data]) + end + end + end +end diff --git a/lib/react/rails/engine.rb b/lib/react/rails/engine.rb index aef68a40..c1c121f5 100644 --- a/lib/react/rails/engine.rb +++ b/lib/react/rails/engine.rb @@ -3,7 +3,12 @@ module Rails class Engine < ::Rails::Engine initializer "react_rails.setup_engine", :group => :all do |app| sprockets_env = app.assets || Sprockets # Sprockets 3.x expects this in a different place - sprockets_env.register_engine(".jsx", React::JSX::Template) + if Gem::Version.new(Sprockets::VERSION) >= Gem::Version.new("3.0.0") + sprockets_env.register_mime_type("application/jsx", extensions: [".jsx", ".js.jsx"]) + sprockets_env.register_transformer("application/jsx", "application/javascript", React::JSX::Processor) + else + sprockets_env.register_engine(".jsx", React::JSX::Template) + end end end end diff --git a/test/react/jsx/jsx_transformer_test.rb b/test/react/jsx/jsx_transformer_test.rb index 8ed55593..5e3f40ca 100644 --- a/test/react/jsx/jsx_transformer_test.rb +++ b/test/react/jsx/jsx_transformer_test.rb @@ -19,7 +19,7 @@ class JSXTransformerTest < ActionDispatch::IntegrationTest FileUtils.rm replacing_path assert_response :success - assert_equal 'test_confirmation_token_jsx_transformed;', @response.body + assert_equal 'test_confirmation_token_jsx_transformed;', @response.body.strip end test 'accepts harmony: true option' do @@ -52,7 +52,7 @@ class JSXTransformerTest < ActionDispatch::IntegrationTest FileUtils.rm_rf custom_path assert_response :success - assert_equal 'test_confirmation_token_jsx_transformed;', @response.body + assert_equal 'test_confirmation_token_jsx_transformed;', @response.body.strip end end