diff --git a/lib/phlex.rb b/lib/phlex.rb index a87728f1..5d27a790 100644 --- a/lib/phlex.rb +++ b/lib/phlex.rb @@ -43,6 +43,36 @@ def self.eager_load end end end + + def self.html(&block) + HTML.call do |component| + receiver = block.binding.receiver + + receiver.instance_variables.each do |ivar| + next if component.instance_variable_defined?(ivar) + + value = receiver.instance_variable_get(ivar) + component.instance_variable_set(ivar, value) + end + + component.instance_exec(receiver, &block) + end + end + + def self.svg(&block) + SVG.call do |component| + receiver = block.binding.receiver + + receiver.instance_variables.each do |ivar| + next if component.instance_variable_defined?(ivar) + + value = receiver.instance_variable_get(ivar) + component.instance_variable_set(ivar, value) + end + + component.instance_exec(receiver, &block) + end + end end def 💪 diff --git a/quickdraw/inline.test.rb b/quickdraw/inline.test.rb new file mode 100644 index 00000000..5bbdd36d --- /dev/null +++ b/quickdraw/inline.test.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +test "inline html with no param" do + output = Phlex.html do + h1 { "Hi" } + end + + assert_equal_html output, <<~HTML.strip +