forme 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 315de851244fa7fd0ccb18fb0d57aa53204fff22
4
- data.tar.gz: c880954089f9c59174abdf75eed937a2fddde4a0
3
+ metadata.gz: a74dc2b36401ea1374b6e0790ee2292b793beac2
4
+ data.tar.gz: 33e3d4e182a2af0513ac37e3200c0eda9826d08b
5
5
  SHA512:
6
- metadata.gz: d598b9cb754eb1973685c6b830451a78b3fbf18e0477373a8021966d0f5b210756fdab2f1209ed5b83cf481f530f8e02995776a829555266233bc008842a163f
7
- data.tar.gz: a321b164bc8a347573c12cdd1b4bd1e786c45e82c06de27d3219256b8523acdab4e80153dbd4bf7bc82cf6929714987d1002eb5ff27ab043d717ef0c37908814
6
+ metadata.gz: 7c9e809e2c1cd4ea343de693f4611c5f42e5f320723545ec7f76d2e1112d3d695159ed791c2ff0f7810ed2e1bdfe01eb1d850fcd37493c13ebe3e98aa413b0a5
7
+ data.tar.gz: b1dfd6ce07b3e35e0873e86f6956662779ecd46f545e0c030a5e557da6cf19df7a8f9dda20ef9feb2a4f418e7d231d33fff6e4f4bcf35e858816c2e9f53fcbd1
data/CHANGELOG CHANGED
@@ -1,3 +1,15 @@
1
+ === 1.2.0 (2014-11-06)
2
+
3
+ * Support pg_array_to_many associations in the Sequel plugin, treating them similarly to other *_to_many associations (jeremyevans)
4
+
5
+ * When using :grid option to subform in the Sequel plugin, :inputs_opts can be used to pass options to the InputsWrapper (jeremyevans)
6
+
7
+ * Support :error_attr option for inputs, for setting attributes to use for error message span (jeremyevans)
8
+
9
+ * Make explicit labeler use label-before and label-after classes specifying the label position (jeremyevans)
10
+
11
+ * Support :size option for select inputs (jeremyevans)
12
+
1
13
  === 1.1.0 (2014-09-07)
2
14
 
3
15
  * Make form without a block in the ERB integration still use hidden tags if method is post (jeremyevans)
@@ -424,11 +424,14 @@ This will create a form similar to:
424
424
  For one_to_many and many_to_many associations, you will probably want to use the
425
425
  +association_pks+ plugin that ships with Sequel.
426
426
 
427
+ This supports the pg_array_to_many association type that comes with Sequel's
428
+ +pg_array_association+ plugin.
429
+
427
430
  association input options:
428
431
 
429
432
  :as :: For many_to_one associations, set to :radio to use a series of radio buttons instead
430
- a select input. For one_to_many and many_to_many associations, set to :checkbox to
431
- use a series of checkboxes instead of a multiple select input.
433
+ a select input. For one_to_many, many_to_many, and pg_array_to_many associations, set
434
+ to :checkbox to use a series of checkboxes instead of a multiple select input.
432
435
  :dataset :: If a Dataset, uses the dataset to retrieve the options. If a Proc or Method,
433
436
  calls the proc or method with the default dataset, and should return a modified
434
437
  dataset to use.
@@ -502,6 +505,8 @@ subform options:
502
505
  be created via the :inputs option. If you are not providing
503
506
  an :inputs option or are using a block with additional inputs,
504
507
  you should specify this option.
508
+ :inputs_opts :: When using the :grid option, this allows you to specify options
509
+ to pass to the table InputsWrapper.
505
510
 
506
511
  = ERB Support
507
512
 
@@ -611,6 +616,7 @@ Creates a select tag, containing option tags specified by the :options option.
611
616
  :selected :: The value that should be selected. Any options that are equal to
612
617
  this value (or included in this value if a multiple select box),
613
618
  are set to selected.
619
+ :size :: Uses the size attribute on the tag
614
620
  :text_method :: If set, each entry in the array has this option called on
615
621
  it to get the text of the object.
616
622
  :value :: Same as :selected, but has lower priority.
@@ -737,6 +743,10 @@ Forme ships with a bunch of built-in transformers that you can use:
737
743
 
