dynamic_fieldsets 0.0.16 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,3 @@
1
+ set autolist
2
+ set autoeval
3
+ set autoreload
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.1.0
2
+
3
+ * Major change to the structure of the code. Fields now use single table inheritance to determine different functionality
4
+ * Added views for each field
5
+ * Added a config file and generator
6
+ * Broke a huge number of tests, pended them, then didn't have enough time to rewrite them
7
+
1
8
  == 0.0.16
2
9
 
3
10
  * Updated the migration generator with indices.
data/Gemfile CHANGED
@@ -1,22 +1,31 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "rails", ">=3.0.7"
3
+ gem "rails", "~> 3.0.7"
4
4
 
5
- group :development do
5
+ group :development, :test do
6
6
  gem "capybara", ">= 0.4.0"
7
7
  gem "sqlite3"
8
8
  gem 'ruby-debug19'
9
+ gem "bundler", "~> 1.0.0"
10
+ gem "jeweler", "~> 1.6.3"
11
+ gem "json"
12
+
13
+ # rspec
9
14
  gem "rspec", "~> 2.6.0"
10
15
  gem "rspec-rails", "~>2.6.1"
11
- gem "yard", "~> 0.6.0"
16
+ gem "shoulda", "~> 3.0.0"
17
+ gem "ruby_parser", "~> 2.3.1" # outputs parsetrees
18
+ gem "ZenTest"
19
+ gem "autotest-rails"
20
+
21
+ # cucumber
12
22
  gem "cucumber", ">= 0"
13
23
  gem "cucumber-rails"
14
24
  gem "database_cleaner"
15
- gem "bundler", "~> 1.0.0"
16
- gem "jeweler", "~> 1.6.3"
17
- gem "rcov", ">= 0"
18
- gem "json"
19
25
 
20
- # hudson ci
26
+ # documentation
27
+ gem "yard", "~> 0.6.0"
28
+
29
+ # jenkins/hudson ci
21
30
  gem "ci_reporter"
22
31
  end
@@ -1,13 +1,14 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ ZenTest (4.6.2)
4
5
  abstract (1.0.0)
5
- actionmailer (3.0.7)
6
- actionpack (= 3.0.7)
7
- mail (~> 2.2.15)
8
- actionpack (3.0.7)
9
- activemodel (= 3.0.7)
10
- activesupport (= 3.0.7)
6
+ actionmailer (3.0.11)
7
+ actionpack (= 3.0.11)
8
+ mail (~> 2.2.19)
9
+ actionpack (3.0.11)
10
+ activemodel (= 3.0.11)
11
+ activesupport (= 3.0.11)
11
12
  builder (~> 2.1.2)
12
13
  erubis (~> 2.6.6)
13
14
  i18n (~> 0.5.0)
@@ -15,50 +16,52 @@ GEM
15
16
  rack-mount (~> 0.6.14)
16
17
  rack-test (~> 0.5.7)
17
18
  tzinfo (~> 0.3.23)
18
- activemodel (3.0.7)
19
- activesupport (= 3.0.7)
19
+ activemodel (3.0.11)
20
+ activesupport (= 3.0.11)
20
21
  builder (~> 2.1.2)
21
22
  i18n (~> 0.5.0)
22
- activerecord (3.0.7)
23
- activemodel (= 3.0.7)
24
- activesupport (= 3.0.7)
25
- arel (~> 2.0.2)
23
+ activerecord (3.0.11)
24
+ activemodel (= 3.0.11)
25
+ activesupport (= 3.0.11)
26
+ arel (~> 2.0.10)
26
27
  tzinfo (~> 0.3.23)
27
- activeresource (3.0.7)
28
- activemodel (= 3.0.7)
29
- activesupport (= 3.0.7)
30
- activesupport (3.0.7)
28
+ activeresource (3.0.11)
29
+ activemodel (= 3.0.11)
30
+ activesupport (= 3.0.11)
31
+ activesupport (3.0.11)
31
32
  archive-tar-minitar (0.5.2)
32
33
  arel (2.0.10)
34
+ autotest-rails (4.1.2)
35
+ ZenTest (~> 4.5)
33
36
  builder (2.1.2)
