@@ -39,19 +39,23 @@ def copy_js_files
3939 say "Generating Stimulus controllers"
4040
4141 js_controller_file_paths . each do |file_path |
42- component_file_name = file_path . split ( "/" ) . last
43- copy_file file_path , Rails . root . join ( "app/javascript/controllers/ruby_ui" , component_file_name )
42+ controller_file_name = file_path . split ( "/" ) . last
43+ copy_file file_path , Rails . root . join ( "app/javascript/controllers/ruby_ui" , controller_file_name )
4444 end
4545
4646 say "Updating Stimulus controllers manifest"
4747 run "rake stimulus:manifest:update"
4848 end
4949
50- def copy_dependencies
51- case component_folder_name
52- when "masked_input"
53- copy_masked_input_dependencies
54- end
50+ def install_dependencies
51+ return if dependencies . blank?
52+
53+ say "Installing dependencies"
54+
55+ install_components_dependencies ( dependencies [ "components" ] )
56+ install_stimulus_dependencies ( dependencies [ "stimulus_controllers" ] )
57+ install_gems_dependencies ( dependencies [ "gems" ] )
58+ install_js_packages ( dependencies [ "js_packages" ] )
5559 end
5660
5761 private
@@ -68,10 +72,50 @@ def subcomponent_file_paths = Dir.glob(File.join(component_folder_path, "*.rb"))
6872
6973 def js_controller_file_paths = Dir . glob ( File . join ( component_folder_path , "*.js" ) )
7074
71- def copy_masked_input_dependencies
72- say "Generating masked input dependencies"
75+ def install_components_dependencies ( components )
76+ components &.each do |component |
77+ run "bin/rails generate ruby_ui:component #{ component } "
78+ end
79+ end
80+
81+ def install_stimulus_dependencies ( stimulus_controllers )
82+ return if stimulus_controllers . nil?
83+
84+ stimulus_controllers . each do |controller |
85+ controller_path = File . join ( self . class . source_root , controller )
86+ controller_file_name = controller . split ( "/" ) . last
87+ copy_file controller_path , Rails . root . join ( "app/javascript/controllers/ruby_ui" , controller_file_name )
88+ end
89+
90+ run "rake stimulus:manifest:update"
91+ end
92+
93+ def install_gems_dependencies ( gems )
94+ gems &.each do |ruby_gem |
95+ run "bundle show #{ ruby_gem } > /dev/null 2>&1 || bundle add #{ ruby_gem } "
96+ end
97+ end
98+
99+ def install_js_packages ( js_packages )
100+ js_packages &.each do |js_package |
101+ install_js_package ( js_package )
102+ end
103+ end
104+
105+ def install_js_package ( package )
106+ if File . exist? ( Rails . root . join ( "package-lock.json" ) )
107+ run "npm install #{ package } "
108+ elsif File . exist? ( Rails . root . join ( "yarn.lock" ) )
109+ run "yarn add #{ package } "
110+ else
111+ say "Could not detect the package manager, you need to install '#{ package } ' manually" , :red
112+ end
113+ end
114+
115+ def dependencies
116+ @dependencies ||= YAML . load_file ( File . join ( __dir__ , "dependencies.yml" ) ) . freeze
73117
74- run "bin/rails generate ruby_ui:component Input"
118+ @dependencies [ component_folder_name ]
75119 end
76120 end
77121 end
0 commit comments