From bfd013b3b704268faeba40ab70531e89b7c66176 Mon Sep 17 00:00:00 2001 From: stephann <3025661+stephannv@users.noreply.github.com> Date: Mon, 18 Nov 2024 13:32:54 -0300 Subject: [PATCH 1/2] Install component dependencies (gems, stimulus, packages, components) --- lib/generators/ruby_ui/component_generator.rb | 64 +++++++++++-- lib/generators/ruby_ui/dependencies.yml | 92 +++++++++++++++++++ 2 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 lib/generators/ruby_ui/dependencies.yml diff --git a/lib/generators/ruby_ui/component_generator.rb b/lib/generators/ruby_ui/component_generator.rb index dceae016..02b9f9a5 100644 --- a/lib/generators/ruby_ui/component_generator.rb +++ b/lib/generators/ruby_ui/component_generator.rb @@ -39,19 +39,23 @@ def copy_js_files say "Generating Stimulus controllers" js_controller_file_paths.each do |file_path| - component_file_name = file_path.split("/").last - copy_file file_path, Rails.root.join("app/javascript/controllers/ruby_ui", component_file_name) + controller_file_name = file_path.split("/").last + copy_file file_path, Rails.root.join("app/javascript/controllers/ruby_ui", controller_file_name) end say "Updating Stimulus controllers manifest" run "rake stimulus:manifest:update" end - def copy_dependencies - case component_folder_name - when "masked_input" - copy_masked_input_dependencies - end + def install_dependencies + return if dependencies.blank? + + say "Installing dependencies" + + install_components_dependencies(dependencies["components"]) + install_stimulus_dependencies(dependencies["stimulus_controllers"]) + install_gems_dependencies(dependencies["gems"]) + install_js_packages(dependencies["js_packages"]) end private @@ -68,10 +72,50 @@ def subcomponent_file_paths = Dir.glob(File.join(component_folder_path, "*.rb")) def js_controller_file_paths = Dir.glob(File.join(component_folder_path, "*.js")) - def copy_masked_input_dependencies - say "Generating masked input dependencies" + def install_components_dependencies(components) + components&.each do |component| + run "bin/rails generate ruby_ui:component #{component}" + end + end + + def install_stimulus_dependencies(stimulus_controllers) + return if stimulus_controllers.nil? + + stimulus_controllers.each do |controller| + controller_path = File.join(self.class.source_root, controller) + controller_file_name = controller.split("/").last + copy_file controller_path, Rails.root.join("app/javascript/controllers/ruby_ui", controller_file_name) + end + + run "rake stimulus:manifest:update" + end + + def install_gems_dependencies(gems) + gems&.each do |ruby_gem| + run "bundle show #{ruby_gem} > /dev/null 2>&1 || bundle add #{ruby_gem}" + end + end + + def install_js_packages(js_packages) + js_packages&.each do |js_package| + install_js_package(js_package) + end + end + + def install_js_package(package) + if File.exist?(Rails.root.join("package-lock.json")) + run "npm install #{package}" + elsif File.exist?(Rails.root.join("yarn.lock")) + run "yarn add #{package}" + else + say "Could not detect the package manager, you need to install '#{package}' manually", :red + end + end + + def dependencies + @dependencies ||= YAML.load_file(File.join(__dir__, "dependencies.yml")).freeze - run "bin/rails generate ruby_ui:component Input" + @dependencies[component_folder_name] end end end diff --git a/lib/generators/ruby_ui/dependencies.yml b/lib/generators/ruby_ui/dependencies.yml new file mode 100644 index 00000000..fb42006f --- /dev/null +++ b/lib/generators/ruby_ui/dependencies.yml @@ -0,0 +1,92 @@ +accordion: + js_packages: + - "motion" + +alert_dialog: + components: + - "Button" + +calendar: + js_packages: + - "mustache" + +chart: + js_packages: + - "chart.js" + +checkbox: + stimulus_controllers: + - "form/form_field_controller.js" + +clipboard: + js_packages: + - "@floating-ui/dom" + +codeblock: + components: + - "Button" + - "Clipboard" + + gems: + - "rouge" + +combobox: + js_packages: + - "@floating-ui/dom" + + stimulus_controllers: + - "form/form_field_controller.js" + +command: + js_packages: + - "fuse.js" + +context_menu: + js_packages: + - "tippy.js" + +dropdown_menu: + js_packages: + - "@floating-ui/dom" + +hover_card: + js_packages: + - "tippy.js" + +input: + stimulus_controllers: + - "form/form_field_controller.js" + +masked_input: + components: + - "Input" + + js_packages: + - "maska" + +pagination: + components: + - "Button" + +popover: + js_packages: + - "@floating-ui/dom" + +radio_button: + stimulus_controllers: + - "form/form_field_controller.js" + +select: + js_packages: + - "@floating-ui/dom" + + stimulus_controllers: + - "form/form_field_controller.js" + +textarea: + stimulus_controllers: + - "form/form_field_controller.js" + +tooltip: + js_packages: + - "@floating-ui/dom" From 234b0acdc0f0039faadf8aa6a6d50d2db05089b1 Mon Sep 17 00:00:00 2001 From: stephann <3025661+stephannv@users.noreply.github.com> Date: Mon, 18 Nov 2024 15:56:56 -0300 Subject: [PATCH 2/2] Remove stimulus dependencies --- lib/generators/ruby_ui/component_generator.rb | 13 ----------- lib/generators/ruby_ui/dependencies.yml | 22 ------------------- 2 files changed, 35 deletions(-) diff --git a/lib/generators/ruby_ui/component_generator.rb b/lib/generators/ruby_ui/component_generator.rb index 02b9f9a5..c8c6c718 100644 --- a/lib/generators/ruby_ui/component_generator.rb +++ b/lib/generators/ruby_ui/component_generator.rb @@ -53,7 +53,6 @@ def install_dependencies say "Installing dependencies" install_components_dependencies(dependencies["components"]) - install_stimulus_dependencies(dependencies["stimulus_controllers"]) install_gems_dependencies(dependencies["gems"]) install_js_packages(dependencies["js_packages"]) end @@ -78,18 +77,6 @@ def install_components_dependencies(components) end end - def install_stimulus_dependencies(stimulus_controllers) - return if stimulus_controllers.nil? - - stimulus_controllers.each do |controller| - controller_path = File.join(self.class.source_root, controller) - controller_file_name = controller.split("/").last - copy_file controller_path, Rails.root.join("app/javascript/controllers/ruby_ui", controller_file_name) - end - - run "rake stimulus:manifest:update" - end - def install_gems_dependencies(gems) gems&.each do |ruby_gem| run "bundle show #{ruby_gem} > /dev/null 2>&1 || bundle add #{ruby_gem}" diff --git a/lib/generators/ruby_ui/dependencies.yml b/lib/generators/ruby_ui/dependencies.yml index fb42006f..9db5eca0 100644 --- a/lib/generators/ruby_ui/dependencies.yml +++ b/lib/generators/ruby_ui/dependencies.yml @@ -14,10 +14,6 @@ chart: js_packages: - "chart.js" -checkbox: - stimulus_controllers: - - "form/form_field_controller.js" - clipboard: js_packages: - "@floating-ui/dom" @@ -34,9 +30,6 @@ combobox: js_packages: - "@floating-ui/dom" - stimulus_controllers: - - "form/form_field_controller.js" - command: js_packages: - "fuse.js" @@ -53,10 +46,6 @@ hover_card: js_packages: - "tippy.js" -input: - stimulus_controllers: - - "form/form_field_controller.js" - masked_input: components: - "Input" @@ -72,21 +61,10 @@ popover: js_packages: - "@floating-ui/dom" -radio_button: - stimulus_controllers: - - "form/form_field_controller.js" - select: js_packages: - "@floating-ui/dom" - stimulus_controllers: - - "form/form_field_controller.js" - -textarea: - stimulus_controllers: - - "form/form_field_controller.js" - tooltip: js_packages: - "@floating-ui/dom"