meta_search 0.3.0 → 0.5.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.
@@ -3,14 +3,41 @@ require 'action_controller'
3
3
  require 'action_view/test_case'
4
4
 
5
5
  class TestViewHelpers < ActionView::TestCase
6
- tests ActionView::Helpers::FormHelper
6
+ tests MetaSearch::Helpers::FormHelper
7
+ include MetaSearch::Helpers::UrlHelper
8
+
9
+ router = ActionDispatch::Routing::RouteSet.new
10
+ router.draw do |map|
11
+ resources :developers
12
+ resources :companies
13
+ resources :projects
14
+ resources :notes
15
+ match ':controller(/:action(/:id(.:format)))'
16
+ end
17
+ include router.url_helpers
18
+
19
+ def setup
20
+ @controller = Class.new do
21
+
22
+ attr_reader :url_for_options
23
+ def url_for(options)
24
+ @url_for_options = options
25
+ "http://www.example.com"
26
+ end
27
+
28
+ def _router
29
+ @router ||= ActionDispatch::Routing::RouteSet.new
30
+ end
31
+ end
32
+ @controller = @controller.new
33
+ end
7
34
 
8
35
  context "A previously-filled search form" do
9
36
  setup do
10
37
  @s = Company.search
11
38
  @s.created_at_gte = [2001, 2, 3, 4, 5]
12
39
  @s.name_contains = "bacon"
13
- fields_for :search, @s do |f|
40
+ form_for @s do |f|
14
41
  @f = f
15
42
  end
16
43
  end
@@ -31,7 +58,7 @@ class TestViewHelpers < ActionView::TestCase
31
58
  context "A form using mutiparameter_field with default size option" do
32
59
  setup do
33
60
  @s = Developer.search
34
- fields_for :search, @s do |f|
61
+ form_for @s do |f|
35
62
  @f = f
36
63
  end
37
64
  end
@@ -51,35 +78,39 @@ class TestViewHelpers < ActionView::TestCase
51
78
  context "A form using check_boxes with three choices" do
52
79
  setup do
53
80
  @s = Company.search
54
- fields_for :search, @s do |f|
81
+ form_for @s do |f|
55
82
  @f = f
56
83
  end
57
84
  end
58
85
 
59
- should "generate the expected HTML without a block" do
60
- assert_dom_equal '<input id="search_id_in_1" name="search[id_in][]" ' +
61
- 'type="checkbox" value="1" /><label for="search_id_in_1">One</label>' +
62
- '<input id="search_id_in_2" name="search[id_in][]" ' +
63
- 'type="checkbox" value="2" /><label for="search_id_in_2">Two</label>' +
64
- '<input id="search_id_in_3" name="search[id_in][]" ' +
65
- 'type="checkbox" value="3" /><label for="search_id_in_3">Three</label>',
66
- @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]])
86
+ should "return an array of check boxes without a block" do
87
+ assert @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]]).all?{|c| c.is_a?(MetaSearch::Check)}
67
88
  end
68
89
 
69
90
  should "generate the expected HTML with a block" do
70
- @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]]) do |c|
71
- concat render :to => :string, :inline => "<p><%= c[:label] %> <%= c[:check_box] %></p>", :locals => {:c => c}
72
- end
73
- assert_dom_equal output_buffer,
74
- '<p><label for="search_id_in_1">One</label> ' +
75
- '<input id="search_id_in_1" name="search[id_in][]" ' +
76
- 'type="checkbox" value="1" /></p>' +
77
- '<p><label for="search_id_in_2">Two</label> ' +
78
- '<input id="search_id_in_2" name="search[id_in][]" ' +
79
- 'type="checkbox" value="2" /></p>' +
80
- '<p><label for="search_id_in_3">Three</label> ' +
81
- '<input id="search_id_in_3" name="search[id_in][]" ' +
82
- 'type="checkbox" value="3" /></p>'
91
+ expected = <<-EXPECTED
92
+ <p>
93
+ <label for="search_id_in_1">One</label>
94
+ <input id="search_id_in_1" name="search[id_in][]" type="checkbox" value="1" />
95
+ </p>
96
+ <p>
97
+ <label for="search_id_in_2">Two</label>
98
+ <input id="search_id_in_2" name="search[id_in][]" type="checkbox" value="2" />
99
+ </p>
100
+ <p>
101
+ <label for="search_id_in_3">Three</label>
102
+ <input id="search_id_in_3" name="search[id_in][]" type="checkbox" value="3" />
103
+ </p>
104
+ EXPECTED
105
+ assert_dom_equal expected,
106
+ render(:to => :string, :inline => <<-ERB)
107
+ <%= @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]]) do |c| -%>
108
+ <p>
109
+ <%= c.label %>
110
+ <%= c.box %>
111
+ </p>
112
+ <% end -%>
113
+ ERB
83
114
  end
