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.
- 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
data/.rdebugrc
ADDED
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
|
+
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 "
|
|
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
|
-
#
|
|
26
|
+
# documentation
|
|
27
|
+
gem "yard", "~> 0.6.0"
|
|
28
|
+
|
|
29
|
+
# jenkins/hudson ci
|
|
21
30
|
gem "ci_reporter"
|
|
22
31
|
end
|
data/Gemfile.lock
CHANGED
|
@@ -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.
|
|
6
|
-
actionpack (= 3.0.
|
|
7
|
-
mail (~> 2.2.
|
|
8
|
-
actionpack (3.0.
|
|
9
|
-
activemodel (= 3.0.
|
|
10
|
-
activesupport (= 3.0.
|
|
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.
|
|
19
|
-
activesupport (= 3.0.
|
|
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.
|
|
23
|
-
activemodel (= 3.0.
|
|
24
|
-
activesupport (= 3.0.
|
|
25
|
-
arel (~> 2.0.
|
|
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.
|
|
28
|
-
activemodel (= 3.0.
|
|
29
|
-
activesupport (= 3.0.
|
|
30
|
-
activesupport (3.0.
|
|
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.
|
|
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 (~>
|
|
42
|
+
selenium-webdriver (~> 2.0)
|
|
40
43
|
xpath (~> 0.1.4)
|
|
41
|
-
childprocess (0.1
|
|
44
|
+
childprocess (0.3.1)
|
|
42
45
|
ffi (~> 1.0.6)
|
|
43
|
-
ci_reporter (1.
|
|
46
|
+
ci_reporter (1.7.0)
|
|
44
47
|
builder (>= 2.1.2)
|
|
45
|
-
columnize (0.3.
|
|
46
|
-
cucumber (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.
|
|
52
|
+
gherkin (~> 2.9.0)
|
|
50
53
|
json (>= 1.4.6)
|
|
51
|
-
term-ansicolor (>= 1.0.
|
|
52
|
-
cucumber-rails (1.0
|
|
53
|
-
capybara (>= 1.
|
|
54
|
-
cucumber (
|
|
55
|
-
nokogiri (>= 1.
|
|
56
|
-
database_cleaner (0.
|
|
57
|
-
diff-lcs (1.1.
|
|
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.
|
|
61
|
-
gherkin (2.
|
|
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
|
|
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.
|
|
80
|
+
mime-types (1.17.2)
|
|
81
|
+
multi_json (1.0.4)
|
|
79
82
|
nokogiri (1.5.0)
|
|
80
|
-
polyglot (0.3.
|
|
81
|
-
rack (1.2.
|
|
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.
|
|
87
|
-
actionmailer (= 3.0.
|
|
88
|
-
actionpack (= 3.0.
|
|
89
|
-
activerecord (= 3.0.
|
|
90
|
-
activeresource (= 3.0.
|
|
91
|
-
activesupport (= 3.0.
|
|
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.
|
|
94
|
-
railties (3.0.
|
|
95
|
-
actionpack (= 3.0.
|
|
96
|
-
activesupport (= 3.0.
|
|
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
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
131
|
-
|
|
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.
|
|
146
|
+
treetop (1.4.10)
|
|
147
|
+
polyglot
|
|
134
148
|
polyglot (>= 0.3.1)
|
|
135
|
-
tzinfo (0.3.
|
|
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 (
|
|
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)
|
data/README.rdoc
CHANGED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
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 = [
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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::
|
|
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='
|
|
196
|
-
rendered_dynamic_fieldset += "<input type='hidden' name='
|
|
197
|
-
rendered_dynamic_fieldset += "<input type='hidden' name='
|
|
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
|