34
- capybara (1.0.0)
37
+ capybara (1.1.2)
35
38
  mime-types (>= 1.16)
36
39
  nokogiri (>= 1.3.3)
37
40
  rack (>= 1.0.0)
38
41
  rack-test (>= 0.5.4)
39
- selenium-webdriver (~> 0.2.0)
42
+ selenium-webdriver (~> 2.0)
40
43
  xpath (~> 0.1.4)
41
- childprocess (0.1.9)
44
+ childprocess (0.3.1)
42
45
  ffi (~> 1.0.6)
43
- ci_reporter (1.6.5)
46
+ ci_reporter (1.7.0)
44
47
  builder (>= 2.1.2)
45
- columnize (0.3.4)
46
- cucumber (1.0.1)
48
+ columnize (0.3.6)
49
+ cucumber (1.1.9)
47
50
  builder (>= 2.1.2)
48
51
  diff-lcs (>= 1.1.2)
49
- gherkin (~> 2.4.5)
52
+ gherkin (~> 2.9.0)
50
53
  json (>= 1.4.6)
51
- term-ansicolor (>= 1.0.5)
52
- cucumber-rails (1.0.2)
53
- capybara (>= 1.0.0)
54
- cucumber (~> 1.0.0)
55
- nokogiri (>= 1.4.6)
56
- database_cleaner (0.6.7)
57
- diff-lcs (1.1.2)
54
+ term-ansicolor (>= 1.0.6)
55
+ cucumber-rails (1.3.0)
56
+ capybara (>= 1.1.2)
57
+ cucumber (>= 1.1.8)
58
+ nokogiri (>= 1.5.0)
59
+ database_cleaner (0.7.1)
60
+ diff-lcs (1.1.3)
58
61
  erubis (2.6.6)
59
62
  abstract (>= 1.0.0)
60
- ffi (1.0.9)
61
- gherkin (2.4.5)
63
+ ffi (1.0.11)
64
+ gherkin (2.9.0)
62
65
  json (>= 1.4.6)
63
66
  git (1.2.5)
64
67
  i18n (0.5.0)
@@ -66,8 +69,7 @@ GEM
66
69
  bundler (~> 1.0)
67
70
  git (>= 1.2.5)
68
71
  rake
69
- json (1.5.3)
70
- json_pure (1.5.3)
72
+ json (1.6.5)
71
73
  linecache19 (0.5.12)
72
74
  ruby_core_source (>= 0.1.4)
73
75
  mail (2.2.19)
@@ -75,29 +77,32 @@ GEM
75
77
  i18n (>= 0.4.0)
76
78
  mime-types (~> 1.16)
77
79
  treetop (~> 1.4.8)
78
- mime-types (1.16)
80
+ mime-types (1.17.2)
81
+ multi_json (1.0.4)
79
82
  nokogiri (1.5.0)
80
- polyglot (0.3.1)
81
- rack (1.2.3)
83
+ polyglot (0.3.3)
84
+ rack (1.2.5)
82
85
  rack-mount (0.6.14)
83
86
  rack (>= 1.0.0)
84
87
  rack-test (0.5.7)
85
88
  rack (>= 1.0)
86
- rails (3.0.7)
87
- actionmailer (= 3.0.7)
88
- actionpack (= 3.0.7)
89
- activerecord (= 3.0.7)
90
- activeresource (= 3.0.7)
91
- activesupport (= 3.0.7)
89
+ rails (3.0.11)
90
+ actionmailer (= 3.0.11)
91
+ actionpack (= 3.0.11)
92
+ activerecord (= 3.0.11)
93
+ activeresource (= 3.0.11)
94
+ activesupport (= 3.0.11)
92
95
  bundler (~> 1.0)
93
- railties (= 3.0.7)
94
- railties (3.0.7)
95
- actionpack (= 3.0.7)
96
- activesupport (= 3.0.7)
96
+ railties (= 3.0.11)
97
+ railties (3.0.11)
98
+ actionpack (= 3.0.11)
99
+ activesupport (= 3.0.11)
97
100
  rake (>= 0.8.7)
101
+ rdoc (~> 3.4)
98
102
  thor (~> 0.14.4)
99
- rake (0.9.2)
100
- rcov (0.9.9)
103
+ rake (0.9.2.2)
104
+ rdoc (3.12)
105
+ json (~> 1.4)
101
106
  rspec (2.6.0)
