Sha256: e1cd9fea0e446eb949563431193b6368383f1979866e62d006c1c002669a1403

Contents?: true

Size: 975 Bytes

Versions: 10

Compression:

Stored size: 975 Bytes

Contents

module Stimulus::Manifest
  extend self

  def generate_from(controllers_path)
    extract_controllers_from(controllers_path).collect do |controller_path|
      import_and_register_controller(controllers_path, controller_path)
    end
  end

  def import_and_register_controller(controllers_path, controller_path)
    controller_path = controller_path.relative_path_from(controllers_path).to_s
    module_path = controller_path.split('.').first
    controller_class_name = module_path.camelize.gsub(/::/, "__")
    tag_name = module_path.remove(/_controller/).gsub(/_/, "-").gsub(/\//, "--")

    <<-JS

import #{controller_class_name} from "./#{controller_path}"
application.register("#{tag_name}", #{controller_class_name})
    JS
  end

  def extract_controllers_from(directory)
    (directory.children.select { |e| e.to_s =~ /_controller(\.\w+)+$/ } +
      directory.children.select(&:directory?).collect { |d| extract_controllers_from(d) }
    ).flatten.sort
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
stimulus-rails-1.0.4 lib/stimulus/manifest.rb
stimulus-rails-1.0.3 lib/stimulus/manifest.rb
stimulus-rails-1.0.2 lib/stimulus/manifest.rb
stimulus-rails-1.0.0 lib/stimulus/manifest.rb
stimulus-rails-0.7.3 lib/stimulus/manifest.rb
stimulus-rails-0.7.2 lib/stimulus/manifest.rb
stimulus-rails-0.7.1 lib/stimulus/manifest.rb
stimulus-rails-0.7.0 lib/stimulus/manifest.rb
stimulus-rails-0.6.2 lib/stimulus/manifest.rb
stimulus-rails-0.6.1 lib/stimulus/manifest.rb