From 153039cfd802b1ea91bbcdf39425aa95e9e9b766 Mon Sep 17 00:00:00 2001 From: stephann <3025661+stephannv@users.noreply.github.com> Date: Thu, 14 Nov 2024 10:58:11 -0300 Subject: [PATCH 1/3] Clean up unnecessary code --- Gemfile.lock | 6 ++-- lib/ruby_ui.rb | 54 +--------------------------- lib/ruby_ui/base.rb | 7 ---- lib/ruby_ui/index.js | 72 -------------------------------------- lib/ruby_ui/railtie.rb | 52 --------------------------- lib/ruby_ui/version.rb | 5 --- ruby_ui.gemspec | 9 +++-- test/ruby_ui/setup_test.rb | 31 ---------------- test/test_helper.rb | 39 ++++++++++----------- 9 files changed, 26 insertions(+), 249 deletions(-) delete mode 100644 lib/ruby_ui/index.js delete mode 100644 lib/ruby_ui/railtie.rb delete mode 100644 lib/ruby_ui/version.rb delete mode 100644 test/ruby_ui/setup_test.rb diff --git a/Gemfile.lock b/Gemfile.lock index 61fc0f0a..376784ab 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,9 +2,6 @@ PATH remote: . specs: ruby_ui (1.0.0.pre.alpha.4) - phlex (>= 2.0.0.beta2) - rouge (~> 4.2.0) - tailwind_merge (~> 0.12) GEM remote: https://rubygems.org/ @@ -63,9 +60,12 @@ PLATFORMS DEPENDENCIES minitest (~> 5.0) + phlex (>= 2.0.0.beta2) rake (~> 13.0) + rouge (~> 4.2.0) ruby_ui! standard (~> 1.0) + tailwind_merge (~> 0.12) BUNDLED WITH 2.5.22 diff --git a/lib/ruby_ui.rb b/lib/ruby_ui.rb index 5ec29716..8b278664 100644 --- a/lib/ruby_ui.rb +++ b/lib/ruby_ui.rb @@ -1,57 +1,5 @@ # frozen_string_literal: true -require "json" -require "phlex" - module RubyUI - extend Phlex::Kit - - def self.setup - yield self - create_namespace_module if namespace - end - - def self.create_namespace_module - source_module = self - mod = namespace.to_s.split("::").inject(Object) do |parent, const| - parent.const_get(const) - rescue - parent.const_set(const, Module.new) - end - - mod.singleton_class.class_eval do - define_method :const_missing do |name| - source_module.const_defined?(name) ? source_module.const_get(name) : super(name) - end - - define_method :method_missing do |name, *args, &block| - source_module.respond_to?(name) ? source_module.send(name, *args, &block) : super(name, *args, &block) - end - - define_method :respond_to_missing? do |name, include_private = false| - source_module.respond_to?(name) || super(name, include_private) - end - end - end - - def self.namespace - @namespace ||= nil - end - - def self.namespace=(value) - @namespace = value - end -end - -# Require the Base class first -require_relative "ruby_ui/base" - -# Manually require all the files -Dir.glob(File.join(__dir__, "ruby_ui", "**", "*.rb")).sort.each { |file| require file } - -# If you need to require generators (assuming they're needed) -if defined?(Rails::Generators) - require_relative "generators/ruby_ui/base_generator" - require_relative "generators/ruby_ui/install/install_generator" - require_relative "generators/ruby_ui/component_generator" + VERSION = "1.0.0-alpha.4" end diff --git a/lib/ruby_ui/base.rb b/lib/ruby_ui/base.rb index 8f66dc13..a60b8bb4 100644 --- a/lib/ruby_ui/base.rb +++ b/lib/ruby_ui/base.rb @@ -13,13 +13,6 @@ def initialize(**user_attrs) @attrs[:class] = TAILWIND_MERGER.merge(@attrs[:class]) if @attrs[:class] end - if defined?(Rails) && Rails.env.development? - def before_template - comment { "Before #{self.class.name}" } - super - end - end - private def default_attrs diff --git a/lib/ruby_ui/index.js b/lib/ruby_ui/index.js deleted file mode 100644 index 00c16126..00000000 --- a/lib/ruby_ui/index.js +++ /dev/null @@ -1,72 +0,0 @@ -// Import all controller files -import AccordionController from "./accordion/accordion_controller"; -import AlertDialogController from "./alert_dialog/alert_dialog_controller"; -import CalendarController from "./calendar/calendar_controller"; -import CalendarInputController from "./calendar/calendar_input_controller"; -import CollapsibleController from "./collapsible/collapsible_controller"; -import ChartController from "./chart/chart_controller"; -import CheckboxGroupController from "./checkbox/checkbox_group_controller"; -import ClipboardController from "./clipboard/clipboard_controller"; -import ComboboxController from "./combobox/combobox_controller"; -import ComboboxContentController from "./combobox/combobox_content_controller"; -import ComboboxItemController from "./combobox/combobox_item_controller"; -import CommandController from "./command/command_controller"; -import ContextMenuController from "./context_menu/context_menu_controller"; -import DialogController from "./dialog/dialog_controller"; -import DropdownMenuController from "./dropdown_menu/dropdown_menu_controller"; -import FormFieldController from "./form/form_field_controller"; -import HoverCardController from "./hover_card/hover_card_controller"; -import MaskedInputController from "./masked_input/masked_input_controller"; -import PopoverController from "./popover/popover_controller"; -import TabsController from "./tabs/tabs_controller"; -import ThemeToggleController from "./theme_toggle/theme_toggle_controller"; -import TooltipController from "./tooltip/tooltip_controller"; -import SelectController from "./select/select_controller"; -import SelectItemController from "./select/select_item_controller"; -import SheetController from "./sheet/sheet_controller"; -import SheetContentController from "./sheet/sheet_content_controller"; - -function initialize(application) { - const registerIfNotExists = (identifier, controller) => { - if (!application.router.modulesByIdentifier.has(identifier)) { - application.register(identifier, controller); - // console.log(`Registered: ${identifier}`); - } - }; - - // Register all controllers - registerIfNotExists("ruby-ui--accordion", AccordionController); - registerIfNotExists("ruby-ui--alert-dialog", AlertDialogController); - registerIfNotExists("ruby-ui--calendar", CalendarController); - registerIfNotExists("ruby-ui--calendar-input", CalendarInputController); - registerIfNotExists("ruby-ui--collapsible", CollapsibleController); - registerIfNotExists("ruby-ui--chart", ChartController); - registerIfNotExists("ruby-ui--checkbox-group", CheckboxGroupController); - registerIfNotExists("ruby-ui--clipboard", ClipboardController); - registerIfNotExists("ruby-ui--combobox", ComboboxController); - registerIfNotExists("ruby-ui--combobox-content", ComboboxContentController); - registerIfNotExists("ruby-ui--combobox-item", ComboboxItemController); - registerIfNotExists("ruby-ui--command", CommandController); - registerIfNotExists("ruby-ui--context-menu", ContextMenuController); - registerIfNotExists("ruby-ui--dialog", DialogController); - registerIfNotExists("ruby-ui--dropdown-menu", DropdownMenuController); - registerIfNotExists("ruby-ui--form-field", FormFieldController); - registerIfNotExists("ruby-ui--hover-card", HoverCardController); - registerIfNotExists("ruby-ui--masked-input", MaskedInputController); - registerIfNotExists("ruby-ui--popover", PopoverController); - registerIfNotExists("ruby-ui--tabs", TabsController); - registerIfNotExists("ruby-ui--theme-toggle", ThemeToggleController); - registerIfNotExists("ruby-ui--tooltip", TooltipController); - registerIfNotExists("ruby-ui--select", SelectController); - registerIfNotExists("ruby-ui--select-item", SelectItemController); - registerIfNotExists("ruby-ui--sheet", SheetController); - registerIfNotExists("ruby-ui--sheet-content", SheetContentController); -} - -const RubyUI = { - initialize, -}; - -export default RubyUI; - -export { initialize }; diff --git a/lib/ruby_ui/railtie.rb b/lib/ruby_ui/railtie.rb deleted file mode 100644 index 07a06a78..00000000 --- a/lib/ruby_ui/railtie.rb +++ /dev/null @@ -1,52 +0,0 @@ -module RubyUI - if defined?(Rails) - class Railtie < ::Rails::Railtie - generators do - require_relative "../generators/ruby_ui/install/install_generator" - - config.app_generators do |g| - g.templates.unshift File.expand_path("../templates", __FILE__) - end - - initializer "ruby_ui.set_generator_namespace" do - Rails::Generators.namespace(RubyUI::Generators, as: "ruby_ui") - end - end - - # Add component loading - config.to_prepare do - # Define the path to the RubyUI components - ruby_ui_components_path = Rails.root.join("app/components/ruby_ui") - - # Check if the RubyUI components directory exists - if Dir.exist?(ruby_ui_components_path) - # Find all Ruby files in the RubyUI components directory and its subdirectories - Dir[ruby_ui_components_path.join("**", "*.rb")].each do |file| - # Get the relative path of the file from the RubyUI components directory - relative_path = Pathname.new(file).relative_path_from(ruby_ui_components_path) - - # Convert the file path to a component name - # e.g., "form/input.rb" becomes ["Form", "Input"] - component_name_parts = relative_path.to_s.chomp(".rb").split("/").map(&:camelize) - - # Create the full component name with RubyUI namespace - # e.g., "RubyUI::Form::Input" - full_component_name = "RubyUI::#{component_name_parts.join("::")}" - - begin - # Check if the component is already defined - if defined?(full_component_name.constantize) - # If it's defined, load (or reload) the file - load file - end - rescue NameError - # If the constant isn't defined (i.e., the component doesn't exist), - # we'll skip this file and move to the next one - next - end - end - end - end - end - end -end diff --git a/lib/ruby_ui/version.rb b/lib/ruby_ui/version.rb deleted file mode 100644 index 8b278664..00000000 --- a/lib/ruby_ui/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -module RubyUI - VERSION = "1.0.0-alpha.4" -end diff --git a/ruby_ui.gemspec b/ruby_ui.gemspec index d078793a..4b325dc9 100644 --- a/ruby_ui.gemspec +++ b/ruby_ui.gemspec @@ -1,4 +1,4 @@ -require_relative "lib/ruby_ui/version" +require_relative "lib/ruby_ui" Gem::Specification.new do |s| s.name = "ruby_ui" @@ -15,10 +15,9 @@ Gem::Specification.new do |s| s.required_ruby_version = ">= 3.3.1" - s.add_dependency "phlex", ">= 2.0.0.beta2" - s.add_dependency "rouge", "~> 4.2.0" - s.add_dependency "tailwind_merge", "~> 0.12" - + s.add_development_dependency "phlex", ">= 2.0.0.beta2" + s.add_development_dependency "rouge", "~> 4.2.0" + s.add_development_dependency "tailwind_merge", "~> 0.12" s.add_development_dependency "rake", "~> 13.0" s.add_development_dependency "standard", "~> 1.0" s.add_development_dependency "minitest", "~> 5.0" diff --git a/test/ruby_ui/setup_test.rb b/test/ruby_ui/setup_test.rb deleted file mode 100644 index 76f0a59d..00000000 --- a/test/ruby_ui/setup_test.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class RubyUI::SetupTest < Minitest::Test - def setup - @original_namespace = RubyUI.namespace - end - - def teardown - RubyUI.namespace = @original_namespace - Object.send(:remove_const, :UI) if Object.const_defined?(:UI) - end - - def test_default_namespace - RubyUI.setup {} - - assert_nil RubyUI.namespace - assert_kind_of RubyUI::Base, RubyUI::Button.new - end - - def test_custom_namespace - RubyUI.setup do |config| - config.namespace = "UI" - end - - assert_equal "UI", RubyUI.namespace - assert_equal RubyUI::Base, UI::Base - assert_kind_of RubyUI::Base, UI::Button.new - end -end diff --git a/test/test_helper.rb b/test/test_helper.rb index 87803a86..9fa3d6bd 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,39 +1,36 @@ # frozen_string_literal: true -require "bundler/setup" - -Bundler.require(:default) - +$LOAD_PATH.unshift File.expand_path("../lib", __dir__) +require "ruby_ui" require "phlex" -# require "phlex/testing/view_helper" +require "json" + require "minitest/autorun" -class TestContext < Phlex::HTML - def view_template(&) - div(&) +module RubyUI + extend Phlex::Kit + + Dir.glob("lib/ruby_ui/**/*.rb").map do |path| + class_name = path.split("/").last.delete_suffix(".rb").split("_").map(&:capitalize).join.to_sym + + autoload class_name, path end end def phlex_context(&) - render TestContext.new, & + render Phlex::HTML.new, & end -# this is a monkey patch for https://github.com/phlex-ruby/phlex/pull/809 -module Phlex::Testing - module Basic - def render(view, &) - if view.is_a?(Class) && view < Phlex::SGML - view = view.new +module Phlex + module Testing + module ViewHelper + def render(component, &) + component.call(view_context:, &) end - view.call(view_context:, &) - end - - def view_context - nil + def view_context = nil end end - ViewHelper = Basic end # this is a tracepoint that will output the path of all files loaded that contain the string "phlex" From 097b0896d93d2ddaefb907290cbedc1d106df388 Mon Sep 17 00:00:00 2001 From: stephann <3025661+stephannv@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:07:23 -0300 Subject: [PATCH 2/3] Add necessary require to components --- lib/ruby_ui/chart/chart.rb | 2 ++ lib/ruby_ui/clipboard/clipboard.rb | 2 ++ lib/ruby_ui/combobox/combobox_content.rb | 2 ++ lib/ruby_ui/context_menu/context_menu.rb | 2 ++ lib/ruby_ui/dropdown_menu/dropdown_menu.rb | 2 ++ lib/ruby_ui/hover_card/hover_card.rb | 2 ++ lib/ruby_ui/popover/popover.rb | 2 ++ lib/ruby_ui/select/select_content.rb | 2 ++ lib/ruby_ui/tooltip/tooltip_content.rb | 2 ++ test/test_helper.rb | 1 - 10 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/ruby_ui/chart/chart.rb b/lib/ruby_ui/chart/chart.rb index a13cb7f9..253a2386 100644 --- a/lib/ruby_ui/chart/chart.rb +++ b/lib/ruby_ui/chart/chart.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "json" + module RubyUI class Chart < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/clipboard/clipboard.rb b/lib/ruby_ui/clipboard/clipboard.rb index c8c924c3..1543c8d8 100644 --- a/lib/ruby_ui/clipboard/clipboard.rb +++ b/lib/ruby_ui/clipboard/clipboard.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "json" + module RubyUI class Clipboard < Base def initialize(options: {}, success: "Copied!", error: "Copy Failed!", **attrs) diff --git a/lib/ruby_ui/combobox/combobox_content.rb b/lib/ruby_ui/combobox/combobox_content.rb index 090083fa..e2d9a253 100644 --- a/lib/ruby_ui/combobox/combobox_content.rb +++ b/lib/ruby_ui/combobox/combobox_content.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "securerandom" + module RubyUI class ComboboxContent < Base def initialize(**attrs) diff --git a/lib/ruby_ui/context_menu/context_menu.rb b/lib/ruby_ui/context_menu/context_menu.rb index 9d8b61df..a2b6505c 100644 --- a/lib/ruby_ui/context_menu/context_menu.rb +++ b/lib/ruby_ui/context_menu/context_menu.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "json" + module RubyUI class ContextMenu < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/dropdown_menu/dropdown_menu.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu.rb index 0a7564ad..bac616ee 100644 --- a/lib/ruby_ui/dropdown_menu/dropdown_menu.rb +++ b/lib/ruby_ui/dropdown_menu/dropdown_menu.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "json" + module RubyUI class DropdownMenu < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/hover_card/hover_card.rb b/lib/ruby_ui/hover_card/hover_card.rb index f7c9caab..1cc3d2c0 100644 --- a/lib/ruby_ui/hover_card/hover_card.rb +++ b/lib/ruby_ui/hover_card/hover_card.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "json" + module RubyUI class HoverCard < Base def initialize(option: {}, **attrs) diff --git a/lib/ruby_ui/popover/popover.rb b/lib/ruby_ui/popover/popover.rb index 202471b2..82aeb62f 100644 --- a/lib/ruby_ui/popover/popover.rb +++ b/lib/ruby_ui/popover/popover.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "json" + module RubyUI class Popover < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/select/select_content.rb b/lib/ruby_ui/select/select_content.rb index 86b88a1a..143447af 100644 --- a/lib/ruby_ui/select/select_content.rb +++ b/lib/ruby_ui/select/select_content.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "securerandom" + module RubyUI class SelectContent < Base def initialize(**attrs) diff --git a/lib/ruby_ui/tooltip/tooltip_content.rb b/lib/ruby_ui/tooltip/tooltip_content.rb index ddeae4b0..f7f74fab 100644 --- a/lib/ruby_ui/tooltip/tooltip_content.rb +++ b/lib/ruby_ui/tooltip/tooltip_content.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "securerandom" + module RubyUI class TooltipContent < Base def initialize(**attrs) diff --git a/test/test_helper.rb b/test/test_helper.rb index 9fa3d6bd..941f957e 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,7 +3,6 @@ $LOAD_PATH.unshift File.expand_path("../lib", __dir__) require "ruby_ui" require "phlex" -require "json" require "minitest/autorun" From 88159bef56e56f187b13ccf3d1473e51d354c2a5 Mon Sep 17 00:00:00 2001 From: stephann <3025661+stephannv@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:12:43 -0300 Subject: [PATCH 3/3] Move JSON and SecureRandom requires to test helper --- lib/ruby_ui/chart/chart.rb | 2 -- lib/ruby_ui/clipboard/clipboard.rb | 2 -- lib/ruby_ui/combobox/combobox_content.rb | 2 -- lib/ruby_ui/combobox/combobox_list.rb | 2 -- lib/ruby_ui/context_menu/context_menu.rb | 2 -- lib/ruby_ui/dropdown_menu/dropdown_menu.rb | 2 -- lib/ruby_ui/hover_card/hover_card.rb | 2 -- lib/ruby_ui/popover/popover.rb | 2 -- lib/ruby_ui/select/select_content.rb | 2 -- lib/ruby_ui/tooltip/tooltip_content.rb | 2 -- test/test_helper.rb | 3 ++- 11 files changed, 2 insertions(+), 21 deletions(-) diff --git a/lib/ruby_ui/chart/chart.rb b/lib/ruby_ui/chart/chart.rb index 253a2386..a13cb7f9 100644 --- a/lib/ruby_ui/chart/chart.rb +++ b/lib/ruby_ui/chart/chart.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "json" - module RubyUI class Chart < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/clipboard/clipboard.rb b/lib/ruby_ui/clipboard/clipboard.rb index 1543c8d8..c8c924c3 100644 --- a/lib/ruby_ui/clipboard/clipboard.rb +++ b/lib/ruby_ui/clipboard/clipboard.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "json" - module RubyUI class Clipboard < Base def initialize(options: {}, success: "Copied!", error: "Copy Failed!", **attrs) diff --git a/lib/ruby_ui/combobox/combobox_content.rb b/lib/ruby_ui/combobox/combobox_content.rb index e2d9a253..090083fa 100644 --- a/lib/ruby_ui/combobox/combobox_content.rb +++ b/lib/ruby_ui/combobox/combobox_content.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "securerandom" - module RubyUI class ComboboxContent < Base def initialize(**attrs) diff --git a/lib/ruby_ui/combobox/combobox_list.rb b/lib/ruby_ui/combobox/combobox_list.rb index 278111f4..3770d043 100644 --- a/lib/ruby_ui/combobox/combobox_list.rb +++ b/lib/ruby_ui/combobox/combobox_list.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "securerandom" - module RubyUI class ComboboxList < Base def initialize(**attrs) diff --git a/lib/ruby_ui/context_menu/context_menu.rb b/lib/ruby_ui/context_menu/context_menu.rb index a2b6505c..9d8b61df 100644 --- a/lib/ruby_ui/context_menu/context_menu.rb +++ b/lib/ruby_ui/context_menu/context_menu.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "json" - module RubyUI class ContextMenu < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/dropdown_menu/dropdown_menu.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu.rb index bac616ee..0a7564ad 100644 --- a/lib/ruby_ui/dropdown_menu/dropdown_menu.rb +++ b/lib/ruby_ui/dropdown_menu/dropdown_menu.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "json" - module RubyUI class DropdownMenu < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/hover_card/hover_card.rb b/lib/ruby_ui/hover_card/hover_card.rb index 1cc3d2c0..f7c9caab 100644 --- a/lib/ruby_ui/hover_card/hover_card.rb +++ b/lib/ruby_ui/hover_card/hover_card.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "json" - module RubyUI class HoverCard < Base def initialize(option: {}, **attrs) diff --git a/lib/ruby_ui/popover/popover.rb b/lib/ruby_ui/popover/popover.rb index 82aeb62f..202471b2 100644 --- a/lib/ruby_ui/popover/popover.rb +++ b/lib/ruby_ui/popover/popover.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "json" - module RubyUI class Popover < Base def initialize(options: {}, **attrs) diff --git a/lib/ruby_ui/select/select_content.rb b/lib/ruby_ui/select/select_content.rb index 143447af..86b88a1a 100644 --- a/lib/ruby_ui/select/select_content.rb +++ b/lib/ruby_ui/select/select_content.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "securerandom" - module RubyUI class SelectContent < Base def initialize(**attrs) diff --git a/lib/ruby_ui/tooltip/tooltip_content.rb b/lib/ruby_ui/tooltip/tooltip_content.rb index f7f74fab..ddeae4b0 100644 --- a/lib/ruby_ui/tooltip/tooltip_content.rb +++ b/lib/ruby_ui/tooltip/tooltip_content.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "securerandom" - module RubyUI class TooltipContent < Base def initialize(**attrs) diff --git a/test/test_helper.rb b/test/test_helper.rb index 941f957e..06aa4c68 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,7 +3,8 @@ $LOAD_PATH.unshift File.expand_path("../lib", __dir__) require "ruby_ui" require "phlex" - +require "json" +require "securerandom" require "minitest/autorun" module RubyUI