84
115
  end
85
116
 
@@ -87,54 +118,56 @@ class TestViewHelpers < ActionView::TestCase
87
118
  setup do
88
119
  @s = Company.search
89
120
  @s.id_in = [1, 3]
90
- fields_for :search, @s do |f|
121
+ form_for @s do |f|
91
122
  @f = f
92
123
  end
93
124
  end
94
125
 
95
- should "generate the expected HTML without a block" do
96
- assert_dom_equal '<input checked="checked" id="search_id_in_1" name="search[id_in][]" ' +
97
- 'type="checkbox" value="1" /><label for="search_id_in_1">One</label>' +
98
- '<input id="search_id_in_2" name="search[id_in][]" ' +
99
- 'type="checkbox" value="2" /><label for="search_id_in_2">Two</label>' +
100
- '<input checked="checked" id="search_id_in_3" name="search[id_in][]" ' +
101
- 'type="checkbox" value="3" /><label for="search_id_in_3">Three</label>',
102
- @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]])
126
+ should "return an array of check boxes without a block" do
127
+ assert @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]]).all?{|c| c.is_a?(MetaSearch::Check)}
103
128
  end
104
129
 
105
130
  should "generate the expected HTML with a block" do
106
- @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]]) do |c|
107
- concat render :to => :string, :inline => "<p><%= c[:label] %> <%= c[:check_box] %></p>", :locals => {:c => c}
108
- end
109
- assert_dom_equal output_buffer,
110
- '<p><label for="search_id_in_1">One</label> <input checked="checked" id="search_id_in_1" ' +
111
- 'name="search[id_in][]" type="checkbox" value="1" /></p><p><label for="search_id_in_2">' +
112
- 'Two</label> <input id="search_id_in_2" name="search[id_in][]" type="checkbox" value="2" />' +
113
- '</p><p><label for="search_id_in_3">Three</label> <input checked="checked" id="search_id_in_3" ' +
114
- 'name="search[id_in][]" type="checkbox" value="3" /></p>'
131
+ expected = <<-EXPECTED
132
+ <p>
133
+ <label for="search_id_in_1">One</label>
134
+ <input id="search_id_in_1" name="search[id_in][]" type="checkbox" value="1" checked="checked" />
135
+ </p>
136
+ <p>
137
+ <label for="search_id_in_2">Two</label>
138
+ <input id="search_id_in_2" name="search[id_in][]" type="checkbox" value="2" />
139
+ </p>
140
+ <p>
141
+ <label for="search_id_in_3">Three</label>
142
+ <input id="search_id_in_3" name="search[id_in][]" type="checkbox" value="3" checked="checked" />
143
+ </p>
144
+ EXPECTED
145
+ assert_dom_equal expected,
146
+ render(:to => :string, :inline => <<-ERB)
147
+ <%= @f.check_boxes(:id_in, [['One', 1], ['Two', 2], ['Three', 3]]) do |c| -%>
148
+ <p>
149
+ <%= c.label %>
150
+ <%= c.box %>
151
+ </p>
152
+ <% end -%>
153
+ ERB
115
154
  end
116
155
 
117
156
  context "A form using collection_check_boxes with companies" do
118
157
  setup do
119
158
  @s = Company.search
120
- fields_for :search, @s do |f|
159
+ form_for @s do |f|
121
160
  @f = f
122
161
  end
123
162
  end
124
163
 
125
- should "generate the expected HTML without a block" do
126
- assert_dom_equal '<input id="search_id_in_1" name="search[id_in][]" type="checkbox" ' +
127
- 'value="1" /><label for="search_id_in_1">Initech</label>' +
128
- '<input id="search_id_in_2" name="search[id_in][]" type="checkbox" ' +
129
- 'value="2" /><label for="search_id_in_2">Advanced Optical Solutions</label>' +
130
- '<input id="search_id_in_3" name="search[id_in][]" type="checkbox" ' +
131
- 'value="3" /><label for="search_id_in_3">Mission Data</label>',
132
- @f.collection_check_boxes(:id_in, Company.all, :id, :name)
164
+ should "return an array of check boxes without a block" do
165
+ assert @f.collection_check_boxes(:id_in, Company.all, :id, :name).all?{|c| c.is_a?(MetaSearch::Check)}
133
166
  end
134
167
 
135
168
  should "generate the expected HTML with a block" do
136
169
  @f.collection_check_boxes(:id_in, Company.all, :id, :name) do |c|
137
- concat render :to => :string, :inline => "<p><%= c[:label] %> <%= c[:check_box] %></p>", :locals => {:c => c}
170
+ concat render :to => :string, :inline => "<p><%= c.label %> <%= c.box %></p>", :locals => {:c => c}
138
171
  end
139
172
  assert_dom_equal output_buffer,
140
173
  '<p><label for="search_id_in_1">Initech</label> ' +
@@ -146,4 +179,70 @@ class TestViewHelpers < ActionView::TestCase
146
179
  end
147
180
  end
148
181
  end
182
+
183
+ context "A company search" do
184
+ setup do
185
+ @s = Company.search
186
+ end
187
+
188
+ context "sorted by name ascending" do
189
+ setup do
190
+ @s.meta_sort = 'name.asc'
191
+ end
192
+
193
+ should "generate a sort link with an up arrow for the sorted column" do
194
+ assert_match /Name &#9650;/,
195
+ sort_link(@s, :name, :controller => 'companies')
196
+ end
197
+
198
+ should "not generate a sort link with an up arrow for a non-sorted column" do
199
+ assert_no_match /Created at &#9650;/,
200
+ sort_link(@s, :created_at, :controller => 'companies')
201
+ end
202
+
203
+ context "with existing search options" do
204
+ setup do
205
+ @s.name_contains = 'a'
206
+ end
207
+
208
+ should "maintain previous search options in its sort links" do
209
+ assert_match /search\[name_contains\]=a/,
210
+ sort_link(@s, :name, :controller => 'companies')
211
+ end
212
+ end
213
+ end
214
+ end
215
+
216
+ context "A developer search" do
217
+ setup do
218
+ @s = Developer.search
219
+ end
220
+
221
+ context "sorted by company name descending" do
222
+ setup do
223
+ @s.meta_sort = 'company_name.desc'
224
+ end
225
+
226
+ should "generate a sort link with a down arrow for the sorted column" do
227
+ assert_match /Company name &#9660;/,
228
+ sort_link(@s, :company_name, :controller => 'developers')
229
+ end
230
+
231
+ should "not generate a sort link with a down arrow for a non-sorted column" do
232
+ assert_no_match /Created at &#9660;/,
233
+ sort_link(@s, :created_at, :controller => 'developers')
234
+ end
235
+
236
+ context "with existing search options" do
237
+ setup do
238
+ @s.name_contains = 'a'
239
+ end
240
+
241
+ should "maintain previous search options in its sort links" do
242
+ assert_match /search\[name_contains\]=a/,
243
+ sort_link(@s, :company_name, :controller => 'companies')
244
+ end
245
+ end
246
+ end
247
+ end
149
248
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 5
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.5.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ernie Miller
@@ -14,25 +14,86 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-16 00:00:00 -04:00
17
+ date: 2010-06-08 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: activerecord
21
+ name: shoulda
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
27
28
  segments:
28
- - 3
29
- - 0
30
29
  - 0
31
- - beta
32
- version: 3.0.0.beta
30
+ version: "0"
33
31
  type: :development
34
32
  version_requirements: *id001
35
- description: Adds a search method to your ActiveRecord models which returns an object to be used in form_for while constructing a search. Works with Rails 3 only.
33
+ - !ruby/object:Gem::Dependency
34
+ name: activerecord
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 3
43
+ - 0
44
+ - 0
45
+ - beta4
46
+ version: 3.0.0.beta4
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: activesupport
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 3
59
+ - 0
60
+ - 0
61
+ - beta4
62
+ version: 3.0.0.beta4
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: actionpack
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 3
75
+ - 0
76
+ - 0
77
+ - beta4
78
+ version: 3.0.0.beta4
79
+ type: :runtime
80
+ version_requirements: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ name: arel
83
+ prerelease: false
84
+ requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
91
+ - 4
92
+ - 0
93
+ version: 0.4.0
94
+ type: :runtime
95
+ version_requirements: *id005
96
+ description: "\n Allows simple search forms to be created against an AR3 model\n and its associations, has useful view helpers for sort links\n and multiparameter fields as well.\n "
36
97
  email: ernie@metautonomo.us
37
98
  executables: []
38
99
 
@@ -44,6 +105,8 @@ extra_rdoc_files:
44
105
  files:
45
106
  - .document
46
107
  - .gitignore
108
+ - .gitmodules
109
+ - Gemfile
47
110
  - LICENSE
48
111
  - README.rdoc
49
112
  - Rakefile
@@ -51,11 +114,13 @@ files:
51
114
  - lib/meta_search.rb
52
115
  - lib/meta_search/builder.rb
53
116
  - lib/meta_search/exceptions.rb
54
- - lib/meta_search/helpers/action_view.rb
117
+ - lib/meta_search/helpers.rb
118
+ - lib/meta_search/helpers/form_builder.rb
119
+ - lib/meta_search/helpers/form_helper.rb
120
+ - lib/meta_search/helpers/url_helper.rb
121
+ - lib/meta_search/method.rb
55
122
  - lib/meta_search/model_compatibility.rb
56
- - lib/meta_search/railtie.rb
57
123
  - lib/meta_search/searches/active_record.rb
58
- - lib/meta_search/searches/base.rb
59
124
  - lib/meta_search/utility.rb
60
125
  - lib/meta_search/where.rb
61
126
  - meta_search.gemspec
@@ -75,7 +140,7 @@ files:
75
140
  - test/test_search.rb
76
141
  - test/test_view_helpers.rb
77
142
  has_rdoc: true
78
- homepage: http://metautonomo.us
143
+ homepage: http://metautonomo.us/projects/metasearch/
79
144
  licenses: []
80
145
 
81
146
  post_install_message:
@@ -84,6 +149,7 @@ rdoc_options:
84
149
  require_paths:
85
150
  - lib
86
151
  required_ruby_version: !ruby/object:Gem::Requirement
152
+ none: false
87
153
  requirements:
88
154
  - - ">="
89
155
  - !ruby/object:Gem::Version
@@ -91,6 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
157
  - 0
92
158
  version: "0"
93
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
+ none: false
94
161
  requirements:
95
162
  - - ">="
96
163
  - !ruby/object:Gem::Version
@@ -100,10 +167,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
167
  requirements: []
101
168
 
102
169
  rubyforge_project:
103
- rubygems_version: 1.3.6
170
+ rubygems_version: 1.3.7
104
171
  signing_key:
105
172
  specification_version: 3
106
- summary: ActiveRecord 3 object-based searching.
173
+ summary: ActiveRecord 3 object-based searching for your form_for enjoyment.
107
174
  test_files:
108
175
  - test/fixtures/company.rb
109
176
  - test/fixtures/data_type.rb