738
744
  :default :: modifies tag to add an error class and adds a span with the error message
739
745
 
746
+ This supports the following options:
747
+
748
+ :error_attr :: A hash of attributes to use for the span with the error message
749
+
740
750
  === +labeler+
741
751
 
742
752
  :default :: uses implicit labels, where the tag is a child of the label tag
@@ -792,9 +792,10 @@ module Forme
792
792
  # Takes a select input and turns it into a select tag with (possibly) option
793
793
  # children tags.
794
794
  def format_select
795
- if os = process_select_options(@opts[:options])
796
- @attr[:multiple] = :multiple if @opts[:multiple]
795
+ @attr[:multiple] = :multiple if @opts[:multiple]
796
+ copy_options_to_attributes([:size])
797
797
 
798
+ if os = process_select_options(@opts[:options])
798
799
  os = os.map do |label, value, sel, attrs|
799
800
  if value || sel
800
801
  attrs = attrs.dup
@@ -1104,7 +1105,10 @@ module Forme
1104
1105
 
1105
1106
  # Return tag with error message span tag after it.
1106
1107
  def call(tag, input)
1107
- [tag, input.tag(:span, {:class=>'error_message'}, input.opts[:error])]
1108
+ attr = input.opts[:error_attr]
1109
+ attr = attr ? attr.dup : {}
1110
+ Forme.attr_classes(attr, 'error_message')
1111
+ [tag, input.tag(:span, attr, input.opts[:error])]
1108
1112
  end
1109
1113
  end
1110
1114
 
@@ -1166,19 +1170,22 @@ module Forme
1166
1170
  end
1167
1171
  end
1168
1172
  end
1169
- if [:radio, :checkbox].include?(input.type)
1170
- t = [tag, input.tag(:label, {:for=>input.opts.fetch(:label_for, id)}.merge(input.opts[:label_attr]||{}), [input.opts[:label]])]
1171
- pos = :before
1172
- else
1173
- t = [input.tag(:label, {:for=>input.opts.fetch(:label_for, id)}.merge(input.opts[:label_attr]||{}), [input.opts[:label]]), tag]
1174
- pos = :after
1175
- end
1176
1173
 
1177
- if input.opts[:label_position] == pos
1178
- t.reverse
1174
+ label_attr = input.opts[:label_attr]
1175
+ label_attr = label_attr ? label_attr.dup : {}
1176
+ label_attr[:for] ||= input.opts.fetch(:label_for, id)
1177
+ lpos = input.opts[:label_position] || ([:radio, :checkbox].include?(input.type) ? :after : :before)
1178
+
1179
+ Forme.attr_classes(label_attr, "label-#{lpos}")
1180
+ label = input.tag(:label, label_attr, [input.opts[:label]])
1181
+
1182
+ t = if lpos == :before
1183
+ [label, tag]
1179
1184
  else
1180
- t
1185
+ [tag, label]
1181
1186
  end
1187
+
1188
+ t
1182
1189
  end
1183
1190
  end
1184
1191
 
@@ -1,6 +1,6 @@
1
1
  module Forme
2
2
  # Version constant, use <tt>Forme.version</tt> instead.
3
- VERSION = '1.1.0'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
 
5
5
  # Returns the version as a frozen string (e.g. '0.1.0')
6
6
  def self.version
@@ -87,7 +87,8 @@ module Sequel # :nodoc:
87
87
  if grid
88
88
  labels = opts.fetch(:labels){opts[:inputs].map{|l, *| humanize(l)} if opts[:inputs]}
89
89
  legend = opts.fetch(:legend){humanize(association)}
90
- inputs({:inputs_wrapper=>:table, :nested_inputs_wrapper=>:tr, :wrapper=>:td, :labeler=>nil, :labels=>labels, :legend=>legend}, &contents)
90
+ inputs_opts = opts[:inputs_opts] || {}
91
+ inputs(inputs_opts.merge(:inputs_wrapper=>:table, :nested_inputs_wrapper=>:tr, :wrapper=>:td, :labeler=>nil, :labels=>labels, :legend=>legend), &contents)
91
92
  else
92
93
  contents.call
