Sha256: 9844c7601b607790585d41c8a60818126f7fc1ccd23e2b5851973ccd76269885

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

require "ruby2js"
require "listen"

module Clapton
  class Engine < ::Rails::Engine
    isolate_namespace Clapton

    initializer "clapton.helpers" do
      ActiveSupport.on_load(:action_view) do
        include ClaptonHelper
      end
    end

    initializer "clapton.action_cable_helpers" do
      ActiveSupport.on_load(:action_cable) do
        ActionCable.server.config.logger = Rails.logger
      end

      if Rails.env.development? || Rails.env.test?
        components_path = Rails.root.join("app", "components")
        FileUtils.mkdir_p(components_path) unless components_path.exist?
        FileUtils.touch(components_path.join(".keep"))

        compile_components

        listener = Listen.to(Rails.root.join("app", "components")) do |modified, added, removed|
          compile_components
        end

        listener.start
      end
    end

    def compile_components
      FileUtils.mkdir_p(Rails.root.join("public", "clapton")) unless Rails.root.join("public", "clapton").exist?
      File.write(Rails.root.join("public", "clapton", "components.js"), File.read(File.join(__dir__, "javascripts", "dist", "components.js")))
      File.write(Rails.root.join("public", "clapton", "client.js"), File.read(File.join(__dir__, "javascripts", "dist", "client.js")))
      Dir.glob(Rails.root.join("app", "components", "**", "*.rb")).each do |file|
        code = File.read(file)
        js = ""
        js += "import { Clapton } from 'components';"
        js += "\n"
        code.scan(/(\w+)Component\.new/).each do |match|
          js += "import { #{match[0]}Component } from '#{match[0]}Component';"
          js += "\n"
        end
        js += Ruby2JS.convert(code, preset: true)
        js += "\n"
        js += "export { #{File.basename(file, ".rb").camelize} };"
        js += "\n"
        File.write(Rails.root.join("public", "clapton", "#{File.basename(file, ".rb").camelize}.js"), js)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
clapton-0.0.14 lib/clapton/engine.rb