@@ -1,168 +0,0 @@
1
- require 'action_view'
2
- require 'action_dispatch'
3
-
4
- module ActionDispatch::Http::FilterParameters #:nodoc:
5
- protected
6
- # Temp fix for Rails 3 beta buggy parameter filtering on arrays
7
- def process_parameter_filter(original_params) #:nodoc:
8
- return original_params.dup unless filtering_parameters?
9
-
10
- filtered_params = {}
11
- regexps, blocks = compile_parameter_filter
12
-
13
- original_params.each do |key, value|
14
- if regexps.find { |r| key =~ r }
15
- value = '[FILTERED]'
16
- elsif value.is_a?(Hash)
17
- value = process_parameter_filter(value)
18
- elsif value.is_a?(Array)
19
- value = value.map { |v| v.is_a?(Hash) ? process_parameter_filter(v) : v }
20
- elsif blocks.present?
21
- key = key.dup
22
- value = value.dup if value.duplicable?
23
- blocks.each { |b| b.call(key, value) }
24
- end
25
-
26
- filtered_params[key] = value
27
- end
28
-
29
- filtered_params
30
- end
31
- end
32
-
33
- module MetaSearch::Helpers
34
- module FormBuilder
35
- def self.enable! #:nodoc:
36
- ::ActionView::Helpers::FormBuilder.class_eval do
37
- include FormBuilder
38
- self.field_helpers += ['multiparameter_field', 'check_boxes', 'collection_check_boxes']
39
- end
40
- end
41
-
42
- # Like other form_for field methods (text_field, hidden_field, password_field) etc,
43
- # but takes a list of hashes between the +method+ parameter and the trailing option hash,
44
- # if any, to specify a number of fields to create in multiparameter fashion.
45
- #
46
- # Each hash *must* contain a :field_type option, which specifies a form_for method, and
47
- # _may_ contain an optional :type_cast option, with one of the typical multiparameter
48
- # type cast characters. Any remaining options will be merged with the defaults specified
49
- # in the trailing option hash and passed along when creating that field.
50
- #
51
- # For example...
52
- #
53
- # <%= f.multiparameter_field :moderations_value_between,
54
- # {:field_type => :text_field, :class => 'first'},
55
- # {:field_type => :text_field, :type_cast => 'i'},
56
- # :size => 5 %>
57
- #
58
- # ...will create the following HTML:
59
- #
60
- # <input class="first" id="search_moderations_value_between(1)"
61
- # name="search[moderations_value_between(1)]" size="5" type="text" />
62
- #
63
- # <input id="search_moderations_value_between(2i)"
64
- # name="search[moderations_value_between(2i)]" size="5" type="text" />
65
- #
66
- # As with any multiparameter input fields, these will be concatenated into an
67
- # array and passed to the attribute named by the first parameter for assignment.
68
- def multiparameter_field(method, *args)
69
- defaults = has_multiparameter_defaults?(args) ? args.pop : {}
70
- raise ArgumentError, "No multiparameter fields specified" if args.blank?
71
- html = ''.html_safe
72
- args.each_with_index do |field, index|
73
- type = field.delete(:field_type) || raise(ArgumentError, "No :field_type specified.")
74
- cast = field.delete(:type_cast) || ''
75
- opts = defaults.merge(field)
76
- html.safe_concat(
77
- @template.send(
78
- type.to_s,
79
- @object_name,
80
- (method.to_s + "(#{index + 1}#{cast})"),
81
- objectify_options(opts))
82
- )
83
- end
84
- html
85
- end
86
-
87
- # Behaves almost exactly like the select method, but instead of generating a select tag,
88
- # generates checkboxes. Since these checkboxes are just a checkbox and label with no
89
- # additional formatting by default, this method can also take a block parameter.
90
- #
91
- # *Parameters:*
92
- #
93
- # * +method+ - The method name on the form_for object
94
- # * +choices+ - An array of arrays, the first value in each element is the text for the
95
- # label, and the last is the value for the checkbox
96
- # * +options+ - An options hash to be passed through to the checkboxes
97
- #
98
- # If a block is supplied, rather than just rendering the checkboxes and labels, the block
99
- # will receive a hash with two keys, :check_box and :label
100
- #
101
- # *Examples:*
102
- #
103
- # Simple usage:
104
- #
105
- # <%= f.check_boxes :number_of_heads_in,
106
- # [['One', 1], ['Two', 2], ['Three', 3]], :class => 'checkboxy' %>
107
- #
108
- # This will result in three checkboxes, with the labels "One", "Two", and "Three", and
109
- # corresponding numeric values, which will be sent as an array to the :number_of_heads_in
110
- # attribute of the form_for object.
111
- #
112
- # Additional formatting:
113
- #
114
- # <table>
115
- # <th colspan="2">How many heads?</th>
116
- # <% f.check_boxes :number_of_heads_in,
117
- # [['One', 1], ['Two', 2], ['Three', 3]], :class => 'checkboxy' do |c| %>
118
- # <tr>
119
- # <td><%= c[:check_box] %></td>
120
- # <td><%= c[:label] %></td>
121
- # </tr>
122
- # <% end %>
123
- # </table>
124
- #
125
- # This example will output the checkboxes and labels in a tabular format. You get the idea.
126
- def check_boxes(method, choices = [], options = {}, &block)
127
- unless choices.first.respond_to?(:first) && choices.first.respond_to?(:last)
128
- raise ArgumentError, 'invalid choice array specified'
129
- end
130
- collection_check_boxes(method, choices, :last, :first, options, &block)
131
- end
132
-
133
- # Just like +check_boxes+, but this time you can pass in a collection, value, and text method,
134
- # as with collection_select.
135
- #
136
- # Example:
137
- #
138
- # <%= f.collection_check_boxes :head_sizes_in, HeadSize.all,
139
- # :id, :name, :class => 'head-check' %>
140
- def collection_check_boxes(method, collection, value_method, text_method, options = {}, &block)
141
- html = ''.html_safe
142
- collection.each do |choice|
143
- text = choice.send(text_method)
144
- value = choice.send(value_method)
145
- c = {}
146
- c[:check_box] = @template.check_box_tag(
147
- "#{@object_name}[#{method}][]",
148
- value,
149
- [@object.send(method)].flatten.include?(value),
150
- options.merge(:id => [@object_name, method.to_s, value.to_s.underscore].join('_'))
151
- )
152
- c[:label] = @template.label_tag([@object_name, method.to_s, value.to_s.underscore].join('_'),
153
- text)
154
- yield c if block_given?
155
- html.safe_concat(c[:check_box] + c[:label])
156
- end
157
- html
158
- end
159
-
160
- private
161
-
162
- # If the last element of the arguments to multiparameter_field has no :field_type
163
- # key, we assume it's got some defaults to be used in the other hashes.
164
- def has_multiparameter_defaults?(args)
165
- args.size > 1 && args.last.is_a?(Hash) && !args.last.has_key?(:field_type)
166
- end
167
- end
168
- end