diff --git a/lib/tabs_on_rails/tabs.rb b/lib/tabs_on_rails/tabs.rb index a0d53fc..33e8e88 100644 --- a/lib/tabs_on_rails/tabs.rb +++ b/lib/tabs_on_rails/tabs.rb @@ -38,8 +38,8 @@ def initialize(context, options = {}) end # end end - def method_missing(*args) - @builder.tab_for(*args) + def method_missing(*args, &block) + @builder.tab_for(*args, &block) end def render(&block) diff --git a/test/tabs_on_rails/tabs/custom_builder_test.rb b/test/tabs_on_rails/tabs/custom_builder_test.rb new file mode 100644 index 0000000..121b341 --- /dev/null +++ b/test/tabs_on_rails/tabs/custom_builder_test.rb @@ -0,0 +1,42 @@ +require 'test_helper' + +class CustomBuilderTest < ActionView::TestCase + tests TabsOnRails::ActionController::HelperMethods + + include ActionView::Helpers::TagHelper + include ActionView::Helpers::UrlHelper + + def current_tab(namespace) + case namespace + when nil, :default + :dashboard + when :foospace + :footab + else + :elsetab + end + end + + class CustomBuilder < TabsOnRails::Tabs::TabsBuilder + def tab_for(tab, name, options, item_options = {}, &block) + item_options[:class] = item_options[:class].to_s.split(" ").push("current").join(" ") if current_tab?(tab) + content = @context.link_to(name, options) + content += @context.capture(&block) if block_given? + @context.content_tag(:li, content, item_options) + end + end + + def setup + @klass = CustomBuilder + @builder = @klass.new(self) + end + + def test_tab_for_with_block + expected = %Q{
  • Foo Bar

    More Content

  • } + actual = @builder.tab_for(:dashboard, 'Foo Bar', 'http://dashboard.com/') do + content_tag(:p, "More Content") + end + + assert_dom_equal expected, actual + end +end