forme 1.9.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG +70 -0
 - data/MIT-LICENSE +1 -1
 - data/README.rdoc +396 -202
 - data/lib/forme/bs3.rb +19 -5
 - data/lib/forme/erb.rb +18 -16
 - data/lib/forme/form.rb +151 -118
 - data/lib/forme/input.rb +1 -1
 - data/lib/forme/rails.rb +41 -72
 - data/lib/forme/raw.rb +2 -2
 - data/lib/forme/sinatra.rb +6 -2
 - data/lib/forme/tag.rb +3 -12
 - data/lib/forme/template.rb +118 -0
 - data/lib/forme/transformers/error_handler.rb +46 -1
 - data/lib/forme/transformers/formatter.rb +36 -35
 - data/lib/forme/transformers/helper.rb +0 -1
 - data/lib/forme/transformers/inputs_wrapper.rb +6 -6
 - data/lib/forme/transformers/labeler.rb +19 -0
 - data/lib/forme/transformers/wrapper.rb +1 -1
 - data/lib/forme/version.rb +2 -2
 - data/lib/forme.rb +15 -2
 - data/lib/roda/plugins/forme.rb +1 -1
 - data/lib/roda/plugins/forme_erubi_capture.rb +62 -0
 - data/lib/roda/plugins/forme_route_csrf.rb +16 -20
 - data/lib/roda/plugins/forme_set.rb +177 -0
 - data/lib/sequel/plugins/forme.rb +42 -55
 - data/lib/sequel/plugins/forme_i18n.rb +3 -1
 - data/lib/sequel/plugins/forme_set.rb +50 -28
 - data/spec/all.rb +1 -1
 - data/spec/bs3_reference_spec.rb +18 -18
 - data/spec/bs3_sequel_plugin_spec.rb +7 -7
 - data/spec/bs3_spec.rb +23 -11
 - data/spec/erb_helper.rb +73 -58
 - data/spec/erubi_capture_helper.rb +202 -0
 - data/spec/forme_spec.rb +80 -29
 - data/spec/rails_integration_spec.rb +47 -24
 - data/spec/roda_integration_spec.rb +459 -48
 - data/spec/sequel_helper.rb +0 -1
 - data/spec/sequel_i18n_helper.rb +1 -1
 - data/spec/sequel_i18n_plugin_spec.rb +3 -2
 - data/spec/sequel_plugin_spec.rb +25 -8
 - data/spec/sequel_set_plugin_spec.rb +10 -3
 - data/spec/shared_erb_specs.rb +75 -0
 - data/spec/sinatra_integration_spec.rb +5 -6
 - data/spec/spec_helper.rb +23 -5
 - metadata +30 -8
 - data/lib/forme/erb_form.rb +0 -74
 
    
        data/spec/forme_spec.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require_relative 'spec_helper'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe "Forme plain forms" do
         
     | 
| 
       4 
4 
     | 
    
         
             
              def sel(opts, s)
         
     | 
| 
         @@ -116,13 +116,13 @@ describe "Forme plain forms" do 
     | 
|
| 
       116 
116 
     | 
    
         | 
| 
       117 
117 
     | 
    
         
             
              it "should consider form's :errors hash based on the :key option" do
         
     | 
| 
       118 
118 
     | 
    
         
             
                @f.opts[:errors] = { 'foo' => 'must be present' }
         
     | 
| 
       119 
     | 
    
         
            -
                @f.input(:text, :key=>"foo").to_s.must_equal "<input class=\"error\" id=\"foo\" name=\"foo\" type=\"text\"/><span class=\"error_message\">must be present</span>"
         
     | 
| 
      
 119 
     | 
    
         
            +
                @f.input(:text, :key=>"foo").to_s.must_equal "<input aria-describedby=\"foo_error_message\" aria-invalid=\"true\" class=\"error\" id=\"foo\" name=\"foo\" type=\"text\"/><span class=\"error_message\" id=\"foo_error_message\">must be present</span>"
         
     | 
| 
       120 
120 
     | 
    
         
             
              end
         
     | 
| 
       121 
121 
     | 
    
         | 
| 
       122 
122 
     | 
    
         
             
              it "should consider form's :errors hash based on the :key option when using namespaces" do
         
     | 
| 
       123 
123 
     | 
    
         
             
                @f.opts[:errors] = { 'bar' => { 'foo' => 'must be present' } }
         
     | 
| 
       124 
124 
     | 
    
         
             
                @f.with_opts(:namespace=>['bar']) do
         
     | 
| 
       125 
     | 
    
         
            -
                  @f.input(:text, :key=>"foo").to_s.must_equal "<input class=\"error\" id=\"bar_foo\" name=\"bar[foo]\" type=\"text\"/><span class=\"error_message\">must be present</span>"
         
     | 
| 
      
 125 
     | 
    
         
            +
                  @f.input(:text, :key=>"foo").to_s.must_equal "<input aria-describedby=\"bar_foo_error_message\" aria-invalid=\"true\" class=\"error\" id=\"bar_foo\" name=\"bar[foo]\" type=\"text\"/><span class=\"error_message\" id=\"bar_foo_error_message\">must be present</span>"
         
     | 
| 
       126 
126 
     | 
    
         
             
                end
         
     | 
| 
       127 
127 
     | 
    
         
             
              end
         
     | 
| 
       128 
128 
     | 
    
         | 
| 
         @@ -301,6 +301,10 @@ describe "Forme plain forms" do 
     | 
|
| 
       301 
