diff --git a/lib/phlex_ui.rb b/lib/phlex_ui.rb index 08d1571..3d386d3 100644 --- a/lib/phlex_ui.rb +++ b/lib/phlex_ui.rb @@ -9,9 +9,27 @@ loader.inflector.inflect( "phlex_ui" => "PhlexUI" ) -loader.setup # ready! +# loader.load("#{__dir__}/lib/pui.rb") + +loader.collapse("#{__dir__}/phlex_ui/accordion") +loader.setup # ready! module PhlexUI + extend Phlex::Kit + + autoload :Accordion, "phlex_ui/accordion" +end + +module Pui + def self.method_missing(...) + PhlexUI.public_send(...) + rescue NoMethodError + puts "Method #{method_name} is not defined in #{PhlexUI}" + end + + def self.respond_to_missing?(name, include_private = false) + PhlexUI.respond_to?(name, include_private) || super + end end loader.eager_load diff --git a/lib/phlex_ui/accordion/content.rb b/lib/phlex_ui/accordion/accordion_content.rb similarity index 89% rename from lib/phlex_ui/accordion/content.rb rename to lib/phlex_ui/accordion/accordion_content.rb index 7fcb3c1..24875d2 100644 --- a/lib/phlex_ui/accordion/content.rb +++ b/lib/phlex_ui/accordion/accordion_content.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module PhlexUI - class Accordion::Content < Base + class AccordionContent < Base def view_template(&) div(**attrs, &) end diff --git a/lib/phlex_ui/accordion/default_content.rb b/lib/phlex_ui/accordion/accordion_default_content.rb similarity index 83% rename from lib/phlex_ui/accordion/default_content.rb rename to lib/phlex_ui/accordion/accordion_default_content.rb index cbe0543..f091ed2 100644 --- a/lib/phlex_ui/accordion/default_content.rb +++ b/lib/phlex_ui/accordion/accordion_default_content.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module PhlexUI - class Accordion::DefaultContent < Base + class AccordionDefaultContent < Base def view_template(&) div(**attrs, &) end diff --git a/lib/phlex_ui/accordion/default_trigger.rb b/lib/phlex_ui/accordion/accordion_default_trigger.rb similarity index 82% rename from lib/phlex_ui/accordion/default_trigger.rb rename to lib/phlex_ui/accordion/accordion_default_trigger.rb index 9c91883..866b694 100644 --- a/lib/phlex_ui/accordion/default_trigger.rb +++ b/lib/phlex_ui/accordion/accordion_default_trigger.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true module PhlexUI - class Accordion::DefaultTrigger < Base + class AccordionDefaultTrigger < Base def view_template(&block) div(class: "flex items-center justify-between w-full") do p(&block) - render ::PhlexUI::Accordion::Icon.new + PhlexUI.AccordionIcon end end diff --git a/lib/phlex_ui/accordion/icon.rb b/lib/phlex_ui/accordion/accordion_icon.rb similarity index 96% rename from lib/phlex_ui/accordion/icon.rb rename to lib/phlex_ui/accordion/accordion_icon.rb index 6ce3656..1479ef1 100644 --- a/lib/phlex_ui/accordion/icon.rb +++ b/lib/phlex_ui/accordion/accordion_icon.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module PhlexUI - class Accordion::Icon < Base + class AccordionIcon < Base def view_template(&block) span(**attrs) do if block diff --git a/lib/phlex_ui/accordion/item.rb b/lib/phlex_ui/accordion/accordion_item.rb similarity index 94% rename from lib/phlex_ui/accordion/item.rb rename to lib/phlex_ui/accordion/accordion_item.rb index b9c06cc..412aa9a 100644 --- a/lib/phlex_ui/accordion/item.rb +++ b/lib/phlex_ui/accordion/accordion_item.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module PhlexUI - class Accordion::Item < Base + class AccordionItem < Base def initialize(open: false, rotate_icon: 180, **attrs) @open = open @rotate_icon = rotate_icon diff --git a/lib/phlex_ui/accordion/trigger.rb b/lib/phlex_ui/accordion/accordion_trigger.rb similarity index 90% rename from lib/phlex_ui/accordion/trigger.rb rename to lib/phlex_ui/accordion/accordion_trigger.rb index 7574a70..147d8e7 100644 --- a/lib/phlex_ui/accordion/trigger.rb +++ b/lib/phlex_ui/accordion/accordion_trigger.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module PhlexUI - class Accordion::Trigger < Base + class AccordionTrigger < Base def view_template(&) button(**attrs, &) end diff --git a/lib/phlex_ui/accordion/builder.rb b/lib/phlex_ui/accordion/builder.rb deleted file mode 100644 index 970c0b9..0000000 --- a/lib/phlex_ui/accordion/builder.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module PhlexUI - class Accordion::Builder < Base - def view_template(&block) - render PhlexUI::Accordion.new(**attrs) do - block.call - end - end - - def add_item(title, content, open: false) - render Accordion::Item.new(open: open) do - render PhlexUI::Accordion::Trigger.new do - render PhlexUI::Accordion::DefaultTrigger.new { title } - end - render PhlexUI::Accordion::Content.new do - render PhlexUI::Accordion::DefaultContent.new { content } - end - end - end - end -end diff --git a/test/phlex_ui/accordion/builder_test.rb b/test/phlex_ui/accordion/builder_test.rb deleted file mode 100644 index a0158ae..0000000 --- a/test/phlex_ui/accordion/builder_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PhlexUI::Accordion::BuilderTest < Minitest::Test - include Phlex::Testing::ViewHelper - - def test_render_with_default_attributes - output = render PhlexUI::Accordion::Builder.new { "test" } - - refute_empty(output) - end -end diff --git a/test/phlex_ui/accordion/content_test.rb b/test/phlex_ui/accordion/content_test.rb deleted file mode 100644 index e12cef5..0000000 --- a/test/phlex_ui/accordion/content_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PhlexUI::Accordion::ContentTest < Minitest::Test - include Phlex::Testing::ViewHelper - - def test_render_with_default_attributes - output = render PhlexUI::Accordion::Content.new - - refute_empty(output) - end -end diff --git a/test/phlex_ui/accordion/default_content_test.rb b/test/phlex_ui/accordion/default_content_test.rb deleted file mode 100644 index 3b78413..0000000 --- a/test/phlex_ui/accordion/default_content_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PhlexUI::Accordion::DefaultContentTest < Minitest::Test - include Phlex::Testing::ViewHelper - - def test_render_with_default_attributes - output = render PhlexUI::Accordion::DefaultContent.new - - refute_empty(output) - end -end diff --git a/test/phlex_ui/accordion/default_trigger_test.rb b/test/phlex_ui/accordion/default_trigger_test.rb deleted file mode 100644 index 7faea2c..0000000 --- a/test/phlex_ui/accordion/default_trigger_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PhlexUI::Accordion::DefaultTriggerTest < Minitest::Test - include Phlex::Testing::ViewHelper - - def test_render_with_default_attributes - output = render PhlexUI::Accordion::DefaultTrigger.new - - refute_empty(output) - end -end diff --git a/test/phlex_ui/accordion/icon_test.rb b/test/phlex_ui/accordion/icon_test.rb deleted file mode 100644 index 89b32fd..0000000 --- a/test/phlex_ui/accordion/icon_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PhlexUI::Accordion::IconTest < Minitest::Test - include Phlex::Testing::ViewHelper - - def test_render_with_default_attributes - output = render PhlexUI::Accordion::Icon.new - - refute_empty(output) - end -end diff --git a/test/phlex_ui/accordion/item_test.rb b/test/phlex_ui/accordion/item_test.rb deleted file mode 100644 index 7f67f8e..0000000 --- a/test/phlex_ui/accordion/item_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PhlexUI::Accordion::ItemTest < Minitest::Test - include Phlex::Testing::ViewHelper - - def test_render_with_default_attributes - output = render PhlexUI::Accordion::Item.new - - refute_empty(output) - end -end diff --git a/test/phlex_ui/accordion/trigger_test.rb b/test/phlex_ui/accordion/trigger_test.rb deleted file mode 100644 index 7747280..0000000 --- a/test/phlex_ui/accordion/trigger_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PhlexUI::Accordion::TriggerTest < Minitest::Test - include Phlex::Testing::ViewHelper - - def test_render_with_default_attributes - output = render PhlexUI::Accordion::Trigger.new - - refute_empty(output) - end -end diff --git a/test/phlex_ui/accordion_test.rb b/test/phlex_ui/accordion_test.rb index bdf89e3..9af8c9c 100644 --- a/test/phlex_ui/accordion_test.rb +++ b/test/phlex_ui/accordion_test.rb @@ -1,13 +1,40 @@ # frozen_string_literal: true require "test_helper" - class PhlexUI::AccordionTest < Minitest::Test include Phlex::Testing::ViewHelper - def test_render_with_default_attributes - output = render PhlexUI::Accordion.new + def test_render_accordion + output = phlex_context do + PhlexUI.Accordion + end + + assert_match(/div class="w-full">/, output) + end + + def test_render_default_accordion + output = phlex_context do + PhlexUI.Accordion do + PhlexUI.AccordionItem do + PhlexUI.AccordionDefaultTrigger { "Title" } + PhlexUI.AccordionDefaultContent { "Content" } + end + end + end + + assert_match(/
/, output) end end diff --git a/test/test_context.rb b/test/test_context.rb new file mode 100644 index 0000000..7bda87b --- /dev/null +++ b/test/test_context.rb @@ -0,0 +1,5 @@ +class TestContext < Phlex::HTML + def view_template(&) + div(&) + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 5d0d89b..9081e0b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -5,3 +5,14 @@ require "phlex/testing/view_helper" require "minitest/autorun" + +class TestContext < Phlex::HTML + def view_template(&) + div(&) + end +end + +def phlex_context(&) + render TestContext.new, & + # puts "PhlexUI::Component.render(context, &block)" +end