102
107
  rspec-core (~> 2.6.0)
103
108
  rspec-expectations (~> 2.6.0)
@@ -121,18 +126,27 @@ GEM
121
126
  ruby-debug-base19 (>= 0.11.19)
122
127
  ruby_core_source (0.1.5)
123
128
  archive-tar-minitar (>= 0.5.2)
124
- rubyzip (0.9.4)
125
- selenium-webdriver (0.2.2)
126
- childprocess (>= 0.1.9)
127
- ffi (>= 1.0.7)
128
- json_pure
129
+ ruby_parser (2.3.1)
130
+ sexp_processor (~> 3.0)
131
+ rubyzip (0.9.6.1)
132
+ selenium-webdriver (2.19.0)
133
+ childprocess (>= 0.2.5)
134
+ ffi (~> 1.0.9)
135
+ multi_json (~> 1.0.4)
129
136
  rubyzip
130
- sqlite3 (1.3.3)
131
- term-ansicolor (1.0.5)
137
+ sexp_processor (3.0.10)
138
+ shoulda (3.0.0)
139
+ shoulda-context (~> 1.0.0)
140
+ shoulda-matchers (~> 1.0.0)
141
+ shoulda-context (1.0.0)
142
+ shoulda-matchers (1.0.0)
143
+ sqlite3 (1.3.5)
144
+ term-ansicolor (1.0.7)
132
145
  thor (0.14.6)
133
- treetop (1.4.9)
146
+ treetop (1.4.10)
147
+ polyglot
134
148
  polyglot (>= 0.3.1)
135
- tzinfo (0.3.29)
149
+ tzinfo (0.3.31)
136
150
  xpath (0.1.4)
137
151
  nokogiri (~> 1.3)
138
152
  yard (0.6.8)
@@ -141,6 +155,8 @@ PLATFORMS
141
155
  ruby
142
156
 
143
157
  DEPENDENCIES
158
+ ZenTest
159
+ autotest-rails
144
160
  bundler (~> 1.0.0)
145
161
  capybara (>= 0.4.0)
146
162
  ci_reporter
@@ -149,10 +165,11 @@ DEPENDENCIES
149
165
  database_cleaner
150
166
  jeweler (~> 1.6.3)
151
167
  json
152
- rails (>= 3.0.7)
153
- rcov
168
+ rails (~> 3.0.7)
154
169
  rspec (~> 2.6.0)
155
170
  rspec-rails (~> 2.6.1)
156
171
  ruby-debug19
172
+ ruby_parser (~> 2.3.1)
173
+ shoulda (~> 3.0.0)
157
174
  sqlite3
158
175
  yard (~> 0.6.0)
@@ -2,7 +2,7 @@
2
2
 
3
3
  User defined fieldsets for dynamic questions in forms.
4
4
 
5
- I recommend not using this until a 0.1 release.
5
+ I recommend not using this until a 1.0 release.
6
6
 
7
7
  = how to use
8
8
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.16
1
+ 0.1.0
@@ -55,9 +55,10 @@ module DynamicFieldsets
55
55
  # POST /dynamic_fieldsets/fields
56
56
  def create
57
57
  parent_id = params[:parent]
58
- @field = DynamicFieldsets::Field.new(params[:dynamic_fieldsets_field])
58
+ @field = params[:dynamic_fieldsets_field][:type].constantize.new(params[:dynamic_fieldsets_field])
59
59
 
60
60
  respond_to do |format|
61
+
61
62
  if @field.save
62
63
  if !parent_id.empty?
63
64
  parent = DynamicFieldsets::Fieldset.find_by_id(parent_id)
@@ -66,7 +67,7 @@ module DynamicFieldsets
66
67
  #relation.child = @field
67
68
  #relation.save
68
69
  end
69
- format.html { redirect_to(@field, :notice => 'Successfully created a new field.') }
70
+ format.html { redirect_to(dynamic_fieldsets_field_path(@field), :notice => 'Successfully created a new field.') }
70
71
  else
71
72
  format.html { render :action => "new" }
72
73
  end
@@ -75,11 +76,11 @@ module DynamicFieldsets
75
76
 
76
77
  # PUT /dynamic_fieldsets/fields/1
77
78
  def update
78
- @field = DynamicFieldsets::Field.find(params[:id])
79
+ @field = params[:dynamic_fieldsets_field][:type].constantize.find(params[:id])
79
80
 
80
81
  respond_to do |format|
81
82
  if @field.update_attributes(params[:dynamic_fieldsets_field])
82
- format.html { redirect_to(@field, :notice => 'Successfully updated a field.') }
83
+ format.html { redirect_to(dynamic_fieldsets_field_path(@field), :notice => 'Successfully updated a field.') }
83
84
  else
84
85
  format.html { render :action => "edit" }
85
86
  end
@@ -27,30 +27,24 @@ module DynamicFieldsetsHelper
27
27
  def field_show_renderer(fsa, fieldset_child, values = [])
28
28
  field = fieldset_child.child
29
29
  lines = []
30
- lines.push "<div class='dynamic_fieldsets field'>"
31
- lines.push "<span class='label'>#{field.label}</span>"
32
- lines.push "<span class='value'>"
33
- if values
34
- if field.field_type == "multiple_select" || field.field_type == "checkbox"
35
- values.each do |value|
36
- lines.push field.options.select { |opt| opt.id == value }.first.name + "<br />"
37
- end
38
- elsif field.field_type == "select" || field.field_type == "radio"
39
- lines.push field.options.select { |opt| opt.id == values }.first.name
40
- # this might be easier on the db
41
- # lines.push DynamicFieldsets::FieldOption.find(values).name
42
- else
43
- lines.push values
44
- end
45
- else
46
- lines.push "<em class='empty'>No answer given</em>"
30
+
31
+ if field.use_show_header_partial?
32
+ lines.push render(:partial => field.show_header_partial )
47
33
  end
48
- lines.push "</span>"
49
- lines.push "</div>"
34
+
35
+ args = {
36
+ :value => values,
37
+ :values => values
38
+ }
39
+ lines.push render(:partial => field.show_partial, :locals => field.show_partial_locals(args) )
40
+
41
+ if field.use_show_footer_partial?
42
+ lines.push render(:partial => field.show_footer_partial )
43
+ end
44
+
50
45
  return lines
51
46
  end
52
47
 
53
-
54
48
  # Builds HTML for the provided field for a form.
55
49
  # @param [FieldsetAssociator] fsa parent FieldsetAssociator
56
50
  # @param [FieldsetChild] fieldset_child The FieldsetChild to render
@@ -58,96 +52,34 @@ module DynamicFieldsetsHelper
58
52
  # @return [Array] The HTML elements for the field
59
53
  def field_form_renderer(fsa, fieldset_child, values = [])
60
54
  field = fieldset_child.child
61
- classes = "#{field.field_type} "
55
+ # maybe turn this into an instance method
56
+ classes = "#{field.type.gsub("DynamicFieldsets::", "").underscore.downcase} "
62
57
  classes += ( field.required ? 'required' : 'optional' )
63
58
 
64
- field_markup = ["<li class='#{classes}' id='input-field-#{field.id}-child-#{fieldset_child.id}'>"]
65
-
66
- if !field.field_type.eql?('instruction')
67
- field_markup.push "<label for='field-#{field.id}'>"
68
- field_markup.push "#{field.label}: "
69
- field_markup.push "<abbr title='required'>*</abbr>" if field.required?
70
- field_markup.push "</label>"
59
+ field_markup = []
60
+ if field.use_form_header_partial?
61
+ field_markup.push render(:partial => field.form_header_partial, :locals => {
62
+ :classes => classes,
63
+ :field => field,
64
+ :fieldset_child => fieldset_child
65
+ })
71
66
  end
72
-
73
- attrs = { :id => "field-#{field.id}-child-#{fieldset_child.id}" }
74
- field.field_html_attributes.each{ |a| attrs.merge! a.attribute_name.to_sym => a.value } if !field.field_html_attributes.empty?
75
-
76
- case field.field_type.to_sym
77
- when :select
78
- selected = populate(field,values).to_i # should return the ID of the saved or default option
79
- field_markup.push select_tag "fsa-#{fsa.id}[field-#{fieldset_child.id}]", options_from_collection_for_select( field.options, :id, :name, selected ), attrs
80
-
81
- when :multiple_select
82
- attrs.merge! multiple: true
83
- opts = populate( field, values )
84
- opts = [opts] if !opts.is_a? Array
85
- selected = opts.map( &:to_i ) if !opts.empty? # array of option IDs, saved > default
86
- field_markup.push select_tag "fsa-#{fsa.id}[field-#{fieldset_child.id}]", options_from_collection_for_select( field.options, :id, :name, selected ), attrs
87
-
88
- when :radio
89
- field_markup.push "<div id='field-#{field.id}-child-#{fieldset_child.id}'>"
90
- field.options.each do |option|
91
- attrs[:id] = "field-#{field.id}-#{option.name.parameterize}"
92
- these_attrs = attrs
93
- these_attrs = attrs.merge checked: true if populate(field,values).to_i.eql? option.id
94
- field_markup.push "<label for='#{these_attrs[:id]}'>"
95
- field_markup.push radio_button "fsa-#{fsa.id}", "field-#{fieldset_child.id}", option.id, these_attrs
96
- field_markup.push "#{option.name}"
97
- field_markup.push "</label>"
98
- end
99
- field_markup.push "</div>"
100
-
101
- when :checkbox
102
- field_markup.push "<div id='field-#{field.id}-child-#{fieldset_child.id}'>"
103
- attrs[:name] = "fsa-#{fsa.id}[field-#{fieldset_child.id}][]"
104
- opts = populate( field, values )
105
- checked = []
106
- checked = opts.map( &:to_i ) if !opts.empty? # array of option IDs, saved > default
107
- field.options.each do |option|
108
- attrs[:id] = "field-#{field.id}-#{option.name.underscore}"
109
- field_markup.push "<label for='#{attrs[:id]}'>"
110
- field_markup.push check_box_tag "#{attrs[:name]}", "#{option.id}", checked.include?(option.id), attrs
111
- field_markup.push "#{option.name}"
112
- field_markup.push "</label>"
113
- end
114
- field_markup.push "</div>"
115
-
116
- when :textfield
117
- attrs.merge!( {:value => populate( field, values )} )
118
- field_markup.push text_field "fsa-#{fsa.id}", "field-#{fieldset_child.id}", attrs
119
67
 
120
- when :textarea
121
- attrs.merge! cols: '40' if !attrs.include? :cols
122
- attrs.merge! rows: '6' if !attrs.include? :rows
123
- attrs.merge! name: "fsa-#{fsa.id}[field-#{fieldset_child.id}]"
124
- tag = "<textarea"
125
- attrs.each{ |att,val| tag += " #{att}=\"#{val}\"" }
126
- tag += ">"
127
- tag += populate( field, values )
128
- tag += "</textarea>"
129
- field_markup.push tag
130
-
131
- when :date
132
- date_options = { start_year: Time.now.year - 70 }
133
- setdate = populate( field, values ) # date string if saved or default
134
- date_options.merge! default: Time.parse( setdate ) if !setdate.empty?
135
- # attrs.reject!{ |k| k.eql? :id }
136
- field_markup.push date_select "fsa-#{fsa.id}", "field-#{fieldset_child.id}", date_options, attrs
137
-
138
- when :datetime
139
- date_options = { start_year: Time.now.year - 70 }
140
- setdate = populate( field, values ) # datetime string if saved or default
141
- date_options.merge! default: Time.parse( setdate ) if !setdate.empty?
142
- # attrs.reject!{ |k| k.eql? :id }
143
- field_markup.push datetime_select "fsa-#{fsa.id}", "field-#{fieldset_child.id}", date_options, attrs
144
-
145
- when :instruction
146
- field_markup.push "<p>#{field.label}</p>"
147
-
148
- end # case field.field_type
68
+ attrs = field.html_attribute_hash
149
69
 
150
- field_markup.push "</li>"
70
+ attributes = {
71
+ :fsa => fsa,
72
+ :fieldset_child => fieldset_child,
73
+ :values => values,
74
+ :value => values
75
+ }
76
+
77
+ field_markup.push render(:partial => field.form_partial, :locals => field.form_partial_locals(attributes))
78
+
79
+ if field.use_form_footer_partial?
80
+ field_markup.push render(:partial => field.form_footer_partial)
81
+ end
82
+
151
83
  return field_markup