301 
     | 
    
         
             
                @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5)).to_s.must_equal %{<select id="bar" name="foo[year]">#{sel(1900..2050, 2011)}</select>-<select id="bar_month" name="foo[month]">#{sel(1..12, 6)}</select>-<select id="bar_day" name="foo[day]">#{sel(1..31, 5)}</select>}
         
     | 
| 
       302 
302 
     | 
    
         
             
              end
         
     | 
| 
       303 
303 
     | 
    
         | 
| 
      
 304 
     | 
    
         
            +
              it "should use labels for select boxes for dates if the :as=>:select and :select_labels options are given" do
         
     | 
| 
      
 305 
     | 
    
         
            +
                @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5), :select_labels=>{:year=>'Y', :month=>'M', :day=>'D'}, :labeler=>:explicit).to_s.must_equal %{<label class="label-before" for="bar">Y</label><select id="bar" name="foo[year]">#{sel(1900..2050, 2011)}</select>-<label class="label-before" for="bar_month">M</label><select id="bar_month" name="foo[month]">#{sel(1..12, 6)}</select>-<label class="label-before" for="bar_day">D</label><select id="bar_day" name="foo[day]">#{sel(1..31, 5)}</select>}
         
     | 
| 
      
 306 
     | 
    
         
            +
              end
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
       304 
308 
     | 
    
         
             
              it "should allow ordering date select boxes via :order" do
         
     | 
| 
       305 
309 
     | 
    
         
             
                @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5), :order=>[:month, '/', :day, '/', :year]).to_s.must_equal %{<select id="bar" name="foo[month]">#{sel(1..12, 6)}</select>/<select id="bar_day" name="foo[day]">#{sel(1..31, 5)}</select>/<select id="bar_year" name="foo[year]">#{sel(1900..2050, 2011)}</select>}
         
     | 
| 
       306 
310 
     | 
    
         
             
              end
         
     | 
| 
         @@ -313,6 +317,10 @@ describe "Forme plain forms" do 
     | 
|
| 
       313 
317 
     | 
    
         
             
                @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5), :select_options=>{:year=>1970..2020}).to_s.must_equal %{<select id="bar" name="foo[year]">#{sel(1970..2020, 2011)}</select>-<select id="bar_month" name="foo[month]">#{sel(1..12, 6)}</select>-<select id="bar_day" name="foo[day]">#{sel(1..31, 5)}</select>}
         
     | 
| 
       314 
318 
     | 
    
         
             
              end
         
     | 
| 
       315 
319 
     | 
    
         | 
| 
      
 320 
     | 
    
         
            +
              it "should support :select_options with both values and text for dates when :as=>:select is given" do
         
     | 
| 
      
 321 
     | 
    
         
            +
                @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5), :select_options=>{:year=>[[2011, 'A'], [2012, 'B']]}).to_s.must_equal %{<select id="bar" name="foo[year]"><option selected="selected" value="2011">A</option><option value="2012">B</option></select>-<select id="bar_month" name="foo[month]">#{sel(1..12, 6)}</select>-<select id="bar_day" name="foo[day]">#{sel(1..31, 5)}</select>}
         
     | 
| 
      
 322 
     | 
    
         
            +
              end
         
     | 
| 
      
 323 
     | 
    
         
            +
             
     | 
| 
       316 
324 
     | 
    
         
             
              it "should have explicit labeler and trtd wrapper work with multiple select boxes for dates" do
         
     | 
| 
       317 
325 
     | 
    
         
             
                @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5), :wrapper=>:trtd, :labeler=>:explicit, :label=>'Baz').to_s.must_equal %{<tr><td><label class="label-before" for="bar">Baz</label></td><td><select id="bar" name="foo[year]">#{sel(1900..2050, 2011)}</select>-<select id="bar_month" name="foo[month]">#{sel(1..12, 6)}</select>-<select id="bar_day" name="foo[day]">#{sel(1..31, 5)}</select></td></tr>}
         
     | 
| 
       318 
326 
     | 
    
         
             
              end
         
     | 
| 
         @@ -433,7 +441,11 @@ describe "Forme plain forms" do 
     | 
|
| 
       433 
441 
     | 
    
         
             
              end
         
     | 
| 
       434 
442 
     | 
    
         | 
| 
       435 
443 
     | 
    
         
             
              it "should create set of radio buttons with :error and :error_attr options" do
         
     | 
| 
       436 
     | 
    
         
            -
                @f.input(:radioset, :options=>[1, 2, 3], :selected=>2, :error=>'foo', :error_attr=>{'bar'=>'baz'}).to_s.must_equal '<label class="option"><input type="radio" value="1"/> 1</label><label class="option"><input checked="checked" type="radio" value="2"/> 2</label><label class="option"><input class="error" type="radio" value="3"/> 3</label><span bar="baz" class="error_message">foo</span>'
         
     | 
| 
      
 444 
     | 
    
         
            +
                @f.input(:radioset, :options=>[1, 2, 3], :selected=>2, :error=>'foo', :error_attr=>{'bar'=>'baz'}).to_s.must_equal '<label class="option"><input type="radio" value="1"/> 1</label><label class="option"><input checked="checked" type="radio" value="2"/> 2</label><label class="option"><input aria-invalid="true" class="error" type="radio" value="3"/> 3</label><span bar="baz" class="error_message">foo</span>'
         
     | 
| 
      
 445 
     | 
    
         
            +
              end
         
     | 
| 
      
 446 
     | 
    
         
            +
             
     | 
| 
      
 447 
     | 
    
         
            +
              it "should support custom error_handler for set of radio buttons" do
         
     | 
| 
      
 448 
     | 
    
         
            +
                @f.input(:radioset, :options=>[1, 2, 3], :selected=>2, :error=>'foo', :error_attr=>{'bar'=>'baz'}, :error_handler=>lambda{|tag, input| input.tag(:div, {}, tag)}).to_s.must_equal '<div><label class="option"><input type="radio" value="1"/> 1</label><label class="option"><input checked="checked" type="radio" value="2"/> 2</label><label class="option"><input type="radio" value="3"/> 3</label></div>'
         
     | 
| 
       437 
449 
     | 
    
         
             
              end
         
     | 
| 
       438 
450 
     | 
    
         | 
| 
       439 
451 
     | 
    
         
             
              it "should create set of checkbox buttons" do
         
     | 
| 
         @@ -457,10 +469,26 @@ describe "Forme plain forms" do 
     | 
|
| 
       457 
469 
     | 
    
         
             
                @f.input(:checkboxset, :options=>[[:a, 1], [:b, 2], [:c, 3]], :label=>'foo').to_s.must_equal '<span class="label">foo</span><label class="option"><input type="checkbox" value="1"/> a</label><label class="option"><input type="checkbox" value="2"/> b</label><label class="option"><input type="checkbox" value="3"/> c</label>'
         
     | 
| 
       458 
470 
     | 
    
         
             
              end
         
     | 
| 
       459 
471 
     | 
    
         | 
| 
      
 472 
     | 
    
         
            +
              it "should support fieldset/legend for checkboxsets" do
         
     | 
| 
      
 473 
     | 
    
         
            +
                @f.input(:checkboxset, :options=>[[:a, 1], [:b, 2], [:c, 3]], :label=>'foo', :labeler=>:legend, :wrapper=>:fieldset).to_s.must_equal '<fieldset><legend>foo</legend><label class="option"><input type="checkbox" value="1"/> a</label><label class="option"><input type="checkbox" value="2"/> b</label><label class="option"><input type="checkbox" value="3"/> c</label></fieldset>'
         
     | 
| 
      
 474 
     | 
    
         
            +
              end
         
     | 
| 
      
 475 
     | 
    
         
            +
             
     | 
| 
      
 476 
     | 
    
         
            +
              it "should support legend with attributes for checkboxsets" do
         
     | 
| 
      
 477 
     | 
    
         
            +
                @f.input(:checkboxset, :options=>[[:a, 1], [:b, 2], [:c, 3]], :label=>'foo', :label_attr=>{:class=>"baz"}, :tag_label_attr=>{:class=>"bar"}, :labeler=>:legend, :wrapper=>:fieldset).to_s.must_equal '<fieldset><legend class="baz">foo</legend><label class="bar"><input type="checkbox" value="1"/> a</label><label class="bar"><input type="checkbox" value="2"/> b</label><label class="bar"><input type="checkbox" value="3"/> c</label></fieldset>'
         
     | 
| 
      
 478 
     | 
    
         
            +
              end
         
     | 
| 
      
 479 
     | 
    
         
            +
             
     | 
| 
      
 480 
     | 
    
         
            +
              it "should support legend with attributes for checkboxsets, handling errors with :error_handler=>:after_legend" do
         
     | 
| 
      
 481 
     | 
    
         
            +
                @f.input(:checkboxset, :options=>[[:a, 1], [:b, 2], [:c, 3]], :id=>:quux, :label=>'foo', :label_attr=>{:class=>"baz"}, :tag_label_attr=>{:class=>"bar"}, :labeler=>:legend, :wrapper=>:fieldset, :error=>'bar2', :error_handler=>:after_legend).to_s.must_equal '<fieldset><legend class="baz">foo</legend><span class="error_message" id="quux_1_error_message">bar2</span><label class="bar"><input aria-describedby="quux_1_error_message" aria-invalid="true" class="error" id="quux_1" type="checkbox" value="1"/> a</label><label class="bar"><input id="quux_2" type="checkbox" value="2"/> b</label><label class="bar"><input id="quux_3" type="checkbox" value="3"/> c</label></fieldset>'
         
     | 
| 
      
 482 
     | 
    
         
            +
              end
         
     | 
| 
      
 483 
     | 
    
         
            +
             
     | 
| 
       460 
484 
     | 
    
         
             
              it "should support :tag_labeler for checkboxsets" do
         
     | 
| 
       461 
485 
     | 
    
         
             
                @f.input(:checkboxset, :options=>[[:a, 1], [:b, 2], [:c, 3]], :tag_labeler=>:explicit).to_s.must_equal '<input type="checkbox" value="1"/><label class="option label-after">a</label><input type="checkbox" value="2"/><label class="option label-after">b</label><input type="checkbox" value="3"/><label class="option label-after">c</label>'
         
     | 
| 
       462 
486 
     | 
    
         
             
              end
         
     | 
| 
       463 
487 
     | 
    
         | 
| 
      
 488 
     | 
    
         
            +
              it "should support custom :labeler for checkboxsets" do
         
     | 
| 
      
 489 
     | 
    
         
            +
                @f.input(:checkboxset, :options=>[[:a, 1], [:b, 2], [:c, 3]], :label=>'foo', :labeler=>lambda{|tag, input| input.tag(:div, {}, tag)}).to_s.must_equal '<div><label class="option"><input type="checkbox" value="1"/> a</label><label class="option"><input type="checkbox" value="2"/> b</label><label class="option"><input type="checkbox" value="3"/> c</label></div>'
         
     | 
| 
      
 490 
     | 
    
         
            +
              end
         
     | 
| 
      
 491 
     | 
    
         
            +
             
     | 
| 
       464 
492 
     | 
    
         
             
              it "should create set of checkbox buttons with options and values with hashes" do
         
     | 
| 
       465 
493 
     | 
    
         
             
                @f.input(:checkboxset, :options=>[[:a, {:attr=>{:foo=>1}}], [:b, {:class=>'foo', :value=>2}], [:c, {:id=>:baz}]], :selected=>2).to_s.must_equal '<label class="option"><input foo="1" type="checkbox" value="a"/> a</label><label class="option"><input checked="checked" class="foo" type="checkbox" value="2"/> b</label><label class="option"><input id="baz" type="checkbox" value="c"/> c</label>'
         
     | 
| 
       466 
494 
     | 
    
         
             
              end
         
     | 
| 
         @@ -491,7 +519,7 @@ describe "Forme plain forms" do 
     | 
|
| 
       491 
519 
     | 
    
         
             
              end
         
     | 
| 
       492 
520 
     | 
    
         | 
| 
       493 
521 
     | 
    
         
             
              it "should respect the :error option for checkbox sets" do
         
     | 
| 
       494 
     | 
    
         
            -
                @f.input(:checkboxset, :options=>[1, 2, 3], :error=>'foo', :value=>2).to_s.must_equal '<label class="option"><input type="checkbox" value="1"/> 1</label><label class="option"><input checked="checked" type="checkbox" value="2"/> 2</label><label class="option"><input class="error" type="checkbox" value="3"/> 3</label><span class="error_message">foo</span>'
         
     | 
| 
      
 522 
     | 
    
         
            +
                @f.input(:checkboxset, :options=>[1, 2, 3], :error=>'foo', :value=>2).to_s.must_equal '<label class="option"><input type="checkbox" value="1"/> 1</label><label class="option"><input checked="checked" type="checkbox" value="2"/> 2</label><label class="option"><input aria-invalid="true" class="error" type="checkbox" value="3"/> 3</label><span class="error_message">foo</span>'
         
     | 
| 
       495 
523 
     | 
    
         
             
              end
         
     | 
| 
       496 
524 
     | 
    
         | 
| 
       497 
525 
     | 
    
         
             
              it "should create set of checkbox buttons with fieldsets and legends for optgroups" do
         
     | 
| 
         @@ -558,19 +586,23 @@ describe "Forme plain forms" do 
     | 
|
| 
       558 
586 
     | 
    
         
             
              end
         
     | 
| 
       559 
587 
     | 
    
         | 
| 
       560 
588 
     | 
    
         
             
              it "should automatically note the input has errors if :error option is used" do
         
     | 
| 
       561 
     | 
    
         
            -
                @f.input(:text, :error=>'Bad Stuff!', :value=>'foo').to_s.must_equal '<input class="error" type="text" value="foo"/><span class="error_message">Bad Stuff!</span>'
         
     | 
| 
      
 589 
     | 
    
         
            +
                @f.input(:text, :error=>'Bad Stuff!', :value=>'foo').to_s.must_equal '<input aria-invalid="true" class="error" type="text" value="foo"/><span class="error_message">Bad Stuff!</span>'
         
     | 
| 
       562 
590 
     | 
    
         
             
              end
         
     | 
| 
       563 
591 
     | 
    
         | 
| 
       564 
592 
     | 
    
         
             
              it "should add an error message after the label" do
         
     | 
| 
       565 
     | 
    
         
            -
                @f.input(:text, :error=>'Bad Stuff!', :value=>'foo', :label=>"Foo").to_s.must_equal '<label>Foo: <input class="error" type="text" value="foo"/></label><span class="error_message">Bad Stuff!</span>'
         
     | 
| 
      
 593 
     | 
    
         
            +
                @f.input(:text, :error=>'Bad Stuff!', :value=>'foo', :label=>"Foo").to_s.must_equal '<label>Foo: <input aria-invalid="true" class="error" type="text" value="foo"/></label><span class="error_message">Bad Stuff!</span>'
         
     | 
| 
       566 
594 
     | 
    
         
             
              end
         
     | 
| 
       567 
595 
     | 
    
         | 
| 
       568 
596 
     | 
    
         
             
              it "should add to existing :class option if :error option is used" do
         
     | 
| 
       569 
     | 
    
         
            -
                @f.input(:text, :error=>'Bad Stuff!', :class=>'bar', :value=>'foo').to_s.must_equal '<input class="bar error" type="text" value="foo"/><span class="error_message">Bad Stuff!</span>'
         
     | 
| 
      
 597 
     | 
    
         
            +
                @f.input(:text, :error=>'Bad Stuff!', :class=>'bar', :value=>'foo').to_s.must_equal '<input aria-invalid="true" class="bar error" type="text" value="foo"/><span class="error_message">Bad Stuff!</span>'
         
     | 
| 
       570 
598 
     | 
    
         
             
              end
         
     | 
| 
       571 
599 
     | 
    
         | 
| 
       572 
600 
     | 
    
         
             
              it "should respect :error_attr option for setting the attributes for the error message span" do
         
     | 
| 
       573 
     | 
    
         
            -
                @f.input(:text, :error=>'Bad Stuff!', :value=>'foo', :error_attr=>{:class=>'foo'}).to_s.must_equal '<input class="error" type="text" value="foo"/><span class="foo error_message">Bad Stuff!</span>'
         
     | 
| 
      
 601 
     | 
    
         
            +
                @f.input(:text, :error=>'Bad Stuff!', :value=>'foo', :error_attr=>{:class=>'foo'}).to_s.must_equal '<input aria-invalid="true" class="error" type="text" value="foo"/><span class="foo error_message">Bad Stuff!</span>'
         
     | 
| 
      
 602 
     | 
    
         
            +
              end
         
     | 
| 
      
 603 
     | 
    
         
            +
             
     | 
| 
      
 604 
     | 
    
         
            +
              it "should use aria-describedby and aria-invalid tags for errors with where the id attribute can be determined" do
         
     | 
| 
      
 605 
     | 
    
         
            +
                @f.input(:text, :error=>'Bad Stuff!', :id=>:bar, :value=>'foo', :error_attr=>{:class=>'foo'}).to_s.must_equal '<input aria-describedby="bar_error_message" aria-invalid="true" class="error" id="bar" type="text" value="foo"/><span class="foo error_message" id="bar_error_message">Bad Stuff!</span>'
         
     | 
| 
       574 
606 
     | 
    
         
             
              end
         
     | 
| 
       575 
607 
     | 
    
         | 
| 
       576 
608 
     | 
    
         
             
              it "#open should return an opening tag" do
         
     | 
| 
         @@ -599,13 +631,19 @@ describe "Forme plain forms" do 
     | 
|
| 
       599 
631 
     | 
    
         
             
                @f.tag(:textarea, {:name=>:foo}, :bar).to_s.must_equal '<textarea name="foo">bar</textarea>'
         
     | 
| 
       600 
632 
     | 
    
         
             
              end
         
     | 
| 
       601 
633 
     | 
    
         | 
| 
      
 634 
     | 
    
         
            +
              it "#tag should accept a block" do
         
     | 
| 
      
 635 
     | 
    
         
            +
                @f.tag(:div){@f.tag(:textarea)}.to_s.must_equal '<div><textarea></textarea></div>'
         
     | 
| 
      
 636 
     | 
    
         
            +
                @f.tag(:div, :name=>'a'){@f.tag(:textarea)}.to_s.must_equal '<div name="a"><textarea></textarea></div>'
         
     | 
| 
      
 637 
     | 
    
         
            +
                @f.tag(:div, {:name=>'a'}, ["text"]){@f.tag(:textarea)}.to_s.must_equal '<div name="a">text<textarea></textarea></div>'
         
     | 
| 
      
 638 
     | 
    
         
            +
              end
         
     | 
| 
      
 639 
     | 
    
         
            +
             
     | 
| 
       602 
640 
     | 
    
         
             
              it "#tag should accept children as procs" do
         
     | 
| 
       603 
     | 
    
         
            -
                @f.tag(:div, {:class=>"foo"}, lambda{|t| t. 
     | 
| 
      
 641 
     | 
    
         
            +
                @f.tag(:div, {:class=>"foo"}, lambda{|t| t.tag(:input, :class=>t.attr[:class])}).to_s.must_equal '<div class="foo"><input class="foo"/></div>'
         
     | 
| 
       604 
642 
     | 
    
         
             
              end
         
     | 
| 
       605 
643 
     | 
    
         | 
| 
       606 
644 
     | 
    
         
             
              it "#tag should accept children as methods" do
         
     | 
| 
       607 
645 
     | 
    
         
             
                o = Object.new
         
     | 
| 
       608 
     | 
    
         
            -
                def o.foo(t) t. 
     | 
| 
      
 646 
     | 
    
         
            +
                def o.foo(t) t.tag(:input, :class=>t.attr[:class]) end
         
     | 
| 
       609 
647 
     | 
    
         
             
                @f.tag(:div, {:class=>"foo"}, o.method(:foo)).to_s.must_equal '<div class="foo"><input class="foo"/></div>'
         
     | 
| 
       610 
648 
     | 
    
         
             
              end
         
     | 
| 
       611 
649 
     | 
    
         | 
| 
         @@ -613,6 +651,10 @@ describe "Forme plain forms" do 
     | 
|
| 
       613 
651 
     | 
    
         
             
                @f.inputs([:textarea, :text]).to_s.must_equal '<fieldset class="inputs"><textarea></textarea><input type="text"/></fieldset>'
         
     | 
| 
       614 
652 
     | 
    
         
             
              end
         
     | 
| 
       615 
653 
     | 
    
         | 
| 
      
 654 
     | 
    
         
            +
              it "should have an #inputs method for multiple inputs wrapped in a fieldset when using an empty block" do
         
     | 
| 
      
 655 
     | 
    
         
            +
                @f.inputs([:textarea, :text]){}.to_s.must_equal '<fieldset class="inputs"><textarea></textarea><input type="text"/></fieldset>'
         
     | 
| 
      
 656 
     | 
    
         
            +
              end
         
     | 
| 
      
 657 
     | 
    
         
            +
             
     | 
| 
       616 
658 
     | 
    
         
             
              it "should have default #inputs method accept an :attr option" do
         
     | 
| 
       617 
659 
     | 
    
         
             
                @f.inputs([:textarea, :text], :legend=>'Inputs', :attr=>{:class=>'foo', :bar=>'baz'}).to_s.must_equal '<fieldset bar="baz" class="foo inputs"><legend>Inputs</legend><textarea></textarea><input type="text"/></fieldset>'
         
     | 
| 
       618 
660 
     | 
    
         
             
              end
         
     | 
| 
         @@ -696,7 +738,7 @@ describe "Forme plain forms" do 
     | 
|
| 
       696 
738 
     | 
    
         
             
              end
         
     | 
| 
       697 
739 
     | 
    
         | 
| 
       698 
740 
     | 
    
         
             
              it "inputs should have helper displayed inside wrapper, after error" do
         
     | 
| 
       699 
     | 
    
         
            -
                @f.input(:text, :help=>"List type of foo", :error=>'bad', :wrapper=>:li).to_s.must_equal '<li><input class="error" type="text"/><span class="error_message">bad</span><span class="helper">List type of foo</span></li>'
         
     | 
| 
      
 741 
     | 
    
         
            +
                @f.input(:text, :help=>"List type of foo", :error=>'bad', :wrapper=>:li).to_s.must_equal '<li><input aria-invalid="true" class="error" type="text"/><span class="error_message">bad</span><span class="helper">List type of foo</span></li>'
         
     | 
| 
       700 
742 
     | 
    
         
             
              end
         
     | 
| 
       701 
743 
     | 
    
         | 
| 
       702 
744 
     | 
    
         
             
              it "inputs should accept a :formatter option to use a custom formatter" do
         
     | 
| 
         @@ -729,7 +771,7 @@ describe "Forme plain forms" do 
     | 
|
| 
       729 
771 
     | 
    
         
             
              end
         
     | 
| 
       730 
772 
     | 
    
         | 
| 
       731 
773 
     | 
    
         
             
              it "inputs should accept a :error_handler option to use a custom error_handler" do
         
     | 
| 
       732 
     | 
    
         
            -
                @f.input(:textarea, :error_handler=>proc{|t, i| [t, "!!! #{i.opts[:error]}"]}, :error=>'bar', :id=>:foo).to_s.must_equal '<textarea class="error" id="foo"></textarea>!!! bar'
         
     | 
| 
      
 774 
     | 
    
         
            +
                @f.input(:textarea, :error_handler=>proc{|t, i| [t, "!!! #{i.opts[:error]}"]}, :error=>'bar', :id=>:foo).to_s.must_equal '<textarea aria-describedby="foo_error_message" aria-invalid="true" class="error" id="foo"></textarea>!!! bar'
         
     | 
| 
       733 
775 
     | 
    
         
             
              end
         
     | 
| 
       734 
776 
     | 
    
         | 
| 
       735 
777 
     | 
    
         
             
              it "#inputs should accept a :inputs_wrapper option to use a custom inputs_wrapper" do
         
     | 
| 
         @@ -745,7 +787,7 @@ describe "Forme plain forms" do 
     | 
|
| 
       745 
787 
     | 
    
         
             
              end
         
     | 
| 
       746 
788 
     | 
    
         | 
| 
       747 
789 
     | 
    
         
             
              it "inputs should accept a :error_handler=>nil option to not use an error_handler" do
         
     | 
| 
       748 
     | 
    
         
            -
                @f.input(:textarea, :error_handler=>nil, :error=>'bar', :id=>:foo).to_s.must_equal '<textarea class="error" id="foo"></textarea>'
         
     | 
| 
      
 790 
     | 
    
         
            +
                @f.input(:textarea, :error_handler=>nil, :error=>'bar', :id=>:foo).to_s.must_equal '<textarea aria-invalid="true" class="error" id="foo"></textarea>'
         
     | 
| 
       749 
791 
     | 
    
         
             
              end
         
     | 
| 
       750 
792 
     | 
    
         | 
| 
       751 
793 
     | 
    
         
             
              it "#inputs should accept a :inputs_wrapper=>nil option to not use an inputs_wrapper" do
         
     | 
| 
         @@ -773,41 +815,45 @@ describe "Forme plain forms" do 
     | 
|
| 
       773 
815 
     | 
    
         
             
                proc{@f.input(:textarea, :wrapper=>Object.new).to_s}.must_raise(Forme::Error)
         
     | 
| 
       774 
816 
     | 
    
         
             
                proc{@f.input(:textarea, :formatter=>nil).to_s}.must_raise(Forme::Error)
         
     | 
| 
       775 
817 
     | 
    
         
             
              end
         
     | 
| 
       776 
     | 
    
         
            -
            end
         
     | 
| 
       777 
818 
     | 
    
         | 
| 
       778 
     | 
    
         
            -
             
     | 
| 
       779 
     | 
    
         
            -
             
     | 
| 
       780 
     | 
    
         
            -
                @f = Forme::Form.new
         
     | 
| 
      
 819 
     | 
    
         
            +
              it "should handle :before and :after hook options" do
         
     | 
| 
      
 820 
     | 
    
         
            +
                Forme.form({}, :before=>lambda{|f| f.tag(:input, :type=>:hidden, :name=>:a, :value=>'b')}, :after=>lambda{|f| f.tag(:input, :type=>:hidden, :name=>:c, :value=>'d')}){|f| f.tag(:input)}.to_s.must_equal '<form><input name="a" type="hidden" value="b"/><input/><input name="c" type="hidden" value="d"/></form>'
         
     | 
| 
       781 
821 
     | 
    
         
             
              end
         
     | 
| 
      
 822 
     | 
    
         
            +
            end
         
     | 
| 
       782 
823 
     | 
    
         | 
| 
       783 
     | 
    
         
            -
             
     | 
| 
      
 824 
     | 
    
         
            +
            describe "Forme::Form :hidden_tags option " do
         
     | 
| 
      
 825 
     | 
    
         
            +
              silence_warnings "should handle hash" do
         
     | 
| 
       784 
826 
     | 
    
         
             
                Forme.form({}, :hidden_tags=>[{:a=>'b'}]).to_s.must_equal '<form><input name="a" type="hidden" value="b"/></form>'
         
     | 
| 
       785 
827 
     | 
    
         
             
              end
         
     | 
| 
       786 
828 
     | 
    
         | 
| 
       787 
     | 
    
         
            -
               
     | 
| 
      
 829 
     | 
    
         
            +
              silence_warnings "should handle array" do
         
     | 
| 
       788 
830 
     | 
    
         
             
                Forme.form({}, :hidden_tags=>[["a ", "b"]]).to_s.must_equal '<form>a b</form>'
         
     | 
| 
       789 
831 
     | 
    
         
             
              end
         
     | 
| 
       790 
832 
     | 
    
         | 
| 
       791 
     | 
    
         
            -
               
     | 
| 
      
 833 
     | 
    
         
            +
              silence_warnings "should handle string" do
         
     | 
| 
       792 
834 
     | 
    
         
             
                Forme.form({}, :hidden_tags=>["a "]).to_s.must_equal '<form>a </form>'
         
     | 
| 
       793 
835 
     | 
    
         
             
              end
         
     | 
| 
       794 
836 
     | 
    
         | 
| 
       795 
     | 
    
         
            -
               
     | 
| 
      
 837 
     | 
    
         
            +
              silence_warnings "should handle proc return hash" do
         
     | 
| 
       796 
838 
     | 
    
         
             
                Forme.form({}, :hidden_tags=>[lambda{|tag| {:a=>'b'}}]).to_s.must_equal '<form><input name="a" type="hidden" value="b"/></form>'
         
     | 
| 
       797 
839 
     | 
    
         
             
              end
         
     | 
| 
       798 
840 
     | 
    
         | 
| 
       799 
     | 
    
         
            -
               
     | 
| 
       800 
     | 
    
         
            -
                Forme.form({ 
     | 
| 
      
 841 
     | 
    
         
            +
              silence_warnings "should handle proc return hash when from takes a block" do
         
     | 
| 
      
 842 
     | 
    
         
            +
                Forme.form({}, :hidden_tags=>[lambda{|tag| {:a=>'b'}}]){}.to_s.must_equal '<form><input name="a" type="hidden" value="b"/></form>'
         
     | 
| 
       801 
843 
     | 
    
         
             
              end
         
     | 
| 
       802 
844 
     | 
    
         | 
| 
       803 
     | 
    
         
            -
               
     | 
| 
      
 845 
     | 
    
         
            +
              silence_warnings "should handle proc return tag" do
         
     | 
| 
      
 846 
     | 
    
         
            +
                Forme.form({:method=>'post'}, :hidden_tags=>[lambda{|tag| tag.tag(tag.attr[:method])}]).to_s.must_equal '<form method="post"><post></post></form>'
         
     | 
| 
      
 847 
     | 
    
         
            +
              end
         
     | 
| 
      
 848 
     | 
    
         
            +
             
     | 
| 
      
 849 
     | 
    
         
            +
              silence_warnings "should raise error for unhandled object" do
         
     | 
| 
       804 
850 
     | 
    
         
             
                proc{Forme.form({}, :hidden_tags=>[Object.new])}.must_raise Forme::Error
         
     | 
| 
       805 
851 
     | 
    
         
             
              end
         
     | 
| 
       806 
852 
     | 
    
         
             
            end
         
     | 
| 
       807 
853 
     | 
    
         | 
| 
       808 
854 
     | 
    
         
             
            describe "Forme custom" do
         
     | 
| 
       809 
855 
     | 
    
         
             
              it "formatters can be specified as a proc" do
         
     | 
| 
       810 
     | 
    
         
            -
                Forme::Form.new(:formatter=>proc{|i| i. 
     | 
| 
      
 856 
     | 
    
         
            +
                Forme::Form.new(:formatter=>proc{|i| i.tag(:textarea, i.opts[:name]=>:name)}).input(:text, :name=>'foo').to_s.must_equal '<textarea foo="name"></textarea>'
         
     | 
| 
       811 
857 
     | 
    
         
             
              end
         
     | 
| 
       812 
858 
     | 
    
         | 
| 
       813 
859 
     | 
    
         
             
              it "serializers can be specified as a proc" do
         
     | 
| 
         @@ -819,7 +865,7 @@ describe "Forme custom" do 
     | 
|
| 
       819 
865 
     | 
    
         
             
              end
         
     | 
| 
       820 
866 
     | 
    
         | 
| 
       821 
867 
     | 
    
         
             
              it "error_handlers can be specified as a proc" do
         
     | 
| 
       822 
     | 
    
         
            -
                Forme::Form.new(:error_handler=>proc{|t, i| [t, "!!! #{i.opts[:error]}"]}).input(:textarea, :name=>'foo', :error=>'bar').to_s.must_equal '<textarea class="error" name="foo"></textarea>!!! bar'
         
     | 
| 
      
 868 
     | 
    
         
            +
                Forme::Form.new(:error_handler=>proc{|t, i| [t, "!!! #{i.opts[:error]}"]}).input(:textarea, :name=>'foo', :error=>'bar').to_s.must_equal '<textarea aria-invalid="true" class="error" name="foo"></textarea>!!! bar'
         
     | 
| 
       823 
869 
     | 
    
         
             
              end
         
     | 
| 
       824 
870 
     | 
    
         | 
| 
       825 
871 
     | 
    
         
             
              it "wrappers can be specified as a proc" do
         
     | 
| 
         @@ -854,6 +900,10 @@ describe "Forme built-in custom" do 
     | 
|
| 
       854 
900 
     | 
    
         
             
                Forme::Form.new(:formatter=>:readonly).input(:select, :label=>"Foo", :options=>[1, 2, 3], :value=>2).to_s.must_equal "<label>Foo: <span>2</span></label>"
         
     | 
| 
       855 
901 
     | 
    
         
             
              end
         
     | 
| 
       856 
902 
     | 
    
         | 
| 
      
 903 
     | 
    
         
            +
              it "formatter: readonly removes hidden inputs" do
         
     | 
| 
      
 904 
     | 
    
         
            +
                Forme::Form.new(:formatter=>:readonly).input(:hidden, :value=>"Bar").to_s.must_equal ""
         
     | 
| 
      
 905 
     | 
    
         
            +
              end
         
     | 
| 
      
 906 
     | 
    
         
            +
             
     | 
| 
       857 
907 
     | 
    
         
             
              it "formatter: readonly formats text into paragraphs for textarea inputs" do
         
     | 
| 
       858 
908 
     | 
    
         
             
                Forme::Form.new(:formatter=>:readonly).input(:textarea, :label=>"Foo", :value=>"\n Bar\nBaz\n\nQuuz\n\n1\n2 \n").to_s.must_equal "<label>Foo: <div class=\"readonly-textarea\"><p> Bar<br />Baz</p><p>Quuz</p><p>1<br />2 </p></div></label>"
         
     | 
| 
       859 
909 
     | 
    
         
             
              end
         
     | 
| 
         @@ -877,7 +927,7 @@ describe "Forme built-in custom" do 
     | 
|
| 
       877 
927 
     | 
    
         
             
              end
         
     | 
| 
       878 
928 
     | 
    
         | 
| 
       879 
929 
     | 
    
         
             
              it "labeler: explicit should handle tags with errors" do
         
     | 
| 
       880 
     | 
    
         
            -
                Forme::Form.new(:labeler=>:explicit).input(:text, :error=>'Bad Stuff!', :value=>'f', :id=>'foo', :label=>'bar').to_s.must_equal '<label class="label-before" for="foo">bar</label><input class="error" id="foo" type="text" value="f"/><span class="error_message">Bad Stuff!</span>'
         
     | 
| 
      
 930 
     | 
    
         
            +
                Forme::Form.new(:labeler=>:explicit).input(:text, :error=>'Bad Stuff!', :value=>'f', :id=>'foo', :label=>'bar').to_s.must_equal '<label class="label-before" for="foo">bar</label><input aria-describedby="foo_error_message" aria-invalid="true" class="error" id="foo" type="text" value="f"/><span class="error_message" id="foo_error_message">Bad Stuff!</span>'
         
     | 
| 
       881 
931 
     | 
    
         
             
              end
         
     | 
| 
       882 
932 
     | 
    
         | 
| 
       883 
933 
     | 
    
         
             
              it "wrapper: li wraps tag in an li" do
         
     | 
| 
         @@ -915,7 +965,7 @@ describe "Forme built-in custom" do 
     | 
|
| 
       915 
965 
     | 
    
         
             
              end
         
     | 
| 
       916 
966 
     | 
    
         | 
| 
       917 
967 
     | 
    
         
             
              it "wrapper: trtd should use at most 2 td tags" do
         
     | 
| 
       918 
     | 
    
         
            -
                Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'Foo', :error=>'Bar').to_s.must_equal '<tr><td><label class="label-before" for="foo">Foo</label></td><td><textarea class="error" id="foo"></textarea><span class="error_message">Bar</span></td></tr>'
         
     | 
| 
      
 968 
     | 
    
         
            +
                Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'Foo', :error=>'Bar').to_s.must_equal '<tr><td><label class="label-before" for="foo">Foo</label></td><td><textarea aria-describedby="foo_error_message" aria-invalid="true" class="error" id="foo"></textarea><span class="error_message" id="foo_error_message">Bar</span></td></tr>'
         
     | 
| 
       919 
969 
     | 
    
         
             
              end
         
     | 
| 
       920 
970 
     | 
    
         | 
| 
       921 
971 
     | 
    
         
             
              it "wrapper: trtd should handle inputs with label after" do
         
     | 
| 
         @@ -1020,6 +1070,7 @@ describe "Forme built-in custom" do 
     | 
|
| 
       1020 
1070 
     | 
    
         
             
                Forme::Form.new(:serializer=>:text).button().to_s.must_equal ""
         
     | 
| 
       1021 
1071 
     | 
    
         
             
                Forme::Form.new(:serializer=>:text).inputs([[:textarea, {:label=>"Foo", :value=>"Bar"}]], :legend=>'Baz').to_s.must_equal "Baz\n---\nFoo: Bar\n\n"
         
     | 
| 
       1022 
1072 
     | 
    
         
             
                Forme::Form.new(:serializer=>:text).tag(:p){|f| f.input(:textarea, :label=>"Foo", :value=>"Bar")}.to_s.must_equal "Foo: Bar\n\n"
         
     | 
| 
      
 1073 
     | 
    
         
            +
                Forme::Form.new(:serializer=>:text).tag(:p, {}, ['a']).to_s.must_equal "a"
         
     | 
| 
       1023 
1074 
     | 
    
         
             
              end
         
     | 
| 
       1024 
1075 
     | 
    
         
             
            end
         
     | 
| 
       1025 
1076 
     | 
    
         | 
| 
         @@ -1,33 +1,48 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require_relative 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'sequel_helper'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       5 
4 
     | 
    
         
             
            begin
         
     | 
| 
       6 
     | 
    
         
            -
            require 'action_controller/railtie'
         
     | 
| 
       7 
     | 
    
         
            -
            rescue LoadError
         
     | 
| 
       8 
     | 
    
         
            -
              warn "unable to load rails, skipping rails spec"
         
     | 
| 
       9 
     | 
    
         
            -
            else
         
     | 
| 
       10 
     | 
    
         
            -
            begin
         
     | 
| 
       11 
     | 
    
         
            -
              require 'active_pack/gem_version'
         
     | 
| 
       12 
     | 
    
         
            -
            rescue LoadError
         
     | 
| 
       13 
     | 
    
         
            -
            end
         
     | 
| 
       14 
     | 
    
         
            -
            require 'forme/rails'
         
     | 
| 
      
 5 
     | 
    
         
            +
              require 'action_controller/railtie'
         
     | 
| 
       15 
6 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
              begin
         
     | 
| 
      
 8 
     | 
    
         
            +
                require 'active_pack/gem_version'
         
     | 
| 
      
 9 
     | 
    
         
            +
              rescue LoadError
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
              require_relative '../lib/forme/rails'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              if Rails.respond_to?(:version) && Rails.version.start_with?('4')
         
     | 
| 
      
 14 
     | 
    
         
            +
                # Work around issue in backported openssl environments where
         
     | 
| 
      
 15 
     | 
    
         
            +
                # secret is 64 bytes intead of 32 bytes
         
     | 
| 
      
 16 
     | 
    
         
            +
                require 'active_support/message_encryptor'
         
     | 
| 
      
 17 
     | 
    
         
            +
                def (ActiveSupport::MessageEncryptor).new(secret, *signature_key_or_options)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  obj = allocate
         
     | 
| 
      
 19 
     | 
    
         
            +
                  obj.send(:initialize, secret[0, 32], *signature_key_or_options)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  obj
         
     | 
| 
       20 
21 
     | 
    
         
             
                end
         
     | 
| 
       21 
22 
     | 
    
         
             
              end
         
     | 
| 
       22 
     | 
    
         
            -
              config.active_support.deprecation = :stderr
         
     | 
| 
       23 
     | 
    
         
            -
              config.middleware.delete(ActionDispatch::ShowExceptions)
         
     | 
| 
       24 
     | 
    
         
            -
              config.middleware.delete(Rack::Lock)
         
     | 
| 
       25 
     | 
    
         
            -
              config.secret_key_base = 'foo'*15
         
     | 
| 
       26 
     | 
    
         
            -
              config.secret_token = 'secret token'*15 if Rails.respond_to?(:version) && Rails.version < '5.2' 
         
     | 
| 
       27 
     | 
    
         
            -
              config.eager_load = true
         
     | 
| 
       28 
     | 
    
         
            -
              initialize!
         
     | 
| 
       29 
     | 
    
         
            -
            end
         
     | 
| 
       30 
23 
     | 
    
         | 
| 
      
 24 
     | 
    
         
            +
              class FormeRails < Rails::Application
         
     | 
| 
      
 25 
     | 
    
         
            +
                routes.append do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  %w'index inputs_block inputs_block_wrapper nest nest_sep nest_inputs nest_seq hash legend combined hidden_tags noblock noblock_post safe_buffer'.each do |action|
         
     | 
| 
      
 27 
     | 
    
         
            +
                    get action, :controller=>'forme', :action=>action
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
                config.active_support.deprecation = :stderr
         
     | 
| 
      
 31 
     | 
    
         
            +
                config.middleware.delete(ActionDispatch::HostAuthorization) if defined?(ActionDispatch::HostAuthorization)
         
     | 
| 
      
 32 
     | 
    
         
            +
                config.middleware.delete(ActionDispatch::ShowExceptions)
         
     | 
| 
      
 33 
     | 
    
         
            +
                config.middleware.delete(Rack::Lock)
         
     | 
| 
      
 34 
     | 
    
         
            +
                config.secret_key_base = 'foo'*15
         
     | 
| 
      
 35 
     | 
    
         
            +
                config.secret_token = 'secret token'*15 if Rails.respond_to?(:version) && Rails.version < '5.2' 
         
     | 
| 
      
 36 
     | 
    
         
            +
                config.eager_load = true
         
     | 
| 
      
 37 
     | 
    
         
            +
                begin
         
     | 
| 
      
 38 
     | 
    
         
            +
                  initialize!
         
     | 
| 
      
 39 
     | 
    
         
            +
                rescue NoMethodError
         
     | 
| 
      
 40 
     | 
    
         
            +
                  raise LoadError
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 44 
     | 
    
         
            +
              warn "unable to load or setup rails, skipping rails spec"
         
     | 
| 
      
 45 
     | 
    
         
            +
            else
         
     | 
| 
       31 
46 
     | 
    
         
             
            class FormeController < ActionController::Base
         
     | 
| 
       32 
47 
     | 
    
         
             
              helper Forme::Rails::ERB
         
     | 
| 
       33 
48 
     | 
    
         | 
| 
         @@ -177,6 +192,10 @@ END 
     | 
|
| 
       177 
192 
     | 
    
         
             
            END
         
     | 
| 
       178 
193 
     | 
    
         
             
              end
         
     | 
| 
       179 
194 
     | 
    
         | 
| 
      
 195 
     | 
    
         
            +
              def hidden_tags
         
     | 
| 
      
 196 
     | 
    
         
            +
                render :inline => "<%= forme([:foo, :bar], {:action=>'/baz'}, :hidden_tags=>[{'a'=>'b'}]) %>"
         
     | 
| 
      
 197 
     | 
    
         
            +
              end
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
       180 
199 
     | 
    
         
             
              def noblock
         
     | 
| 
       181 
200 
     | 
    
         
             
                render :inline => "<%= forme([:foo, :bar], {:action=>'/baz'}, :inputs=>[:first], :button=>'xyz', :legend=>'123') %>"
         
     | 
| 
       182 
201 
     | 
    
         
             
              end
         
     | 
| 
         @@ -248,6 +267,10 @@ describe "Forme Rails integration" do 
     | 
|
| 
       248 
267 
     | 
    
         
             
                sin_get('/combined').must_equal '<form action="/baz"><fieldset class="inputs"><legend>123</legend><input id="first" name="first" type="text" value="foo"/></fieldset> <p>FBB</p> <input id="last" name="last" type="text" value="bar"/> <input type="submit" value="xyz"/></form>'
         
     | 
| 
       249 
268 
     | 
    
         
             
              end
         
     | 
| 
       250 
269 
     | 
    
         | 
| 
      
 270 
     | 
    
         
            +
              silence_warnings "#form should support :hidden_tags option" do
         
     | 
| 
      
 271 
     | 
    
         
            +
                sin_get('/hidden_tags').must_equal '<form action="/baz"><input name="a" type="hidden" value="b"/></form>'
         
     | 
| 
      
 272 
     | 
    
         
            +
              end
         
     | 
| 
      
 273 
     | 
    
         
            +
             
     | 
| 
       251 
274 
     | 
    
         
             
              it "#form should work without a block" do
         
     | 
| 
       252 
275 
     | 
    
         
             
                sin_get('/noblock').must_equal '<form action="/baz"><fieldset class="inputs"><legend>123</legend><input id="first" name="first" type="text" value="foo"/></fieldset><input type="submit" value="xyz"/></form>'
         
     | 
| 
       253 
276 
     | 
    
         
             
              end
         
     |