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
@@ -1,6 +1,9 @@
1
1
  <h1>Editing field</h1>
2
2
 
3
- <%= render 'form' %>
3
+ <%= form_for(@field, :as => :dynamic_fieldsets_field, :url => dynamic_fieldsets_field_path, :method => :put) do |f| %>
4
+ <%= render :partial => 'form', :locals => { :f => f } %>
5
+ <% end %>
4
6
 
5
- <%= link_to 'Show', @field %> |
7
+
8
+ <%= link_to 'Show', dynamic_fieldsets_field_path(@field) %> |
6
9
  <%= link_to 'Back', dynamic_fieldsets_fields_path %>
@@ -12,7 +12,7 @@
12
12
  <% @fields.each do |field| %>
13
13
  <tr>
14
14
  <td><%= field.name %></td>
15
- <td><%= field.field_type %></td>
15
+ <td><%= field.type %></td>
16
16
  <td><%= link_to 'Show', dynamic_fieldsets_field_path(field) %></td>
17
17
  <td><%= link_to 'Edit', edit_dynamic_fieldsets_field_path(field) %></td>
18
18
  <td><%= render :partial => "disable_field_form", :locals => { :field => field } %></td>
@@ -1,6 +1,8 @@
1
1
  <h1>New field</h1>
2
2
 
3
- <%= render 'form' %>
3
+ <%= form_for(@field) do |f| %>
4
+ <%= render :partial => 'form', :locals => { :f => f } %>
5
+ <% end %>
4
6
 
5
7
  <% if params[:parent].nil? %>
6
8
  <%= link_to 'Back', dynamic_fieldsets_fields_path %>
@@ -10,7 +10,7 @@
10
10
 
11
11
  <p>
12
12
  <b>Type:</b>
13
- <%= @field.field_type %>
13
+ <%= @field.type %>
14
14
  </p>
15
15
 
16
16
  <% if @field.field_options.length > 0 %>
@@ -27,7 +27,7 @@
27
27
  <% fieldset_child = DynamicFieldsets::FieldsetChild.where( fieldset_id: fieldset.id, child_id: child.id, child_type: "DynamicFieldsets::Field" ).first %>
28
28
  <li id="child-<%= fieldset_child.id %>" class="field<%= ' required' if child.required? %>">
29
29
  <div>
30
- <span class="fieldtype"><%= child.field_type %>:</span>
30
+ <span class="fieldtype"><%= child.type %>:</span>
31
31
  <span class="name"><%= child.label %></span>
32
32
  <span class="admin">
33
33
  <span class="show"><%= link_to 'Show', dynamic_fieldsets_field_path(child) %></span>
@@ -0,0 +1,8 @@
1
+ <div id='<%= id %>' name='<%= name %>'>
2
+ <% options.each do |option| %>
3
+ <label for='<%= option[:name] %>'>
4
+ <%= check_box_tag(option[:name], option[:value], option[:checked], option[:html_attributes]) %>
5
+ <%= option[:label] %>
6
+ </label>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1 @@
1
+ <%= date_select(object, method, date_options, attrs) %>
@@ -0,0 +1 @@
1
+ <%= datetime_select(object, method, date_options, attrs) %>
@@ -0,0 +1,7 @@
1
+ <li class='<%= classes %>' id='input-<%= DynamicFieldsets.config.form_field_prefix %><%= field.id %>-child-<%= fieldset_child.id %>'>
2
+ <label for ='<%=DynamicFieldsets.config.form_field_prefix %><%= field.id %>'>
3
+ <%= field.label %>
4
+ <% if field.required? %>
5
+ <abbr title='required'>*</abbr>
6
+ <% end %>
7
+ </label>
@@ -0,0 +1 @@
1
+ <%= select_tag(name, options_from_collection_for_select( collection, :id, :name, selected_ids ), attrs) %>
@@ -0,0 +1,8 @@
1
+ <div id='<%= name %>'>
2
+ <% options.each do |option| %>
3
+ <label for='<%= option[:name] %>'>
4
+ <%= radio_button_tag(option[:name], option[:value], option[:checked], option[:html_attributes]) %>
5
+ <%= option[:label] %>
6
+ </label>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1 @@
1
+ <%= select_tag(name, options_from_collection_for_select( collection, :id, :name, selected_id ), attrs) %>
@@ -0,0 +1 @@
1
+ <%= text_field object, method, attrs %>
@@ -0,0 +1 @@
1
+ <%= text_area_tag(name, content, attrs) %>
@@ -13,8 +13,8 @@ var allInputs = $(":input:not(:hidden)");
13
13
 
14
14
  ***************************************************************************/
15
15
 
16
- function grab_fsc_id(field, field_type) {
17
- switch(field_type)
16
+ function grab_fsc_id(field, type) {
17
+ switch(type)
18
18
  {
19
19
  case 'text':
20
20
  var id_array = field.attr('id').split('-');
@@ -114,8 +114,8 @@ function group_action(success_flag, action, group_field) {
114
114
  }
115
115
  };
116
116
 
117
- function grab_value(field, field_type) {
118
- switch(field_type)
117
+ function grab_value(field, type) {
118
+ switch(type)
119
119
  {
120
120
  case 'text':
121
121
  return field.attr('value').toLowerCase();
@@ -204,15 +204,15 @@ function getIntersect(arr1, arr2) {
204
204
 
205
205
  allInputs.change( function() {
206
206
  var field = $(this);
207
- var field_type = grab_type(field);
208
- var fieldset_child_id = grab_fsc_id(field, field_type);
209
- var entered_value = grab_value(field, field_type)
207
+ var type = grab_type(field);
208
+ var fieldset_child_id = grab_fsc_id(field, type);
209
+ var entered_value = grab_value(field, type)
210
210
  if (fieldset_child_id in json_holder) {
211
211
  for (var group in json_holder[fieldset_child_id]) {
212
212
  var action = json_holder[fieldset_child_id][group]['action'];
213
213
  var group_fsc_id = json_holder[fieldset_child_id][group]['fieldset_child_id'];
214
214
  var group_field_id = json_holder[fieldset_child_id][group]['field_id'];
215
- var group_field = 'field-' + group_field_id + '-child-' + group_fsc_id;
215
+ var group_field = '<%= DynamicFieldsets.config.form_field_prefix %>' + group_field_id + '-child-' + group_fsc_id;
216
216
 
217
217
  // As each dependency clause is AND'd together, we'll assume it'll be
218
218
  // true until short circuited into being false.`
@@ -0,0 +1 @@
1
+ <p>This field type needs to set the show_partial to an existing partial.</p>
@@ -0,0 +1,2 @@
1
+ <p>This footer needs to be overridden by setting show_footer_partial in your child Field class.</p>
2
+
@@ -0,0 +1 @@
1
+ <p>This footer needs to be overridden by setting show_header_partial in your child Field class.</p>
@@ -0,0 +1,13 @@
1
+ <div class='dynamic_fieldsets field'>
2
+ <span class='label'><%= label %></label>
3
+ <% if values.nil? || values.empty? %>
4
+ <em class='empty'>No answer given</em>
5
+ <% else %>
6
+ <ul>
7
+ <% values.each do |value| %>
8
+ <span class='value'><%= value %></span>
9
+ <% end %>
10
+ </ul>
11
+ <% end %>
12
+ </div>
13
+
@@ -0,0 +1,8 @@
1
+ <div class='dynamic_fieldsets field'>
2
+ <span class='label'><%= label %></label>
3
+ <% if value.nil? || value.empty? %>
4
+ <em class='empty'>No answer given</em>
5
+ <% else %>
6
+ <span class='value'><%= value %></span>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1,2 @@
1
+ # Autotest.add_discovery { "rails" }
2
+ Autotest.add_discovery { "rspec2" }
@@ -5,17 +5,19 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dynamic_fieldsets"
8
- s.version = "0.0.16"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jeremiah Hemphill", "Ethan Pemble", "John Carter"]
12
- s.date = "2012-02-13"
12
+ s.date = "2012-02-28"
13
13
  s.description = "Dynamic fieldsets for rails controllers"
14
14
  s.email = "jeremiah@cloudspace.com"
15
15
  s.extra_rdoc_files = [
16
16
  "README.rdoc"
17
17
  ]
18
18
  s.files = [
19
+ ".rdebugrc",
20
+ ".rspec",
19
21
  "CHANGELOG",
20
22
  "Gemfile",
21
23
  "Gemfile.lock",
@@ -31,6 +33,10 @@ Gem::Specification.new do |s|
31
33
  "app/helpers/dynamic_fieldsets/fieldset_children_helper.rb",
32
34
  "app/helpers/dynamic_fieldsets/nested_model_helper.rb",
33
35
  "app/helpers/dynamic_fieldsets_helper.rb",
36
+ "app/models/dynamic_fieldsets.rb",
37
+ "app/models/dynamic_fieldsets/checkbox_field.rb",
38
+ "app/models/dynamic_fieldsets/date_field.rb",
39
+ "app/models/dynamic_fieldsets/datetime_field.rb",
34
40
  "app/models/dynamic_fieldsets/dependency.rb",
35
41
  "app/models/dynamic_fieldsets/dependency_clause.rb",
36
42
  "app/models/dynamic_fieldsets/dependency_group.rb",
@@ -42,6 +48,12 @@ Gem::Specification.new do |s|
42
48
  "app/models/dynamic_fieldsets/fieldset.rb",
43
49
  "app/models/dynamic_fieldsets/fieldset_associator.rb",
44
50
  "app/models/dynamic_fieldsets/fieldset_child.rb",
51
+ "app/models/dynamic_fieldsets/instruction_field.rb",
52
+ "app/models/dynamic_fieldsets/multiple_select_field.rb",
53
+ "app/models/dynamic_fieldsets/radio_field.rb",
54
+ "app/models/dynamic_fieldsets/select_field.rb",
55
+ "app/models/dynamic_fieldsets/text_field.rb",
56
+ "app/models/dynamic_fieldsets/textarea_field.rb",
45
57
  "app/views/dynamic_fieldsets/fields/_disable_field_form.html.erb",
46
58
  "app/views/dynamic_fieldsets/fields/_field_default_fields.html.erb",
47
59
  "app/views/dynamic_fieldsets/fields/_field_html_attribute_fields.html.erb",
@@ -67,8 +79,26 @@ Gem::Specification.new do |s|
67
79
  "app/views/dynamic_fieldsets/fieldsets/new.html.erb",
68
80
  "app/views/dynamic_fieldsets/fieldsets/reorder.html.erb",
69
81
  "app/views/dynamic_fieldsets/fieldsets/show.html.erb",
82
+ "app/views/dynamic_fieldsets/form_partials/_checkbox_field.html.erb",
83
+ "app/views/dynamic_fieldsets/form_partials/_date_field.html.erb",
84
+ "app/views/dynamic_fieldsets/form_partials/_datetime_field.html.erb",
85
+ "app/views/dynamic_fieldsets/form_partials/_input_footer.html.erb",
86
+ "app/views/dynamic_fieldsets/form_partials/_input_header.html.erb",
87
+ "app/views/dynamic_fieldsets/form_partials/_instruction_field.html.erb",
88
+ "app/views/dynamic_fieldsets/form_partials/_multiple_select_field.html.erb",
89
+ "app/views/dynamic_fieldsets/form_partials/_radio_field.html.erb",
90
+ "app/views/dynamic_fieldsets/form_partials/_select_field.html.erb",
91
+ "app/views/dynamic_fieldsets/form_partials/_text_field.html.erb",
92
+ "app/views/dynamic_fieldsets/form_partials/_textarea_field.html.erb",
70
93
  "app/views/dynamic_fieldsets/shared/_javascript_watcher.html.erb",
71
94
  "app/views/dynamic_fieldsets/shared/_nested_model_javascript.html.erb",
95
+ "app/views/dynamic_fieldsets/show_partials/_show_incomplete.html.erb",
96
+ "app/views/dynamic_fieldsets/show_partials/_show_incomplete_footer.html.erb",
97
+ "app/views/dynamic_fieldsets/show_partials/_show_incomplete_header.html.erb",
98
+ "app/views/dynamic_fieldsets/show_partials/_show_instruction.html.erb",
99
+ "app/views/dynamic_fieldsets/show_partials/_show_multiple_answers.html.erb",
100
+ "app/views/dynamic_fieldsets/show_partials/_show_single_answer.html.erb",
101
+ "autotest/discover.rb",
72
102
  "config/.routes.rb.swp",
73
103
  "config/routes.rb",
74
104
  "dynamic_fieldsets.gemspec",
@@ -76,6 +106,9 @@ Gem::Specification.new do |s|
76
106
  "lib/dynamic_fieldsets/config.rb",
77
107
  "lib/dynamic_fieldsets/dynamic_fieldsets_in_model.rb",
78
108
  "lib/dynamic_fieldsets/engine.rb",
109
+ "lib/dynamic_fieldsets/field_with_field_options.rb",
110
+ "lib/dynamic_fieldsets/field_with_multiple_answers.rb",
111
+ "lib/dynamic_fieldsets/field_with_single_answer.rb",
79
112
  "lib/dynamic_fieldsets/railtie.rb",
80
113
  "lib/generators/dynamic_fieldsets/controllers_generator.rb",
81
114
  "lib/generators/dynamic_fieldsets/install_generator.rb",
@@ -104,6 +137,7 @@ Gem::Specification.new do |s|
104
137
  "spec/dummy/config/environments/production.rb",
105
138
  "spec/dummy/config/environments/test.rb",
106
139
  "spec/dummy/config/initializers/backtrace_silencers.rb",
140
+ "spec/dummy/config/initializers/dynamic_fieldsets.rb",
107
141
  "spec/dummy/config/initializers/inflections.rb",
108
142
  "spec/dummy/config/initializers/mime_types.rb",
109
143
  "spec/dummy/config/initializers/secret_token.rb",
@@ -143,7 +177,13 @@ Gem::Specification.new do |s|
143
177
  "spec/dynamic_fieldsets_helper_spec.rb",
144
178
  "spec/dynamic_fieldsets_in_model_spec.rb",
145
179
  "spec/dynamic_fieldsets_spec.rb",
180
+ "spec/field_with_field_options_spec.rb",
181
+ "spec/field_with_multiple_answers_spec.rb",
182
+ "spec/field_with_single_answer_spec.rb",
146
183
  "spec/integration/navigation_spec.rb",
184
+ "spec/models/checkbox_field_spec.rb",
185
+ "spec/models/date_field_spec.rb",
186
+ "spec/models/datetime_field_spec.rb",
147
187
  "spec/models/dependency_clause_spec.rb",
148
188
  "spec/models/dependency_group_spec.rb",
149
189
  "spec/models/dependency_spec.rb",
@@ -155,6 +195,11 @@ Gem::Specification.new do |s|
155
195
  "spec/models/fieldset_associator_spec.rb",
156
196
  "spec/models/fieldset_child_spec.rb",
157
197
  "spec/models/fieldset_spec.rb",
198
+ "spec/models/instruction_field_spec.rb",
199
+ "spec/models/multiple_select_field_spec.rb",
200
+ "spec/models/radio_field_spec.rb",
201
+ "spec/models/text_field_spec.rb",
202
+ "spec/models/textarea_field_spec.rb",
158
203
  "spec/spec_helper.rb",
159
204
  "spec/support/dependency_group_helper.rb",
160
205
  "spec/support/dependency_helper.rb",
@@ -177,53 +222,62 @@ Gem::Specification.new do |s|
177
222
  s.specification_version = 3
178
223
 
179
224
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
180
- s.add_runtime_dependency(%q<rails>, [">= 3.0.7"])
225
+ s.add_runtime_dependency(%q<rails>, ["~> 3.0.7"])
181
226
  s.add_development_dependency(%q<capybara>, [">= 0.4.0"])
182
227
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
183
228
  s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
229
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
230
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.3"])
231
+ s.add_development_dependency(%q<json>, [">= 0"])
184
232
  s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
185
233
  s.add_development_dependency(%q<rspec-rails>, ["~> 2.6.1"])
186
- s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
234
+ s.add_development_dependency(%q<shoulda>, ["~> 3.0.0"])
235
+ s.add_development_dependency(%q<ruby_parser>, ["~> 2.3.1"])
236
+ s.add_development_dependency(%q<ZenTest>, [">= 0"])
237
+ s.add_development_dependency(%q<autotest-rails>, [">= 0"])
187
238
  s.add_development_dependency(%q<cucumber>, [">= 0"])
188
239
  s.add_development_dependency(%q<cucumber-rails>, [">= 0"])
189
240
  s.add_development_dependency(%q<database_cleaner>, [">= 0"])
190
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
191
- s.add_development_dependency(%q<jeweler>, ["~> 1.6.3"])
192
- s.add_development_dependency(%q<rcov>, [">= 0"])
193
- s.add_development_dependency(%q<json>, [">= 0"])
241
+ s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
194
242
  s.add_development_dependency(%q<ci_reporter>, [">= 0"])
195
243
  else
196
- s.add_dependency(%q<rails>, [">= 3.0.7"])
244
+ s.add_dependency(%q<rails>, ["~> 3.0.7"])
197
245
  s.add_dependency(%q<capybara>, [">= 0.4.0"])
198
246
  s.add_dependency(%q<sqlite3>, [">= 0"])
199
247
  s.add_dependency(%q<ruby-debug19>, [">= 0"])
248
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
249
+ s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
250
+ s.add_dependency(%q<json>, [">= 0"])
200
251
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
201
252
  s.add_dependency(%q<rspec-rails>, ["~> 2.6.1"])
202
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
253
+ s.add_dependency(%q<shoulda>, ["~> 3.0.0"])
254
+ s.add_dependency(%q<ruby_parser>, ["~> 2.3.1"])
255
+ s.add_dependency(%q<ZenTest>, [">= 0"])
256
+ s.add_dependency(%q<autotest-rails>, [">= 0"])
203
257
  s.add_dependency(%q<cucumber>, [">= 0"])
204
258
  s.add_dependency(%q<cucumber-rails>, [">= 0"])
205
259
  s.add_dependency(%q<database_cleaner>, [">= 0"])
206
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
207
- s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
208
- s.add_dependency(%q<rcov>, [">= 0"])
209
- s.add_dependency(%q<json>, [">= 0"])
260
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
210
261
  s.add_dependency(%q<ci_reporter>, [">= 0"])
211
262
  end
212
263
  else
213
- s.add_dependency(%q<rails>, [">= 3.0.7"])
264
+ s.add_dependency(%q<rails>, ["~> 3.0.7"])
214
265
  s.add_dependency(%q<capybara>, [">= 0.4.0"])
215
266
  s.add_dependency(%q<sqlite3>, [">= 0"])
216
267
  s.add_dependency(%q<ruby-debug19>, [">= 0"])
268
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
269
+ s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
270
+ s.add_dependency(%q<json>, [">= 0"])
217
271
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
218
272
  s.add_dependency(%q<rspec-rails>, ["~> 2.6.1"])
219
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
273
+ s.add_dependency(%q<shoulda>, ["~> 3.0.0"])
274
+ s.add_dependency(%q<ruby_parser>, ["~> 2.3.1"])
275
+ s.add_dependency(%q<ZenTest>, [">= 0"])
276
+ s.add_dependency(%q<autotest-rails>, [">= 0"])
220
277
  s.add_dependency(%q<cucumber>, [">= 0"])
221
278
  s.add_dependency(%q<cucumber-rails>, [">= 0"])
222
279
  s.add_dependency(%q<database_cleaner>, [">= 0"])
223
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
224
- s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
225
- s.add_dependency(%q<rcov>, [">= 0"])
226
- s.add_dependency(%q<json>, [">= 0"])
280
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
227
281
  s.add_dependency(%q<ci_reporter>, [">= 0"])
228
282
  end
229
283
  end
@@ -0,0 +1,45 @@
1
+ # this file was stolen from kaminari
2
+ require 'active_support/configurable'
3
+
4
+ module DynamicFieldsets
5
+
6
+ # create new configs by passing a block with the config assignment
7
+ def self.configure(&block)
8
+ yield @config ||= DynamicFieldsets::Configuration.new
9
+ end
10
+
11
+ def self.config
12
+ @config
13
+ end
14
+
15
+ # setup config data
16
+ class Configuration
17
+ include ActiveSupport::Configurable
18
+ config_accessor :available_field_types
19
+ config_accessor :form_fieldset_associator_prefix
20
+ config_accessor :form_field_prefix
21
+
22
+ def param_name
23
+ config.param_name.respond_to?(:call) ? config.param_name.call() : config.param_name
24
+ end
25
+ end
26
+
27
+ # setup default options
28
+ # this should match the generator config that goes in the initializer file
29
+ configure do |config|
30
+ config.available_field_types = [
31
+ "DynamicFieldsets::CheckboxField",
32
+ "DynamicFieldsets::DateField",
33
+ "DynamicFieldsets::DatetimeField",
34
+ "DynamicFieldsets::InstructionField",
35
+ "DynamicFieldsets::MultipleSelectField",
36
+ "DynamicFieldsets::RadioField",
37
+ "DynamicFieldsets::SelectField",
38
+ "DynamicFieldsets::TextField",
39
+ "DynamicFieldsets::TextareaField"
40
+ ]
41
+ config.form_fieldset_associator_prefix = "fsa-"
42
+ config.form_field_prefix = "field-"
43
+ end
44
+ end
45
+
@@ -59,7 +59,7 @@ module DynamicFieldsets
59
59
  # for each fsa
60
60
  self.dynamic_fieldsets.keys.each do |key|
61
61
  fsa = self.fieldset_associator(key)
62
- fsa_tag_id = "fsa-" + fsa.id.to_s
62
+ fsa_tag_id = DynamicFieldsets.config.form_fieldset_associator_prefix + fsa.id.to_s
63
63
 
64
64
  # check if the values are set, if it matches the current fsa, and if it matches the current fieldset
65
65
  if !self.dynamic_fieldset_values.nil? && self.dynamic_fieldset_values.has_key?(fsa_tag_id) && self.dynamic_fieldset_values[fsa_tag_id][:fieldset_model_name] == key
@@ -81,8 +81,8 @@ module DynamicFieldsets
81
81
  end
82
82
  elsif child.is_a?(DynamicFieldsets::Field)
83
83
  # if a child, check if the params value is set, check if it is required, check if it satisfies condition
84
- fsa_tag_id = "fsa-" + fsa_id.to_s
85
- field_tag_id = "field-" + child.id.to_s
84
+ fsa_tag_id = DynamicFieldsets.config.form_fieldset_associator_prefix + fsa_id.to_s
85
+ field_tag_id = DynamicFieldsets.config.form_field_prefix + child.id.to_s
86
86
  if !self.dynamic_fieldset_values[fsa_tag_id].has_key?(field_tag_id)
87
87
  self.errors.add(:base, child.label + " is missing from the form data")
88
88
  else
@@ -95,17 +95,18 @@ module DynamicFieldsets
95
95
  end
96
96
  else
97
97
  # found a major problem, not sure how to get here
98
- puts "found a child that wasn't a field or fieldset" + child.inspect
98
+ throw "found a child that wasn't a field or fieldset" + child.inspect
99
99
  end
100
100
  end
101
101
 
102
102
  # Stores data from the controller into the dynamic_fieldset_values instance variable
103
+ # Also combines the date and time fields into a single field
103
104
  #
104
105
  # @param [Hash] params The parameters from the controller that include fsa tags
105
106
  def set_fieldset_values( params )
106
- values = params.select{ |key| key.match(/^fsa-/) }
107
+ values = params.select{ |key| key.match(/^#{DynamicFieldsets.config.form_fieldset_associator_prefix}/) }
107
108
  values.keys.each do |key|
108
- set_date_to_mysql( values[key] )
109
+ values[key] = set_date_to_mysql( values[key] )
109
110
  end
110
111
  self.dynamic_fieldset_values = values
111
112
  end
@@ -116,6 +117,12 @@ module DynamicFieldsets
116
117
  # time conversions. If the query receives a string instead of a time object, time zone information
117
118
  # may be saved incorrectly. (1-25-2012)
118
119
  #
120
+ # At some point this should be moved to the date_field and datetime_field models. Right now, it needs
121
+ # to stay here because we are taking the values from the form and iterating over the keys. This
122
+ # will not work because the date information is stored int 3-5 keys. We need to change the form
123
+ # data parser to get a list of expected field and iterate over them, looking for the values in the
124
+ # form post. That is a big change that we don't have time for now. (JH 2-27-2012)
125
+ #
119
126
  # @param [Hash] post The post parameters that include date fields like date(1i), date(2i), ...
120
127
  # @return [Hash] The modified hash containing one key-pair value in YYYY-MM-DD[ hh:mm] format.
121
128
  def set_date_to_mysql( post )
@@ -143,73 +150,41 @@ module DynamicFieldsets
143
150
  return post
144
151
  end
145
152
 
146
-
147
- # hacky system to save fieldset values
148
- # needs to be refactored and tested
149
- #
150
- # among other things, it can edit field records for random fsas if the wrong information comes from the controller
151
-
153
+ # Given the form values, finds the keys that correspond to fieldsets
154
+ # then passes the value for the key to the fieldset associator object for saving into individual field records
152
155
  def save_dynamic_fieldsets
153
156
  values = self.dynamic_fieldset_values
154
157
  if !values.nil?
155
158
  values.keys.each do |key|
156
- if key.start_with?("fsa-")
157
- key_id = key.gsub(/^fsa-/, "")
158
-
159
- if key_id.eql? ""
160
- then fsa = DynamicFieldsets::FieldsetAssociator.create(
161
- :fieldset_id => values[key][:fieldset_id],
162
- :fieldset_model_id => self.id,
163
- :fieldset_model_type => self.class.name,
164
- :fieldset_model_name => values[key][:fieldset_model_name] )
165
- else fsa = DynamicFieldsets::FieldsetAssociator.find_by_id key_id
166
- end
167
-
168
- values[key].keys.each do |sub_key| # EACH FIELD
169
- if sub_key.start_with?("field-")
170
- sub_key_id = sub_key.gsub(/^field-/, "")
171
-
172
- this_value = values[key][sub_key]
173
- if this_value.is_a? Array
174
- then # multiple values
175
- field_records = DynamicFieldsets::FieldRecord.where(:fieldset_associator_id => fsa.id, :fieldset_child_id => sub_key_id)
176
-
177
- this_value.each do |value|
178
- if field_records.select{ |record| record.value.eql? value }.empty? # record does not exist?
179
- #ADD
180
- DynamicFieldsets::FieldRecord.create( :fieldset_associator_id => fsa.id,
181
- :fieldset_child_id => sub_key_id,
182
- :value => value)
183
- end
184
- end
185
- field_records.each do |record|
186
- if !this_value.include? record.value then
187
- #DELETE
188
- record.destroy
189
- else
190
- #KEEP
191
- end
192
- end
193
-
194
- else # single value
195
- # retrieve record
196
- field_record = DynamicFieldsets::FieldRecord.where(:fieldset_associator_id => fsa.id, :fieldset_child_id => sub_key_id).first
197
- if field_record.nil? # create record
198
- field_record = DynamicFieldsets::FieldRecord.create(:fieldset_associator_id => fsa.id, :fieldset_child_id => sub_key_id, :value => this_value)
199
- else # update record
200
- field_record.value = this_value
201
- field_record.save
202
- end
203
- end
204
-
205
- end
206
- end
159
+ if key.start_with?(DynamicFieldsets.config.form_fieldset_associator_prefix)
160
+ save_fsa(key, values[key])
207
161
  end
208
162
  end
209
163
  end
210
164
  self.dynamic_fieldset_values = nil
211
165
  end
212
166
 
167
+ # save all of the fields and fieldsets in the values hash for this fieldset associator
168
+ #
169
+ # @param [String] The key that includes the fieldset associator's id
170
+ # @param [Hash] fsa_values An array of input information from the form
171
+ def save_fsa(key, fsa_values)
172
+ key_id = key.gsub(/^#{DynamicFieldsets.config.form_fieldset_associator_prefix}/, "")
173
+
174
+ if(key_id == "")
175
+ fsa = DynamicFieldsets::FieldsetAssociator.create(
176
+ :fieldset_id => fsa_values[:fieldset_id],
177
+ :fieldset_model_id => self.id,
178
+ :fieldset_model_type => self.class.name,
179
+ :fieldset_model_name => fsa_values[:fieldset_model_name]
180
+ )
181
+ else
182
+ fsa = DynamicFieldsets::FieldsetAssociator.find_by_id key_id
183
+ end
184
+
185
+ fsa.update_fieldset_records_with_form_information(fsa_values)
186
+ end
187
+
213
188
  # Matches methods that match named_fieldset and named_fieldset_fieldset
214
189
  # Or calls super
215
190
  #