Skip to content

Instantly share code, notes, and snippets.

@tonydewan
Created October 14, 2016 19:52
Show Gist options
  • Save tonydewan/7929defe3ef4b7c91cce61f144c0897d to your computer and use it in GitHub Desktop.
Save tonydewan/7929defe3ef4b7c91cce61f144c0897d to your computer and use it in GitHub Desktop.
Simple SprocketsCoffeeReact replacement for Sprockets 3.0+
# lib/sprockets/coffee_react.rb
require "sprockets"
require "coffee-react"
require "coffee-script"
module Sprockets
# Transforms cjsx to javascript
module CoffeeReactTransformer
def self.call(input)
coffeescript = CoffeeReact.transform(input[:data])
javascript = CoffeeScript.compile(coffeescript)
{ data: javascript }
end
end
# Postprocessing adds displayname to components
module CoffeeReactPostprocessor
def self.call(input)
{ data: CoffeeReact.jstransform(input[:data]) }
end
end
end
Sprockets.register_mime_type 'text/x-cjsx', extensions: ['.js.cjsx', '.js.coffee.cjsx']
Sprockets.register_transformer 'text/x-cjsx', 'application/javascript', Sprockets::CoffeeReactTransformer
Sprockets.register_postprocessor 'application/javascript', Sprockets::CoffeeReactPostprocessor
gem "coffee-react"
# initializers/sprockets_extensions.rb
Dir[Rails.root + 'lib/sprockets/*.rb'].each do |file|
require file
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment