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.
- data/.rdebugrc +3 -0
- data/.rspec +1 -0
- data/CHANGELOG +7 -0
- data/Gemfile +17 -8
- data/Gemfile.lock +77 -60
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/app/controllers/dynamic_fieldsets/fields_controller.rb +5 -4
- data/app/helpers/dynamic_fieldsets_helper.rb +48 -131
- data/app/models/dynamic_fieldsets.rb +2 -0
- data/app/models/dynamic_fieldsets/checkbox_field.rb +29 -0
- data/app/models/dynamic_fieldsets/date_field.rb +37 -0
- data/app/models/dynamic_fieldsets/datetime_field.rb +36 -0
- data/app/models/dynamic_fieldsets/dependency.rb +1 -1
- data/app/models/dynamic_fieldsets/dependency_clause.rb +1 -1
- data/app/models/dynamic_fieldsets/dependency_group.rb +1 -1
- data/app/models/dynamic_fieldsets/field.rb +170 -42
- data/app/models/dynamic_fieldsets/field_default.rb +3 -3
- data/app/models/dynamic_fieldsets/field_html_attribute.rb +1 -1
- data/app/models/dynamic_fieldsets/field_option.rb +1 -1
- data/app/models/dynamic_fieldsets/field_record.rb +1 -1
- data/app/models/dynamic_fieldsets/fieldset.rb +36 -1
- data/app/models/dynamic_fieldsets/fieldset_associator.rb +9 -34
- data/app/models/dynamic_fieldsets/fieldset_child.rb +43 -24
- data/app/models/dynamic_fieldsets/instruction_field.rb +35 -0
- data/app/models/dynamic_fieldsets/multiple_select_field.rb +43 -0
- data/app/models/dynamic_fieldsets/radio_field.rb +27 -0
- data/app/models/dynamic_fieldsets/select_field.rb +16 -0
- data/app/models/dynamic_fieldsets/text_field.rb +14 -0
- data/app/models/dynamic_fieldsets/textarea_field.rb +40 -0
- data/app/views/dynamic_fieldsets/fields/_form.html.erb +50 -52
- data/app/views/dynamic_fieldsets/fields/edit.html.erb +5 -2
- data/app/views/dynamic_fieldsets/fields/index.html.erb +1 -1
- data/app/views/dynamic_fieldsets/fields/new.html.erb +3 -1
- data/app/views/dynamic_fieldsets/fields/show.html.erb +1 -1
- data/app/views/dynamic_fieldsets/fieldsets/_child.html.erb +1 -1
- data/app/views/dynamic_fieldsets/form_partials/_checkbox_field.html.erb +8 -0
- data/app/views/dynamic_fieldsets/form_partials/_date_field.html.erb +1 -0
- data/app/views/dynamic_fieldsets/form_partials/_datetime_field.html.erb +1 -0
- data/app/views/dynamic_fieldsets/form_partials/_input_footer.html.erb +1 -0
- data/app/views/dynamic_fieldsets/form_partials/_input_header.html.erb +7 -0
- data/app/views/dynamic_fieldsets/form_partials/_instruction_field.html.erb +1 -0
- data/app/views/dynamic_fieldsets/form_partials/_multiple_select_field.html.erb +1 -0
- data/app/views/dynamic_fieldsets/form_partials/_radio_field.html.erb +8 -0
- data/app/views/dynamic_fieldsets/form_partials/_select_field.html.erb +1 -0
- data/app/views/dynamic_fieldsets/form_partials/_text_field.html.erb +1 -0
- data/app/views/dynamic_fieldsets/form_partials/_textarea_field.html.erb +1 -0
- data/app/views/dynamic_fieldsets/shared/_javascript_watcher.html.erb +8 -8
- data/app/views/dynamic_fieldsets/show_partials/_show_incomplete.html.erb +1 -0
- data/app/views/dynamic_fieldsets/show_partials/_show_incomplete_footer.html.erb +2 -0
- data/app/views/dynamic_fieldsets/show_partials/_show_incomplete_header.html.erb +1 -0
- data/app/views/dynamic_fieldsets/show_partials/_show_instruction.html.erb +1 -0
- data/app/views/dynamic_fieldsets/show_partials/_show_multiple_answers.html.erb +13 -0
- data/app/views/dynamic_fieldsets/show_partials/_show_single_answer.html.erb +8 -0
- data/autotest/discover.rb +2 -0
- data/dynamic_fieldsets.gemspec +74 -20
- data/lib/dynamic_fieldsets/config.rb +45 -0
- data/lib/dynamic_fieldsets/dynamic_fieldsets_in_model.rb +38 -63
- data/lib/dynamic_fieldsets/field_with_field_options.rb +58 -0
- data/lib/dynamic_fieldsets/field_with_multiple_answers.rb +89 -0
- data/lib/dynamic_fieldsets/field_with_single_answer.rb +84 -0
- data/lib/dynamic_fieldsets/railtie.rb +6 -1
- data/lib/generators/dynamic_fieldsets/install_generator.rb +3 -3
- data/lib/generators/dynamic_fieldsets/templates/config.rb +15 -0
- data/lib/generators/dynamic_fieldsets/templates/migrations/install_migration.rb +1 -1
- data/spec/dummy/config/initializers/dynamic_fieldsets.rb +15 -0
- data/spec/dummy/db/migrate/20120213211033_create_dynamic_fieldsets_tables.rb +1 -1
- data/spec/dummy/db/schema.rb +1 -1
- data/spec/dummy/features/step_definitions/field_steps.rb +4 -4
- data/spec/dummy/features/step_definitions/fieldset_children_steps.rb +2 -2
- data/spec/dummy/features/step_definitions/javascript_steps.rb +7 -7
- data/spec/dynamic_fieldsets_helper_spec.rb +278 -312
- data/spec/dynamic_fieldsets_in_model_spec.rb +2 -2
- data/spec/field_with_field_options_spec.rb +49 -0
- data/spec/field_with_multiple_answers_spec.rb +50 -0
- data/spec/field_with_single_answer_spec.rb +51 -0
- data/spec/models/checkbox_field_spec.rb +19 -0
- data/spec/models/date_field_spec.rb +24 -0
- data/spec/models/datetime_field_spec.rb +24 -0
- data/spec/models/dependency_clause_spec.rb +7 -8
- data/spec/models/dependency_group_spec.rb +27 -30
- data/spec/models/dependency_spec.rb +8 -9
- data/spec/models/field_default_spec.rb +19 -14
- data/spec/models/field_html_attribute_spec.rb +3 -4
- data/spec/models/field_option_spec.rb +8 -9
- data/spec/models/field_record_spec.rb +8 -9
- data/spec/models/field_spec.rb +195 -94
- data/spec/models/fieldset_associator_spec.rb +39 -41
- data/spec/models/fieldset_child_spec.rb +99 -47
- data/spec/models/fieldset_spec.rb +25 -29
- data/spec/models/instruction_field_spec.rb +38 -0
- data/spec/models/multiple_select_field_spec.rb +31 -0
- data/spec/models/radio_field_spec.rb +21 -0
- data/spec/models/text_field_spec.rb +19 -0
- data/spec/models/textarea_field_spec.rb +39 -0
- data/spec/support/field_helper.rb +1 -1
- metadata +106 -28
@@ -1,6 +1,9 @@
|
|
1
1
|
<h1>Editing field</h1>
|
2
2
|
|
3
|
-
<%=
|
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
|
-
|
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.
|
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>
|
@@ -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.
|
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 @@
|
|
1
|
+
<%= date_select(object, method, date_options, attrs) %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= datetime_select(object, method, date_options, attrs) %>
|
@@ -0,0 +1 @@
|
|
1
|
+
</li>
|
@@ -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
|
+
<p><%= label %></p>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= select_tag(name, options_from_collection_for_select( collection, :id, :name, selected_ids ), attrs) %>
|
@@ -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,
|
17
|
-
switch(
|
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,
|
118
|
-
switch(
|
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
|
208
|
-
var fieldset_child_id = grab_fsc_id(field,
|
209
|
-
var entered_value = grab_value(field,
|
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 = '
|
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 @@
|
|
1
|
+
<p>This footer needs to be overridden by setting show_header_partial in your child Field class.</p>
|
@@ -0,0 +1 @@
|
|
1
|
+
<p><%= label %></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
|
+
|
data/dynamic_fieldsets.gemspec
CHANGED
@@ -5,17 +5,19 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "dynamic_fieldsets"
|
8
|
-
s.version = "0.0
|
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-
|
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>, ["
|
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<
|
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<
|
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>, ["
|
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<
|
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<
|
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>, ["
|
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<
|
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<
|
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 =
|
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 =
|
85
|
-
field_tag_id =
|
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
|
-
|
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(
|
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
|
-
#
|
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?(
|
157
|
-
|
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
|
#
|