93
94
  end
@@ -285,14 +286,21 @@ module Sequel # :nodoc:
285
286
  key = ref[:key]
286
287
  klass = ref.associated_class
287
288
  pk = klass.primary_key
288
- field = "#{klass.send(:singularize, ref[:name])}_pks"
289
+ label = klass.send(:singularize, ref[:name])
290
+
291
+ field = if ref[:type] == :pg_array_to_many
292
+ ref[:key]
293
+ else
294
+ "#{label}_pks"
295
+ end
296
+
289
297
  unless opts.has_key?(:key)
290
298
  opts[:array] = true unless opts.has_key?(:array)
291
299
  opts[:key] = field
292
300
  end
293
301
  opts[:value] = obj.send(ref[:name]).map{|x| x.send(pk)} unless opts.has_key?(:value)
294
302
  opts[:options] = association_select_options(ref) unless opts.has_key?(:options)
295
- handle_label(field)
303
+ handle_label(label)
296
304
  if opts.delete(:as) == :checkbox
297
305
  _input(:checkboxset, opts)
298
306
  else
@@ -301,6 +309,7 @@ module Sequel # :nodoc:
301
309
  end
302
310
  end
303
311
  alias association_many_to_many association_one_to_many
312
+ alias association_pg_array_to_many association_one_to_many
304
313
 
305
314
  # Return an array of two element arrays representing the
306
315
  # select options that should be created.
@@ -239,6 +239,10 @@ describe "Forme plain forms" do
239
239
  @f.input(:select).to_s.should == '<select></select>'
240
240
  end
241
241
 
242
+ specify "should respect multiple and size options in select tag" do
243
+ @f.input(:select, :multiple=>true, :size=>10).to_s.should == '<select multiple="multiple" size="10"></select>'
244
+ end
245
+
242
246
  specify "should create date tag" do
243
247
  @f.input(:date).to_s.should == '<input type="date"/>'
244
248
  end
@@ -252,7 +256,7 @@ describe "Forme plain forms" do
252
256
  end
253
257
 
254
258
  specify "should have explicit labeler and trtd wrapper work with multiple select boxes for dates" do
255
- @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5), :wrapper=>:trtd, :labeler=>:explicit, :label=>'Baz').to_s.should == %{<tr><td><label for="bar_year">Baz</label></td><td><select id="bar_year" 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>}
259
+ @f.input(:date, :name=>"foo", :id=>"bar", :as=>:select, :value=>Date.new(2011, 6, 5), :wrapper=>:trtd, :labeler=>:explicit, :label=>'Baz').to_s.should == %{<tr><td><label class="label-before" for="bar_year">Baz</label></td><td><select id="bar_year" 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>}
256
260
  end
257
261
 
258
262
  specify "should use multiple select boxes for datetimes if the :as=>:select option is given" do
@@ -439,6 +443,10 @@ describe "Forme plain forms" do
439
443
  @f.input(:text, :error=>'Bad Stuff!', :class=>'bar', :value=>'foo').to_s.should == '<input class="bar error" type="text" value="foo"/><span class="error_message">Bad Stuff!</span>'
440
444
  end
441
445
 
446
+ specify "should respect :error_attr option for setting the attributes for the error message span" do
447
+ @f.input(:text, :error=>'Bad Stuff!', :value=>'foo', :error_attr=>{:class=>'foo'}).to_s.should == '<input class="error" type="text" value="foo"/><span class="foo error_message">Bad Stuff!</span>'
448
+ end
449
+
442
450
  specify "#open should return an opening tag" do
443
451
  @f.open(:action=>'foo', :method=>'post').to_s.should == '<form action="foo" method="post">'
444
452
  end
@@ -559,19 +567,19 @@ describe "Forme plain forms" do
559
567
  end
560
568
 
561
569
  specify "inputs should accept a :labeler option to use a custom labeler" do
562
- @f.input(:textarea, :labeler=>:explicit, :label=>'bar', :id=>:foo).to_s.should == '<label for="foo">bar</label><textarea id="foo"></textarea>'
570
+ @f.input(:textarea, :labeler=>:explicit, :label=>'bar', :id=>:foo).to_s.should == '<label class="label-before" for="foo">bar</label><textarea id="foo"></textarea>'
563
571
  end
564
572
 
565
573
  specify "inputs handle explicit labels with :label_position=>:after" do
566
- @f.input(:textarea, :labeler=>:explicit, :label=>'bar', :id=>:foo, :label_position=>:after).to_s.should == '<textarea id="foo"></textarea><label for="foo">bar</label>'
574
+ @f.input(:textarea, :labeler=>:explicit, :label=>'bar', :id=>:foo, :label_position=>:after).to_s.should == '<textarea id="foo"></textarea><label class="label-after" for="foo">bar</label>'
567
575
  end
568
576
 
569
577
  specify "should handle explicit labels with checkboxes" do
570
- @f.input(:checkbox, :labeler=>:explicit, :label=>'Foo', :value=>'foo', :name=>'a', :id=>'bar').to_s.should == '<input id="bar_hidden" name="a" type="hidden" value="0"/><input id="bar" name="a" type="checkbox" value="foo"/><label for="bar">Foo</label>'
578
+ @f.input(:checkbox, :labeler=>:explicit, :label=>'Foo', :value=>'foo', :name=>'a', :id=>'bar').to_s.should == '<input id="bar_hidden" name="a" type="hidden" value="0"/><input id="bar" name="a" type="checkbox" value="foo"/><label class="label-after" for="bar">Foo</label>'
571
579
  end
572
580
 
573
581
  specify "should handle explicit labels with checkboxes with :label_position=>:before" do
574
- @f.input(:checkbox, :labeler=>:explicit, :label=>'Foo', :value=>'foo', :name=>'a', :id=>'bar', :label_position=>:before).to_s.should == '<label for="bar">Foo</label><input id="bar_hidden" name="a" type="hidden" value="0"/><input id="bar" name="a" type="checkbox" value="foo"/>'
582
+ @f.input(:checkbox, :labeler=>:explicit, :label=>'Foo', :value=>'foo', :name=>'a', :id=>'bar', :label_position=>:before).to_s.should == '<label class="label-before" for="bar">Foo</label><input id="bar_hidden" name="a" type="hidden" value="0"/><input id="bar" name="a" type="checkbox" value="foo"/>'
575
583
  end
576
584
 
577
585
  specify "inputs handle implicit labels or checkboxes without hidden fields with :label_position=>:before" do
@@ -706,15 +714,15 @@ describe "Forme built-in custom" do
706
714
  end
707
715
 
708
716
  specify "labeler: explicit uses an explicit label with for attribute" do
709
- Forme::Form.new(:labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'bar').to_s.should == '<label for="foo">bar</label><textarea id="foo"></textarea>'
717
+ Forme::Form.new(:labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'bar').to_s.should == '<label class="label-before" for="foo">bar</label><textarea id="foo"></textarea>'
710
718
  end
711
719
 
712
720
  specify "labeler: explicit handles the key option correctly" do
713
- Forme::Form.new(:labeler=>:explicit, :namespace=>:baz).input(:textarea, :key=>'foo', :label=>'bar').to_s.should == '<label for="baz_foo">bar</label><textarea id="baz_foo" name="baz[foo]"></textarea>'
721
+ Forme::Form.new(:labeler=>:explicit, :namespace=>:baz).input(:textarea, :key=>'foo', :label=>'bar').to_s.should == '<label class="label-before" for="baz_foo">bar</label><textarea id="baz_foo" name="baz[foo]"></textarea>'
714
722
  end
715
723
 
716
724
  specify "labeler: explicit should handle tags with errors" do
717
- Forme::Form.new(:labeler=>:explicit).input(:text, :error=>'Bad Stuff!', :value=>'f', :id=>'foo', :label=>'bar').to_s.should == '<label for="foo">bar</label><input class="error" id="foo" type="text" value="f"/><span class="error_message">Bad Stuff!</span>'
725
+ Forme::Form.new(:labeler=>:explicit).input(:text, :error=>'Bad Stuff!', :value=>'f', :id=>'foo', :label=>'bar').to_s.should == '<label class="label-before" for="foo">bar</label><input class="error" id="foo" type="text" value="f"/><span class="error_message">Bad Stuff!</span>'
718
726
  end
719
727
 
720
728
  specify "wrapper: li wraps tag in an li" do
@@ -748,15 +756,15 @@ describe "Forme built-in custom" do
748
756
  end
749
757
 
750
758
  specify "wrapper: trtd supports multiple tags in separate tds" do
751
- Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'Foo').to_s.should == '<tr><td><label for="foo">Foo</label></td><td><textarea id="foo"></textarea></td></tr>'
759
+ Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'Foo').to_s.should == '<tr><td><label class="label-before" for="foo">Foo</label></td><td><textarea id="foo"></textarea></td></tr>'
752
760
  end
753
761
 
754
762
  specify "wrapper: trtd should use at most 2 td tags" do
755
- Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'Foo', :error=>'Bar').to_s.should == '<tr><td><label for="foo">Foo</label></td><td><textarea class="error" id="foo"></textarea><span class="error_message">Bar</span></td></tr>'
763
+ Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:textarea, :id=>'foo', :label=>'Foo', :error=>'Bar').to_s.should == '<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>'
756
764
  end
757
765
 
758
766
  specify "wrapper: trtd should handle inputs with label after" do
759
- Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:checkbox, :id=>'foo', :name=>'foo', :label=>'Foo').to_s.should == '<tr><td><label for="foo">Foo</label></td><td><input id="foo_hidden" name="foo" type="hidden" value="0"/><input id="foo" name="foo" type="checkbox"/></td></tr>'
767
+ Forme::Form.new(:wrapper=>:trtd, :labeler=>:explicit).input(:checkbox, :id=>'foo', :name=>'foo', :label=>'Foo').to_s.should == '<tr><td><label class="label-after" for="foo">Foo</label></td><td><input id="foo_hidden" name="foo" type="hidden" value="0"/><input id="foo" name="foo" type="checkbox"/></td></tr>'
760
768
  end
761
769
 
762
770
  specify "wrapper: tr should use a td wrapper and tr inputs_wrapper" do
@@ -884,17 +892,17 @@ describe "Forme configurations" do
884
892
  end
885
893
 
886
894
  specify "config: :formastic uses fieldset_ol inputs_wrapper and li wrapper, and explicit labeler" do
887
- Forme::Form.new(:config=>:formtastic).inputs([[:textarea, {:id=>:foo, :label=>'Foo'}]]).to_s.should == '<fieldset class="inputs"><ol><li><label for="foo">Foo</label><textarea id="foo"></textarea></li></ol></fieldset>'
895
+ Forme::Form.new(:config=>:formtastic).inputs([[:textarea, {:id=>:foo, :label=>'Foo'}]]).to_s.should == '<fieldset class="inputs"><ol><li><label class="label-before" for="foo">Foo</label><textarea id="foo"></textarea></li></ol></fieldset>'
888
896
  end
889
897
 
890
898
  specify "should be able to set a default configuration with Forme.default_config=" do
891
899
  Forme.default_config = :formtastic
892
- Forme::Form.new.inputs([[:textarea, {:id=>:foo, :label=>'Foo'}]]).to_s.should == '<fieldset class="inputs"><ol><li><label for="foo">Foo</label><textarea id="foo"></textarea></li></ol></fieldset>'
900
+ Forme::Form.new.inputs([[:textarea, {:id=>:foo, :label=>'Foo'}]]).to_s.should == '<fieldset class="inputs"><ol><li><label class="label-before" for="foo">Foo</label><textarea id="foo"></textarea></li></ol></fieldset>'
893
901
  end
894
902
 
895
903
  specify "should have #register_config register a configuration for later use" do
896
904
  Forme.register_config(:foo, :wrapper=>:li, :labeler=>:explicit)
897
- Forme::Form.new(:config=>:foo).input(:textarea, :id=>:foo, :label=>'Foo').to_s.should == '<li><label for="foo">Foo</label><textarea id="foo"></textarea></li>'
905
+ Forme::Form.new(:config=>:foo).input(:textarea, :id=>:foo, :label=>'Foo').to_s.should == '<li><label class="label-before" for="foo">Foo</label><textarea id="foo"></textarea></li>'
898
906
  end
899
907
 
900
908
  specify "should have #register_config support a :base option to base it on an existing config" do
@@ -55,6 +55,13 @@ class Album < Sequel::Model
55
55
  one_to_many :tracks
56
56
  many_to_many :tags
57
57
 
58
+ plugin :pg_array_associations
59
+ pg_array_to_many :atags, :class=>:Tag
60
+
61
+ def atag_ids
62
+ @atag_ids ||= [1,2]
63
+ end
64
+
58
65
  def artist_name
59
66
  artist.name if artist
60
67
  end
@@ -234,6 +234,12 @@ describe "Forme Sequel::Model forms" do
234
234
  @c.input(:tags).to_s.should == '<label>Tags: <select id="album_tag_pks" multiple="multiple" name="album[tag_pks][]"><option value="1">s</option><option selected="selected" value="2">t</option><option value="3">u</option></select></label>'
235
235
  end
236
236
 
237
+ specify "should use a multiple select box for pg_array_to_many associations" do
238
+ @b.input(:atags).to_s.should == '<label>Atags: <select id="album_atag_ids" multiple="multiple" name="album[atag_ids][]"><option selected="selected" value="1">s</option><option selected="selected" value="2">t</option><option value="3">u</option></select></label>'
239
+ @c.obj.atag_ids.delete(1)
240
+ @c.input(:atags).to_s.should == '<label>Atags: <select id="album_atag_ids" multiple="multiple" name="album[atag_ids][]"><option value="1">s</option><option selected="selected" value="2">t</option><option value="3">u</option></select></label>'
241
+ end
242
+
237
243
  specify "should use a regular select box for *_to_many associations if multiple if false" do
238
244
  @b.input(:tracks, :multiple=>false).to_s.should == '<label>Tracks: <select id="album_track_pks" name="album[track_pks][]"><option value="1">m</option><option value="2">n</option><option value="3">o</option></select></label>'
239
245
  @c.input(:tags, :multiple=>false).to_s.should == '<label>Tags: <select id="album_tag_pks" name="album[tag_pks][]"><option value="1">s</option><option value="2">t</option><option value="3">u</option></select></label>'
@@ -389,6 +395,10 @@ describe "Forme Sequel::Model forms" do
389
395
  Forme.form(@ab){|f| f.subform(:artist, :inputs=>[:name], :grid=>true)}.to_s.should == '<form class="forme album" method="post"><table><caption>Artist</caption><tr><th>Name</th></tr><input id="album_artist_attributes_id" name="album[artist_attributes][id]" type="hidden" value="1"/><tr><td class="string"><input id="album_artist_attributes_name" name="album[artist_attributes][name]" type="text" value="a"/></td></tr></table></form>'
390
396
  end
391
397
 
398
+ specify "should have #subform :grid option respect :inputs_opts option to pass options to inputs" do
399
+ Forme.form(@ab){|f| f.subform(:artist, :inputs=>[:name], :grid=>true, :inputs_opts=>{:attr=>{:class=>'foo'}})}.to_s.should == '<form class="forme album" method="post"><table class="foo"><caption>Artist</caption><tr><th>Name</th></tr><input id="album_artist_attributes_id" name="album[artist_attributes][id]" type="hidden" value="1"/><tr><td class="string"><input id="album_artist_attributes_name" name="album[artist_attributes][name]" type="text" value="a"/></td></tr></table></form>'
400
+ end
401
+
392
402
  specify "should have #subform :grid option handle :legend and :labels options" do
393
403
  Forme.form(@ab){|f| f.subform(:artist, :inputs=>[:name], :grid=>true, :legend=>'Foo', :labels=>%w'Bar')}.to_s.should == '<form class="forme album" method="post"><table><caption>Foo</caption><tr><th>Bar</th></tr><input id="album_artist_attributes_id" name="album[artist_attributes][id]" type="hidden" value="1"/><tr><td class="string"><input id="album_artist_attributes_name" name="album[artist_attributes][name]" type="text" value="a"/></td></tr></table></form>'
394
404
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forme
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-08 00:00:00.000000000 Z
11
+ date: 2014-11-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  Forme is a forms library with the following goals: