stimulus-rails 0.4.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ Description:
2
+ ============
3
+ Generates a new Stimulus controller at the passed path. If running under node,
4
+ it'll also call the stimulus:manifest:update task to update the controllers/index.js.
5
+
6
+ Examples:
7
+ =========
8
+ bin/rails generate stimulus chat
9
+
10
+ creates: app/javascript/controllers/chat_controller.js
11
+
12
+
13
+ bin/rails generate stimulus nested/chat
14
+
15
+ creates: app/javascript/controllers/nested/chat_controller.js
@@ -0,0 +1,16 @@
1
+ require "rails/generators/named_base"
2
+
3
+ class StimulusGenerator < Rails::Generators::NamedBase # :nodoc:
4
+ source_root File.expand_path("templates", __dir__)
5
+
6
+ def copy_view_files
7
+ @attribute = stimulus_attribute_value(name)
8
+ template "controller.js", "app/javascript/controllers/#{name}_controller.js"
9
+ rails_command "stimulus:manifest:update" if Rails.root.join("package.json").exist?
10
+ end
11
+
12
+ private
13
+ def stimulus_attribute_value(name)
14
+ name.gsub(/\//, "--")
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ // Connects to data-controller="<%= @attribute %>"
4
+ export default class extends Controller {
5
+ connect() {
6
+ }
7
+ }
@@ -0,0 +1,10 @@
1
+ import { Application } from "@hotwired/stimulus"
2
+
3
+ const application = Application.start()
4
+
5
+ // Configure Stimulus development experience
6
+ application.warnings = true
7
+ application.debug = false
8
+ window.Stimulus = application
9
+
10
+ export { application }
@@ -1,12 +1,5 @@
1
- import { Application } from "@hotwired/stimulus"
2
-
3
- const application = Application.start()
4
-
5
- // Configure Stimulus development experience
6
- application.warnings = true
7
- application.debug = false
8
- window.Stimulus = application
9
-
10
1
  // Import and register all your controllers from the importmap under controllers/*
2
+
3
+ import { application } from "controllers/application"
11
4
  import { registerControllersFrom } from "@hotwired/stimulus-importmap-autoloader"
12
5
  registerControllersFrom("controllers", application)
@@ -1,11 +1,7 @@
1
- import { Application } from "@hotwired/stimulus"
1
+ // This file is auto-generated by ./bin/rails stimulus:manifest:update
2
+ // Run that command whenever you add a new controller
2
3
 
3
- const application = Application.start()
4
+ import { application } from "./application"
4
5
 
5
- // Configure Stimulus development experience
6
- application.warnings = true
7
- application.debug = false
8
- window.Stimulus = application
9
-
10
- // Import and register all your controllers
11
- import("./hello_controller").then(c => application.register("hello", c.default))
6
+ import HelloController from "./hello_controller"
7
+ application.register("hello", HelloController)
@@ -2,6 +2,8 @@ say "Create controllers directory"
2
2
  empty_directory "app/javascript/controllers"
3
3
  copy_file "#{__dir__}/app/javascript/controllers/index_for_importmap.js",
4
4
  "app/javascript/controllers/index.js"
5
+ copy_file "#{__dir__}/app/javascript/controllers/application.js",
6
+ "app/javascript/controllers/application.js"
5
7
  copy_file "#{__dir__}/app/javascript/controllers/hello_controller.js",
6
8
  "app/javascript/controllers/hello_controller.js"
7
9
 
@@ -1,14 +1,9 @@
1
1
  say "Create controllers directory"
2
2
  empty_directory "app/javascript/controllers"
3
-
4
- if Rails.root.join("config/webpacker.yml").exist?
5
- copy_file "#{__dir__}/app/javascript/controllers/index_for_webpacker.js",
6
- "app/javascript/controllers/index.js"
7
- else
8
- copy_file "#{__dir__}/app/javascript/controllers/index_for_node.js",
9
- "app/javascript/controllers/index.js"
10
- end
11
-
3
+ copy_file "#{__dir__}/app/javascript/controllers/index_for_node.js",
4
+ "app/javascript/controllers/index.js"
5
+ copy_file "#{__dir__}/app/javascript/controllers/application.js",
6
+ "app/javascript/controllers/application.js"
12
7
  copy_file "#{__dir__}/app/javascript/controllers/hello_controller.js",
13
8
  "app/javascript/controllers/hello_controller.js"
14
9
 
@@ -0,0 +1,27 @@
1
+ module Stimulus::Manifest
2
+ extend self
3
+
4
+ def generate_from(controllers_path)
5
+ extract_controllers_from(controllers_path).collect do |controller_path|
6
+ import_and_register_controller(controllers_path, controller_path)
7
+ end
8
+ end
9
+
10
+ def import_and_register_controller(controllers_path, controller_path)
11
+ module_path = controller_path.relative_path_from(controllers_path).to_s.remove(".js")
12
+ controller_class_name = module_path.camelize.gsub(/::/, "__")
13
+ tag_name = module_path.remove("_controller").gsub(/_/, "-").gsub(/\//, "--")
14
+
15
+ <<-JS
16
+
17
+ import #{controller_class_name} from "./#{module_path}"
18
+ application.register("#{tag_name}", #{controller_class_name})
19
+ JS
20
+ end
21
+
22
+ def extract_controllers_from(directory)
23
+ (directory.children.select { |e| e.to_s =~ /_controller.js$/ } +
24
+ directory.children.select(&:directory?).collect { |d| extract_controllers_from(d) }
25
+ ).flatten.sort
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module Stimulus
2
- VERSION = "0.4.2"
2
+ VERSION = "0.5.3"
3
3
  end
@@ -1,3 +1,5 @@
1
+ require "stimulus/manifest"
2
+
1
3
  def run_stimulus_install_template(path) system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/#{path}.rb", __dir__)}" end
2
4
 
3
5
  namespace :stimulus do
@@ -23,4 +25,23 @@ namespace :stimulus do
23
25
  run_stimulus_install_template "stimulus_with_node"
24
26
  end
25
27
  end
28
+
29
+ namespace :manifest do
30
+ task :display do
31
+ puts Stimulus::Manifest.generate_from(Rails.root.join("app/javascript/controllers"))
32
+ end
33
+
34
+ task :update do
35
+ manifest =
36
+ Stimulus::Manifest.generate_from(Rails.root.join("app/javascript/controllers"))
37
+
38
+ File.open(Rails.root.join("app/javascript/controllers/index.js"), "w+") do |index|
39
+ index.puts "// This file is auto-generated by ./bin/rails stimulus:manifest:update"
40
+ index.puts "// Run that command whenever you add a new controller"
41
+ index.puts
42
+ index.puts %(import { application } from "./application")
43
+ index.puts manifest
44
+ end
45
+ end
46
+ end
26
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stimulus-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Stephenson
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-09-04 00:00:00.000000000 Z
13
+ date: 2021-09-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -40,15 +40,19 @@ files:
40
40
  - app/assets/javascripts/stimulus.js
41
41
  - app/assets/javascripts/stimulus@2.js
42
42
  - app/assets/javascripts/stimulus@3.0.0-beta.1.js
43
+ - app/assets/javascripts/stimulus@3.0.0-beta.2.js
44
+ - lib/generators/stimulus/USAGE
45
+ - lib/generators/stimulus/stimulus_generator.rb
46
+ - lib/generators/stimulus/templates/controller.js.tt
47
+ - lib/install/app/javascript/controllers/application.js
43
48
  - lib/install/app/javascript/controllers/hello_controller.js
44
49
  - lib/install/app/javascript/controllers/index_for_importmap.js
45
50
  - lib/install/app/javascript/controllers/index_for_node.js
46
- - lib/install/app/javascript/controllers/index_for_webpacker.js
47
- - lib/install/install.rb
48
51
  - lib/install/stimulus_with_importmap.rb
49
52
  - lib/install/stimulus_with_node.rb
50
53
  - lib/stimulus-rails.rb
51
54
  - lib/stimulus/engine.rb
55
+ - lib/stimulus/manifest.rb
52
56
  - lib/stimulus/version.rb
53
57
  - lib/tasks/stimulus_tasks.rake
54
58
  homepage: https://stimulus.hotwired.dev
@@ -1,14 +0,0 @@
1
- import { Application } from "@hotwired/stimulus"
2
-
3
- const application = Application.start()
4
-
5
- // Configure Stimulus development experience
6
- application.warnings = true
7
- application.debug = false
8
- window.Stimulus = application
9
-
10
- // Import and register all your controllers within this directory and all subdirectories
11
- // Controller files must be named *_controller.js or *_controller.ts
12
- import { definitionsFromContext } from "@hotwired/stimulus"
13
- const context = require.context("controllers", true, /_controller\.(js|ts)$/)
14
- application.load(definitionsFromContext(context))
@@ -1,10 +0,0 @@
1
- if (js_entrypoint_path = Rails.root.join("app/javascript/application.js")).exist?
2
- say "Appending Stimulus setup code to JavaScript entrypoint"
3
- append_to_file "app/javascript/application.js", %(\nimport "controllers")
4
- else
5
- end
6
-
7
- say "Creating controllers directory"
8
- directory "#{__dir__}/app/javascript/controllers", "app/javascript/controllers"
9
-
10
- say "Add @hotwired/stimulus package"