152
84
  end
153
85
 
@@ -160,14 +92,18 @@ module DynamicFieldsetsHelper
160
92
  lines = ["<div id='fieldset-#{fieldset.id}' class='inputs'>"]
161
93
  lines.push "<h3 class='name'>#{fieldset.name}</h3>"
162
94
  lines.push "<ol>"
95
+
96
+ # this returns field/fieldset objects rather than fieldset children
97
+ # that is why this code looks like it is accessing odd objects
163
98
  fieldset.children.each do |child|
164
- if child.is_a? DynamicFieldsets::Field then
165
- fieldset_child = DynamicFieldsets::FieldsetChild.where( :child_id => child.id, :fieldset_id => fieldset.id, :child_type => child.class.name ).first
166
- lines += field_renderer( fsa, fieldset_child, values[fieldset_child.id], form_type )
167
- else # child.is_a? Fieldset
99
+ if child.is_a? DynamicFieldsets::Fieldset
168
100
  lines += fieldset_renderer( fsa, child, values, form_type )
101
+ else # one of many possible types of child
102
+ fieldset_child = DynamicFieldsets::FieldsetChild.where( :child_id => child.id, :fieldset_id => fieldset.id, :child_type => "DynamicFieldsets::Field" ).first
103
+ lines += field_renderer( fsa, fieldset_child, values[fieldset_child.id], form_type )
169
104
  end
170
105
  end
106
+
171
107
  lines.push "</ol>"
172
108
  lines.push "</div>"
173
109
 
@@ -192,9 +128,9 @@ module DynamicFieldsetsHelper
192
128
  # @param [FieldsetAssociator] The fieldset associator for the dynamic fieldset to render
193
129
  # @return [String] The HTML for the entire dynamic fieldset
194
130
  def dynamic_fieldset_renderer(fsa, form_type)
195
- rendered_dynamic_fieldset = "<div id='fsa-#{fsa.id}'>\n"
196
- rendered_dynamic_fieldset += "<input type='hidden' name='fsa-#{fsa.id}[fieldset_id]' value='#{fsa.fieldset_id}' />\n"
197
- rendered_dynamic_fieldset += "<input type='hidden' name='fsa-#{fsa.id}[fieldset_model_name]' value='#{fsa.fieldset_model_name}' />\n"
131
+ rendered_dynamic_fieldset = "<div id='#{DynamicFieldsets.config.form_fieldset_associator_prefix}#{fsa.id}'>\n"
132
+ rendered_dynamic_fieldset += "<input type='hidden' name='#{DynamicFieldsets.config.form_fieldset_associator_prefix}#{fsa.id}[fieldset_id]' value='#{fsa.fieldset_id}' />\n"
133
+ rendered_dynamic_fieldset += "<input type='hidden' name='#{DynamicFieldsets.config.form_fieldset_associator_prefix}#{fsa.id}[fieldset_model_name]' value='#{fsa.fieldset_model_name}' />\n"
198
134
  fieldset_renderer( fsa, fsa.fieldset, fsa.field_values, form_type ).each do |line|
199
135
  rendered_dynamic_fieldset += line + "\n"
200
136
  end
@@ -202,25 +138,6 @@ module DynamicFieldsetsHelper
202
138
 
203
139
  return rendered_dynamic_fieldset.html_safe
204
140
  end
205
-
206
- # Gives precedence to saved values; returns default values if empty
207
- # @param [Field] field Field to populate
208
- # @param [String] value Possibly saved values
209
- # @return The saved or default value(s)
210
- # I know this is messy; this is what happens when we are past deadline.
211
- def populate(field, value)
212
- if value.nil? || (value.is_a?(Array) && value.empty?)
213
- if field.field_defaults.length == 0
214
- return ""
215
- elsif field.field_defaults.length > 1
216
- return field.field_defaults.collect{ |d| d[:value] }
217
- else
218
- return field.field_defaults.first.value
219
- end
220
- else
221
- return value
222
- end
223
- end
224
141
 
225
142
  # Method that returns the javascript in string format to be pushed on with the rest of the
226
143
  # generated form