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
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
|