dynamic_fieldsets 0.0.16 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/.rdebugrc +3 -0
  2. data/.rspec +1 -0
  3. data/CHANGELOG +7 -0
  4. data/Gemfile +17 -8
  5. data/Gemfile.lock +77 -60
  6. data/README.rdoc +1 -1
  7. data/VERSION +1 -1
  8. data/app/controllers/dynamic_fieldsets/fields_controller.rb +5 -4
  9. data/app/helpers/dynamic_fieldsets_helper.rb +48 -131
  10. data/app/models/dynamic_fieldsets.rb +2 -0
  11. data/app/models/dynamic_fieldsets/checkbox_field.rb +29 -0
  12. data/app/models/dynamic_fieldsets/date_field.rb +37 -0
  13. data/app/models/dynamic_fieldsets/datetime_field.rb +36 -0
  14. data/app/models/dynamic_fieldsets/dependency.rb +1 -1
  15. data/app/models/dynamic_fieldsets/dependency_clause.rb +1 -1
  16. data/app/models/dynamic_fieldsets/dependency_group.rb +1 -1
  17. data/app/models/dynamic_fieldsets/field.rb +170 -42
  18. data/app/models/dynamic_fieldsets/field_default.rb +3 -3
  19. data/app/models/dynamic_fieldsets/field_html_attribute.rb +1 -1
  20. data/app/models/dynamic_fieldsets/field_option.rb +1 -1
  21. data/app/models/dynamic_fieldsets/field_record.rb +1 -1
  22. data/app/models/dynamic_fieldsets/fieldset.rb +36 -1
  23. data/app/models/dynamic_fieldsets/fieldset_associator.rb +9 -34
  24. data/app/models/dynamic_fieldsets/fieldset_child.rb +43 -24
  25. data/app/models/dynamic_fieldsets/instruction_field.rb +35 -0
  26. data/app/models/dynamic_fieldsets/multiple_select_field.rb +43 -0
  27. data/app/models/dynamic_fieldsets/radio_field.rb +27 -0
  28. data/app/models/dynamic_fieldsets/select_field.rb +16 -0
  29. data/app/models/dynamic_fieldsets/text_field.rb +14 -0
  30. data/app/models/dynamic_fieldsets/textarea_field.rb +40 -0
  31. data/app/views/dynamic_fieldsets/fields/_form.html.erb +50 -52
  32. data/app/views/dynamic_fieldsets/fields/edit.html.erb +5 -2
  33. data/app/views/dynamic_fieldsets/fields/index.html.erb +1 -1
  34. data/app/views/dynamic_fieldsets/fields/new.html.erb +3 -1
  35. data/app/views/dynamic_fieldsets/fields/show.html.erb +1 -1
  36. data/app/views/dynamic_fieldsets/fieldsets/_child.html.erb +1 -1
  37. data/app/views/dynamic_fieldsets/form_partials/_checkbox_field.html.erb +8 -0
  38. data/app/views/dynamic_fieldsets/form_partials/_date_field.html.erb +1 -0
  39. data/app/views/dynamic_fieldsets/form_partials/_datetime_field.html.erb +1 -0
  40. data/app/views/dynamic_fieldsets/form_partials/_input_footer.html.erb +1 -0
  41. data/app/views/dynamic_fieldsets/form_partials/_input_header.html.erb +7 -0
  42. data/app/views/dynamic_fieldsets/form_partials/_instruction_field.html.erb +1 -0
  43. data/app/views/dynamic_fieldsets/form_partials/_multiple_select_field.html.erb +1 -0
  44. data/app/views/dynamic_fieldsets/form_partials/_radio_field.html.erb +8 -0
  45. data/app/views/dynamic_fieldsets/form_partials/_select_field.html.erb +1 -0
  46. data/app/views/dynamic_fieldsets/form_partials/_text_field.html.erb +1 -0
  47. data/app/views/dynamic_fieldsets/form_partials/_textarea_field.html.erb +1 -0
  48. data/app/views/dynamic_fieldsets/shared/_javascript_watcher.html.erb +8 -8
  49. data/app/views/dynamic_fieldsets/show_partials/_show_incomplete.html.erb +1 -0
  50. data/app/views/dynamic_fieldsets/show_partials/_show_incomplete_footer.html.erb +2 -0
  51. data/app/views/dynamic_fieldsets/show_partials/_show_incomplete_header.html.erb +1 -0
  52. data/app/views/dynamic_fieldsets/show_partials/_show_instruction.html.erb +1 -0
  53. data/app/views/dynamic_fieldsets/show_partials/_show_multiple_answers.html.erb +13 -0
  54. data/app/views/dynamic_fieldsets/show_partials/_show_single_answer.html.erb +8 -0
  55. data/autotest/discover.rb +2 -0
  56. data/dynamic_fieldsets.gemspec +74 -20
  57. data/lib/dynamic_fieldsets/config.rb +45 -0
  58. data/lib/dynamic_fieldsets/dynamic_fieldsets_in_model.rb +38 -63
  59. data/lib/dynamic_fieldsets/field_with_field_options.rb +58 -0
  60. data/lib/dynamic_fieldsets/field_with_multiple_answers.rb +89 -0
  61. data/lib/dynamic_fieldsets/field_with_single_answer.rb +84 -0
  62. data/lib/dynamic_fieldsets/railtie.rb +6 -1
  63. data/lib/generators/dynamic_fieldsets/install_generator.rb +3 -3
  64. data/lib/generators/dynamic_fieldsets/templates/config.rb +15 -0
  65. data/lib/generators/dynamic_fieldsets/templates/migrations/install_migration.rb +1 -1
  66. data/spec/dummy/config/initializers/dynamic_fieldsets.rb +15 -0
  67. data/spec/dummy/db/migrate/20120213211033_create_dynamic_fieldsets_tables.rb +1 -1
  68. data/spec/dummy/db/schema.rb +1 -1
  69. data/spec/dummy/features/step_definitions/field_steps.rb +4 -4
  70. data/spec/dummy/features/step_definitions/fieldset_children_steps.rb +2 -2
  71. data/spec/dummy/features/step_definitions/javascript_steps.rb +7 -7
  72. data/spec/dynamic_fieldsets_helper_spec.rb +278 -312
  73. data/spec/dynamic_fieldsets_in_model_spec.rb +2 -2
  74. data/spec/field_with_field_options_spec.rb +49 -0
  75. data/spec/field_with_multiple_answers_spec.rb +50 -0
  76. data/spec/field_with_single_answer_spec.rb +51 -0
  77. data/spec/models/checkbox_field_spec.rb +19 -0
  78. data/spec/models/date_field_spec.rb +24 -0
  79. data/spec/models/datetime_field_spec.rb +24 -0
  80. data/spec/models/dependency_clause_spec.rb +7 -8
  81. data/spec/models/dependency_group_spec.rb +27 -30
  82. data/spec/models/dependency_spec.rb +8 -9
  83. data/spec/models/field_default_spec.rb +19 -14
  84. data/spec/models/field_html_attribute_spec.rb +3 -4
  85. data/spec/models/field_option_spec.rb +8 -9
  86. data/spec/models/field_record_spec.rb +8 -9
  87. data/spec/models/field_spec.rb +195 -94
  88. data/spec/models/fieldset_associator_spec.rb +39 -41
  89. data/spec/models/fieldset_child_spec.rb +99 -47
  90. data/spec/models/fieldset_spec.rb +25 -29
  91. data/spec/models/instruction_field_spec.rb +38 -0
  92. data/spec/models/multiple_select_field_spec.rb +31 -0
  93. data/spec/models/radio_field_spec.rb +21 -0
  94. data/spec/models/text_field_spec.rb +19 -0
  95. data/spec/models/textarea_field_spec.rb +39 -0
  96. data/spec/support/field_helper.rb +1 -1
  97. metadata +106 -28
@@ -6,295 +6,267 @@ describe DynamicFieldsetsHelper do
6
6
  include DynamicFieldsetsHelper
7
7
  include FieldsetHelper
8
8
 
9
- describe ".dynamic_fieldset_renderer" do
10
- before(:each) do
11
- @fsa = mock_model(FieldsetAssociator)
12
- @fsa.stub!(:id).and_return(2)
13
- @fsa.stub!(:fieldset).and_return mock_model(Fieldset)
14
- @fsa.stub!(:fieldset_id).and_return(1)
15
- @fsa.stub!(:fieldset_model_name).and_return("Turkey")
16
- @fsa.stub!(:field_values).and_return []
17
- stub!(:fieldset_renderer).and_return []
18
- end
19
-
20
- it "should include a form object and a field set associator object" do
21
- lambda { dynamic_fieldset_renderer(@fsa, "form") }.should_not raise_error
22
- end
23
-
24
- it "should call the fieldset_renderer with the fsa's root fieldset" do
25
- @fsa.should_receive(:fieldset)
26
- dynamic_fieldset_renderer(@fsa, "form")
27
- end
28
-
29
- it "should return a string of html" do
30
- dynamic_fieldset_renderer(@fsa, "form").should be_a_kind_of String
31
- end
32
- end
33
-
34
- describe "dynamic_fieldset_form_renderer method" do
35
- it "should call dynamic_fieldset_renderer with 'form'" do
36
- pending 'hex is working on this'
37
- fsa = mock_model(FieldsetAssociator)
38
- self.should_receive(:dynamic_fieldset_renderer).with(fsa, "form")
39
- dynamic_fieldset_form_renderer(fsa)
40
- end
41
- end
42
-
43
- describe "dynamic_fieldset_show_renderer" do
44
- it "should call dynamic_fieldset_renderer with 'show'" do
45
- fsa = mock_model(FieldsetAssociator)
46
- self.should_receive(:dynamic_fieldset_renderer).with(fsa, "show")
47
- dynamic_fieldset_show_renderer(fsa)
48
- end
49
- end
50
-
51
- describe ".fieldset_renderer" do
52
- before(:each) do
53
- @fsa = mock_model(FieldsetAssociator)
54
- @fieldset = Fieldset.new
55
- @fieldset.stub!(:id).and_return 326
56
- @values = {}
57
- @form_type = "form"
58
- DynamicFieldsets::FieldsetChild.stub!(:where).and_return( [mock_model(FieldsetChild)] )
59
- end
60
-
61
- it "should include the fsa object, fieldset object, and a values hash" do
62
- lambda { fieldset_renderer(@fsa,@fieldset,@values, @form_type) }.should_not raise_error
63
- end
64
-
65
- it "should call the children method on the fieldset object" do
66
- @fieldset.should_receive(:children).and_return []
67
- fieldset_renderer(@fsa,@fieldset,@values, @form_type)
68
- end
69
-
70
- it "should call the field_renderer method if the current child is a field" do
71
- @field = mock_model(Field)
72
- @fieldset.stub!(:children).and_return [@field]
73
- self.should_receive(:field_renderer).and_return []
74
- fieldset_renderer(@fsa,@fieldset,@values, @form_type)
75
- end
76
-
77
- it "should call the fieldset_renderer recursively if the current child is a fieldset" do
78
- @child_fieldset = mock_model(Fieldset)
79
- @fieldset.stub!(:children).and_return [@child_fieldset]
80
- self.should_receive(:fieldset_renderer)
81
- fieldset_renderer(@fsa,@fieldset,@values, @form_type)
82
- end
83
-
84
- it "should include markup for the fieldset itself" do
85
- fieldset_renderer(@fsa,@fieldset,@values, @form_type).join.should match /id=["']fieldset-326["']/
86
- end
87
-
88
- it "should return an array of html elements" do
89
- fieldset_renderer(@fsa,@fieldset,@values, @form_type).should be_a_kind_of Array
90
- end
91
- end
92
-
93
- describe ".field_form_renderer appends html attributes to the field element" do
9
+ describe "field_renderer method" do
94
10
  before(:each) do
95
11
  @fsa = mock_model FieldsetAssociator
96
- @field = Field.new
97
12
  @fieldset_child = mock_model FieldsetChild
98
- @fieldset_child.stub!(:child).and_return @field
99
- @fieldset_child.stub!(:id).and_return 200
100
-
101
- @field.stub!(:id).and_return 420
102
- @field.stub!(:has_default?).and_return false
103
- @field.stub!(:default).and_return ""
104
- @field.stub!(:options).and_return []
105
13
  @values = []
106
- @htmlattr = mock_model FieldHtmlAttribute
107
- @htmlattr.stub!(:attribute_name).and_return 'class'
108
- @htmlattr.stub!(:value).and_return 'test'
109
- @field.stub!(:field_html_attributes).and_return [@htmlattr]
110
- @option = mock_model FieldOption
111
- @option.stub!(:name).and_return 'option1'
112
14
  end
113
15
 
114
- it "successfully for fieldtype radio" do
115
- @field.stub!(:field_type).and_return 'radio'
116
- @field.stub!(:options).and_return [@option]
117
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
118
- end
119
- it "successfully for fieldtype checkbox" do
120
- @field.stub!(:field_type).and_return 'checkbox'
121
- @field.stub!(:options).and_return [@option]
122
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
123
- end
124
- it "successfully for fieldtype select" do
125
- @field.stub!(:field_type).and_return 'select'
126
- @field.stub!(:options).and_return [@option]
127
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
128
- end
129
- it "successfully for fieldtype multiple_select" do
130
- @field.stub!(:field_type).and_return 'multiple_select'
131
- @field.stub!(:options).and_return [@option]
132
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
133
- end
134
- it "successfully for fieldtype textfield" do
135
- @field.stub!(:field_type).and_return 'textfield'
136
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
137
- end
138
- it "successfully for fieldtype textarea" do
139
- @field.stub!(:field_type).and_return 'textarea'
140
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
141
- end
142
- it "successfully for fieldtype date" do
143
- @field.stub!(:field_type).and_return 'date'
144
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
145
- end
146
- it "successfully for fieldtype datetime" do
147
- @field.stub!(:field_type).and_return 'datetime'
148
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /class=["']test["']/
16
+ it "should call the form helper if the form_type is form" do
17
+ self.should_receive(:field_form_renderer)
18
+ field_renderer(@fsa, @fieldset_child, @values, "form")
19
+ end
20
+
21
+ it "should default to the show helper if the form_type is not form" do
22
+ self.should_receive(:field_show_renderer)
23
+ field_renderer(@fsa, @fieldset_child, @values, "show")
149
24
  end
150
25
  end
151
-
152
- describe ".field_form_renderer appends the field id and child id attribute to the field element" do
26
+
27
+ describe "field_show_renderer method" do
153
28
  before(:each) do
154
- @field_id = 420
155
- @child_id = 365
29
+ pending "This was significantly refactored"
156
30
  @fsa = mock_model FieldsetAssociator
157
31
  @field = Field.new
158
32
  @fieldset_child = mock_model FieldsetChild
159
33
  @fieldset_child.stub!(:child).and_return @field
160
- @fieldset_child.stub!(:id).and_return @child_id
161
- @field.stub!(:id).and_return @field_id
162
- @field.stub!(:has_default?).and_return false
163
- @field.stub!(:default).and_return ""
164
- @field.stub!(:options).and_return []
34
+ @fieldset_child.stub!(:id).and_return 420
165
35
  @values = []
166
- @htmlattr = mock_model FieldHtmlAttribute
167
- @htmlattr.stub!(:attribute_name).and_return 'class'
168
- @htmlattr.stub!(:value).and_return 'test'
169
- @field.stub!(:field_html_attributes).and_return [@htmlattr]
170
- @option = mock_model FieldOption
171
- @option.stub!(:name).and_return 'option1'
172
36
  end
173
-
174
- it "successfully for fieldtype radio" do
175
- @field.stub!(:field_type).and_return 'radio'
176
- @field.stub!(:options).and_return [@option]
177
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
178
- end
179
- it "successfully for fieldtype checkbox" do
180
- @field.stub!(:field_type).and_return 'checkbox'
181
- @field.stub!(:options).and_return [@option]
182
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
183
- end
184
- it "successfully for fieldtype select" do
185
- @field.stub!(:field_type).and_return 'select'
186
- @field.stub!(:options).and_return [@option]
187
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
188
- end
189
- it "successfully for fieldtype multiple_select" do
190
- @field.stub!(:field_type).and_return 'multiple_select'
191
- @field.stub!(:options).and_return [@option]
192
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
193
- end
194
- it "successfully for fieldtype textfield" do
195
- @field.stub!(:field_type).and_return 'textfield'
196
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
197
- end
198
- it "successfully for fieldtype textarea" do
199
- @field.stub!(:field_type).and_return 'textarea'
200
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
201
- end
202
- it "successfully for fieldtype date" do
203
- @field.stub!(:field_type).and_return 'date'
204
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
205
- end
206
- it "successfully for fieldtype datetime" do
207
- @field.stub!(:field_type).and_return 'datetime'
208
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /id=["']field-#{@field_id}-child-#{@child_id}["']/
37
+
38
+ it "should return an array of strings" do
39
+ result = field_show_renderer(@fsa, @fieldset_child, @values)
40
+ result.should be_a_kind_of Array
209
41
  end
210
- end
211
42
 
212
- describe ".field_form_renderer" do
213
- before(:each) do
214
- @fsa = mock_model FieldsetAssociator
215
- @field = Field.new
216
- @fieldset_child = mock_model FieldsetChild
217
- @fieldset_child.stub!(:child).and_return @field
218
- @fieldset_child.stub!(:id).and_return 300
219
- @field.stub!(:id).and_return 420
220
- @field.stub!(:html_attributes).and_return []
221
- @field.stub!(:has_default?).and_return false
222
- @field.stub!(:default).and_return ""
223
- @field.stub!(:field_type).and_return ""
224
- @field.stub!(:options).and_return []
225
- @values = []
43
+ it "should include the class field" do
44
+ field_show_renderer(@fsa, @fieldset_child, @values).join.should match(/field/)
226
45
  end
227
-
228
- it "includes the form object, the field object, and an array of values" do
229
- lambda { field_form_renderer(@fsa,@fieldset_child,@values) }.should_not raise_error
46
+
47
+ it "should include the class label" do
48
+ field_show_renderer(@fsa, @fieldset_child, @values).join.should match(/label/)
230
49
  end
231
50
 
232
- it "calls the html_attributes method for the field" do
233
- @field.should_receive(:field_html_attributes).and_return []
234
- field_form_renderer(@fsa,@fieldset_child,@values)
51
+ it "should include the class value" do
52
+ field_show_renderer(@fsa, @fieldset_child, @values).join.should match(/value/)
235
53
  end
236
54
 
237
- it "calls the field_options method for the field if it is a select" do
238
- @field.stub!(:field_type).and_return 'select'
239
- @field.should_receive(:options)
240
- field_form_renderer(@fsa,@fieldset_child,@values)
55
+ it "should return 'No answer given' if the field has no answer for the current fieldset associator" do
56
+ field_show_renderer(@fsa, @fieldset_child, nil).join.should match(/No answer given/)
241
57
  end
242
-
243
- it "calls the field_options method for the field if it is a multiple select" do
244
- @field.stub!(:field_type).and_return 'multiple_select'
245
- @field.should_receive(:options)
246
- field_form_renderer(@fsa,@fieldset_child,@values)
58
+ end
59
+
60
+ describe "field_form_renderer" do
61
+ before do
62
+ pending "significant refactoring done here. probably all of these are trash now"
247
63
  end
248
-
249
- it "calls the field_options method for the field if it is a checkbox" do
250
- @field.stub!(:field_type).and_return 'checkbox'
251
- @field.should_receive(:options)
252
- field_form_renderer(@fsa,@fieldset_child,@values)
64
+
65
+ describe ".field_form_renderer appends html attributes to the field element" do
66
+ before(:each) do
67
+ @fsa = mock_model FieldsetAssociator
68
+ @field = Field.new
69
+ @fieldset_child = mock_model FieldsetChild
70
+ @fieldset_child.stub!(:child).and_return @field
71
+ @fieldset_child.stub!(:id).and_return 200
72
+
73
+ @field.stub!(:id).and_return 420
74
+ @field.stub!(:has_default?).and_return false
75
+ @field.stub!(:default).and_return ""
76
+ @field.stub!(:options).and_return []
77
+ @values = []
78
+ @htmlattr = mock_model FieldHtmlAttribute
79
+ @htmlattr.stub!(:attribute_name).and_return 'class'
80
+ @htmlattr.stub!(:value).and_return 'test'
81
+ @field.stub!(:field_html_attributes).and_return [@htmlattr]
82
+ @option = mock_model FieldOption
83
+ @option.stub!(:name).and_return 'option1'
84
+ end
85
+
86
+ it "successfully for fieldtype radio" do
87
+ @field.stub!(:type).and_return 'radio'
88
+ @field.stub!(:options).and_return [@option]
89
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
90
+ end
91
+ it "successfully for fieldtype checkbox" do
92
+ @field.stub!(:type).and_return 'checkbox'
93
+ @field.stub!(:options).and_return [@option]
94
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
95
+ end
96
+ it "successfully for fieldtype select" do
97
+ @field.stub!(:type).and_return 'select'
98
+ @field.stub!(:options).and_return [@option]
99
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
100
+ end
101
+ it "successfully for fieldtype multiple_select" do
102
+ @field.stub!(:type).and_return 'multiple_select'
103
+ @field.stub!(:options).and_return [@option]
104
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
105
+ end
106
+ it "successfully for fieldtype textfield" do
107
+ @field.stub!(:type).and_return 'textfield'
108
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
109
+ end
110
+ it "successfully for fieldtype textarea" do
111
+ @field.stub!(:type).and_return 'textarea'
112
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
113
+ end
114
+ it "successfully for fieldtype date" do
115
+ @field.stub!(:type).and_return 'date'
116
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
117
+ end
118
+ it "successfully for fieldtype datetime" do
119
+ @field.stub!(:type).and_return 'datetime'
120
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/class=["']test["']/)
121
+ end
253
122
  end
254
123
 
255
- it "calls the field_options method for the field if it is a radio" do
256
- @field.stub!(:field_type).and_return 'radio'
257
- @field.should_receive(:options)
258
- field_form_renderer(@fsa,@fieldset_child,@values)
124
+ describe ".field_form_renderer appends the field id and child id attribute to the field element" do
125
+ before(:each) do
126
+ @field_id = 420
127
+ @child_id = 365
128
+ @fsa = mock_model FieldsetAssociator
129
+ @field = Field.new
130
+ @fieldset_child = mock_model FieldsetChild
131
+ @fieldset_child.stub!(:child).and_return @field
132
+ @fieldset_child.stub!(:id).and_return @child_id
133
+ @field.stub!(:id).and_return @field_id
134
+ @field.stub!(:has_default?).and_return false
135
+ @field.stub!(:default).and_return ""
136
+ @field.stub!(:options).and_return []
137
+ @values = []
138
+ @htmlattr = mock_model FieldHtmlAttribute
139
+ @htmlattr.stub!(:attribute_name).and_return 'class'
140
+ @htmlattr.stub!(:value).and_return 'test'
141
+ @field.stub!(:field_html_attributes).and_return [@htmlattr]
142
+ @option = mock_model FieldOption
143
+ @option.stub!(:name).and_return 'option1'
144
+ end
145
+
146
+ it "successfully for fieldtype radio" do
147
+ @field.stub!(:type).and_return 'radio'
148
+ @field.stub!(:options).and_return [@option]
149
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
150
+ end
151
+ it "successfully for fieldtype checkbox" do
152
+ @field.stub!(:type).and_return 'checkbox'
153
+ @field.stub!(:options).and_return [@option]
154
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
155
+ end
156
+ it "successfully for fieldtype select" do
157
+ @field.stub!(:type).and_return 'select'
158
+ @field.stub!(:options).and_return [@option]
159
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
160
+ end
161
+ it "successfully for fieldtype multiple_select" do
162
+ @field.stub!(:type).and_return 'multiple_select'
163
+ @field.stub!(:options).and_return [@option]
164
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
165
+ end
166
+ it "successfully for fieldtype textfield" do
167
+ @field.stub!(:type).and_return 'textfield'
168
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
169
+ end
170
+ it "successfully for fieldtype textarea" do
171
+ @field.stub!(:type).and_return 'textarea'
172
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
173
+ end
174
+ it "successfully for fieldtype date" do
175
+ @field.stub!(:type).and_return 'date'
176
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
177
+ end
178
+ it "successfully for fieldtype datetime" do
179
+ @field.stub!(:type).and_return 'datetime'
180
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/id=["']field-#{@field_id}-child-#{@child_id}["']/)
181
+ end
259
182
  end
260
-
183
+
184
+ describe ".field_form_renderer" do
185
+ before(:each) do
186
+ @fsa = mock_model FieldsetAssociator
187
+ @field = Field.new
188
+ @fieldset_child = mock_model FieldsetChild
189
+ @fieldset_child.stub!(:child).and_return @field
190
+ @fieldset_child.stub!(:id).and_return 300
191
+ @field.stub!(:id).and_return 420
192
+ @field.stub!(:html_attributes).and_return []
193
+ @field.stub!(:has_default?).and_return false
194
+ @field.stub!(:default).and_return ""
195
+ @field.stub!(:type).and_return ""
196
+ @field.stub!(:options).and_return []
197
+ @values = []
198
+ end
199
+
200
+ it "includes the form object, the field object, and an array of values" do
201
+ lambda { field_form_renderer(@fsa,@fieldset_child,@values) }.should_not raise_error
202
+ end
203
+
204
+ it "calls the html_attributes method for the field" do
205
+ @field.should_receive(:field_html_attributes).and_return []
206
+ field_form_renderer(@fsa,@fieldset_child,@values)
207
+ end
208
+
209
+ it "calls the field_options method for the field if it is a select" do
210
+ @field.stub!(:type).and_return 'select'
211
+ @field.should_receive(:options)
212
+ field_form_renderer(@fsa,@fieldset_child,@values)
213
+ end
214
+
215
+ it "calls the field_options method for the field if it is a multiple select" do
216
+ @field.stub!(:type).and_return 'multiple_select'
217
+ @field.should_receive(:options)
218
+ field_form_renderer(@fsa,@fieldset_child,@values)
219
+ end
220
+
221
+ it "calls the field_options method for the field if it is a checkbox" do
222
+ @field.stub!(:type).and_return 'checkbox'
223
+ @field.should_receive(:options)
224
+ field_form_renderer(@fsa,@fieldset_child,@values)
225
+ end
226
+
227
+ it "calls the field_options method for the field if it is a radio" do
228
+ @field.stub!(:type).and_return 'radio'
229
+ @field.should_receive(:options)
230
+ field_form_renderer(@fsa,@fieldset_child,@values)
231
+ end
232
+ end
261
233
 
262
234
  ## HELPER TAGS
263
235
 
264
236
  it "has a label tag" do
265
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /<label for=/
237
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/<label for=/)
266
238
  end
267
239
 
268
240
  it "does not have a label tag for type instruction" do
269
- @field.stub!(:field_type).and_return 'instruction'
270
- field_form_renderer(@fsa,@fieldset_child,@values).join.should_not match /<label for=/
241
+ @field.stub!(:type).and_return 'instruction'
242
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should_not match(/<label for=/)
271
243
  end
272
244
 
273
245
  it "displays label content enclosed in <p> tags for type instruction" do
274
- @field.stub!(:field_type).and_return 'instruction'
246
+ @field.stub!(:type).and_return 'instruction'
275
247
  @field.stub!(:label).and_return 'some label'
276
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /<p>some label<\/p>/
248
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/<p>some label<\/p>/)
277
249
  end
278
250
 
279
251
  it "calls select_tag if the type is select" do
280
- @field.stub!(:field_type).and_return 'select'
252
+ @field.stub!(:type).and_return 'select'
281
253
  should_receive(:select_tag)
282
254
  field_form_renderer(@fsa,@fieldset_child,@values)
283
255
  end
284
256
 
285
257
  it "calls select_tag if the type is multiple select" do
286
- @field.stub!(:field_type).and_return 'multiple_select'
258
+ @field.stub!(:type).and_return 'multiple_select'
287
259
  should_receive(:select_tag)
288
260
  field_form_renderer(@fsa,@fieldset_child,@values)
289
261
  end
290
262
 
291
263
  it "has the multiple attribute set if the type is multiple select" do
292
- @field.stub!(:field_type).and_return 'multiple_select'
293
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /multiple=["']multiple["']/
264
+ @field.stub!(:type).and_return 'multiple_select'
265
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/multiple=["']multiple["']/)
294
266
  end
295
267
 
296
268
  it "calls text_field if the type is textfield" do
297
- @field.stub!(:field_type).and_return 'textfield'
269
+ @field.stub!(:type).and_return 'textfield'
298
270
  should_receive(:text_field)
299
271
  field_form_renderer(@fsa,@fieldset_child,@values)
300
272
  end
@@ -302,7 +274,7 @@ describe DynamicFieldsetsHelper do
302
274
  it "calls check_box_tag if the type is checkbox" do
303
275
  option = mock_model(FieldOption)
304
276
  option.stub!(:name).and_return ""
305
- @field.stub!(:field_type).and_return 'checkbox'
277
+ @field.stub!(:type).and_return 'checkbox'
306
278
  @field.stub!(:options).and_return [option]
307
279
  should_receive(:check_box_tag)
308
280
  field_form_renderer(@fsa,@fieldset_child,@values)
@@ -311,25 +283,25 @@ describe DynamicFieldsetsHelper do
311
283
  it "calls radio_button if the type is radio" do
312
284
  option = mock_model(FieldOption)
313
285
  option.stub!(:name).and_return ""
314
- @field.stub!(:field_type).and_return 'radio'
286
+ @field.stub!(:type).and_return 'radio'
315
287
  @field.stub!(:options).and_return [option]
316
288
  should_receive(:radio_button)
317
289
  field_form_renderer(@fsa,@fieldset_child,@values)
318
290
  end
319
291
 
320
292
  it "has a text_area tag if the type is textarea" do
321
- @field.stub!(:field_type).and_return 'textarea'
322
- field_form_renderer(@fsa,@fieldset_child,@values).join.should match /<textarea/
293
+ @field.stub!(:type).and_return 'textarea'
294
+ field_form_renderer(@fsa,@fieldset_child,@values).join.should match(/<textarea/)
323
295
  end
324
296
 
325
297
  it "calls date_select if the type is date" do
326
- @field.stub!(:field_type).and_return 'date'
298
+ @field.stub!(:type).and_return 'date'
327
299
  should_receive(:date_select)
328
300
  field_form_renderer(@fsa,@fieldset_child,@values)
329
301
  end
330
302
 
331
303
  it "calls datetime_select if the type is datetime" do
332
- @field.stub!(:field_type).and_return 'datetime'
304
+ @field.stub!(:type).and_return 'datetime'
333
305
  should_receive(:datetime_select)
334
306
  field_form_renderer(@fsa,@fieldset_child,@values)
335
307
  end
@@ -340,97 +312,91 @@ describe DynamicFieldsetsHelper do
340
312
  end
341
313
  end
342
314
 
343
- describe "field_show_renderer method" do
315
+ describe ".fieldset_renderer" do
344
316
  before(:each) do
345
- @fsa = mock_model FieldsetAssociator
346
- @field = Field.new
347
- @fieldset_child = mock_model FieldsetChild
348
- @fieldset_child.stub!(:child).and_return @field
349
- @fieldset_child.stub!(:id).and_return 420
350
- @values = []
317
+ @fsa = mock_model(FieldsetAssociator)
318
+ @fieldset = Fieldset.new
319
+ @fieldset.stub!(:id).and_return 326
320
+ @values = {}
321
+ @form_type = "form"
322
+ DynamicFieldsets::FieldsetChild.stub!(:where).and_return( [mock_model(FieldsetChild)] )
351
323
  end
352
324
 
353
- it "should return an array of strings" do
354
- result = field_show_renderer(@fsa, @fieldset_child, @values)
355
- result.should be_a_kind_of Array
325
+ it "should include the fsa object, fieldset object, and a values hash" do
326
+ lambda { fieldset_renderer(@fsa,@fieldset,@values, @form_type) }.should_not raise_error
356
327
  end
357
328
 
358
- it "should include the class field" do
359
- field_show_renderer(@fsa, @fieldset_child, @values).join.should match /field/
329
+ it "should call the children method on the fieldset object" do
330
+ @fieldset.should_receive(:children).and_return []
331
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type)
360
332
  end
361
-
362
- it "should include the class label" do
363
- field_show_renderer(@fsa, @fieldset_child, @values).join.should match /label/
333
+
334
+ it "should call the field_renderer method if the current child is a field" do
335
+ @field = mock_model(Field)
336
+ @fieldset.stub!(:children).and_return [@field]
337
+ self.should_receive(:field_renderer).and_return []
338
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type)
364
339
  end
365
-
366
- it "should include the class value" do
367
- field_show_renderer(@fsa, @fieldset_child, @values).join.should match /value/
340
+
341
+ it "should call the fieldset_renderer recursively if the current child is a fieldset" do
342
+ @child_fieldset = mock_model(Fieldset)
343
+ @fieldset.stub!(:children).and_return [@child_fieldset]
344
+ self.should_receive(:fieldset_renderer)
345
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type)
368
346
  end
369
347
 
370
- it "should return 'No answer given' if the field has no answer for the current fieldset associator" do
371
- field_show_renderer(@fsa, @fieldset_child, nil).join.should match /No answer given/
372
- end
373
- end
374
-
375
- describe "field_renderer method" do
376
- before(:each) do
377
- @fsa = mock_model FieldsetAssociator
378
- @fieldset_child = mock_model FieldsetChild
379
- @values = []
348
+ it "should include markup for the fieldset itself" do
349
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type).join.should match(/id=["']fieldset-326["']/)
380
350
  end
381
351
 
382
- it "should call the form helper if the form_type is form" do
383
- self.should_receive(:field_form_renderer)
384
- field_renderer(@fsa, @fieldset_child, @values, "form")
352
+ it "should return an array of html elements" do
353
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type).should be_a_kind_of Array
385
354
  end
355
+ end
386
356
 
387
- it "should default to the show helper if the form_type is not form" do
388
- self.should_receive(:field_show_renderer)
389
- field_renderer(@fsa, @fieldset_child, @values, "show")
357
+ describe "dynamic_fieldset_show_renderer" do
358
+ it "should call dynamic_fieldset_renderer with 'show'" do
359
+ fsa = mock_model(FieldsetAssociator)
360
+ self.should_receive(:dynamic_fieldset_renderer).with(fsa, "show")
361
+ dynamic_fieldset_show_renderer(fsa)
390
362
  end
391
363
  end
392
364
 
393
- describe "populate method" do
394
- before(:each) do
395
- @field = mock_model Field
396
- end
397
-
398
- it "calls field_defaults if no value is passed" do
399
- value = nil
400
- @field.should_receive(:field_defaults).and_return []
401
- populate(@field,value)
365
+ describe "dynamic_fieldset_form_renderer method" do
366
+ it "should call dynamic_fieldset_renderer with 'form'" do
367
+ pending 'hex is working on this'
368
+ fsa = mock_model(FieldsetAssociator)
369
+ self.should_receive(:dynamic_fieldset_renderer).with(fsa, "form")
370
+ dynamic_fieldset_form_renderer(fsa)
402
371
  end
403
-
404
- it "calls field_defaults if empty value array is passed" do
405
- value = []
406
- @field.should_receive(:field_defaults).and_return []
407
- populate(@field,value)
372
+ end
373
+
374
+ describe ".dynamic_fieldset_renderer" do
375
+ before(:each) do
376
+ @fsa = mock_model(FieldsetAssociator)
377
+ @fsa.stub!(:id).and_return(2)
378
+ @fsa.stub!(:fieldset).and_return mock_model(Fieldset)
379
+ @fsa.stub!(:fieldset_id).and_return(1)
380
+ @fsa.stub!(:fieldset_model_name).and_return("Turkey")
381
+ @fsa.stub!(:field_values).and_return []
382
+ stub!(:fieldset_renderer).and_return []
408
383
  end
409
-
410
- it "returns value if one is passed" do
411
- value = "test"
412
- result = populate(@field,value)
413
- result.should == "test"
384
+
385
+ it "should include a form object and a field set associator object" do
386
+ lambda { dynamic_fieldset_renderer(@fsa, "form") }.should_not raise_error
414
387
  end
415
-
416
- it "returns a default value if one exists" do
417
- @default = mock_model FieldDefault
418
- @default.stub!(:value).and_return "test"
419
- value = nil
420
- @field.stub!(:field_defaults).and_return [@default]
421
- result = populate(@field,value)
422
- result.should == "test"
388
+
389
+ it "should call the fieldset_renderer with the fsa's root fieldset" do
390
+ @fsa.should_receive(:fieldset)
391
+ dynamic_fieldset_renderer(@fsa, "form")
423
392
  end
424
-
425
- it "returns multiple defaults if they exist" do
426
- @default1 = mock_model FieldDefault
427
- @default1.stub!(:value).and_return "Robin"
428
- @default2 = mock_model FieldDefault
429
- @default2.stub!(:value).and_return "Sparrow"
430
- value = nil
431
- @field.stub!(:field_defaults).and_return [@default1, @default2]
432
- populate(@field,value)
393
+
394
+ it "should return a string of html" do
395
+ dynamic_fieldset_renderer(@fsa, "form").should be_a_kind_of String
433
396
  end
434
-
397
+ end
398
+
399
+ describe ".javascript_renderer" do
400
+ it "needs tests"
435
401
  end
436
402
  end