formbuilder-rb 0.0.4 → 0.2.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.
- checksums.yaml +4 -4
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +219 -0
- data/Guardfile +17 -0
- data/{MIT-LICENSE → LICENSE.md} +1 -1
- data/README.md +86 -0
- data/app/controllers/formbuilder/concerns/forms_controller.rb +59 -0
- data/app/models/formbuilder/entry_attachment.rb +2 -8
- data/app/models/formbuilder/form.rb +53 -0
- data/app/models/formbuilder/response_field.rb +23 -10
- data/app/models/formbuilder/response_field_address.rb +12 -1
- data/app/models/formbuilder/response_field_checkboxes.rb +38 -0
- data/app/models/formbuilder/response_field_date.rb +7 -1
- data/app/models/formbuilder/response_field_dropdown.rb +2 -1
- data/app/models/formbuilder/response_field_email.rb +14 -2
- data/app/models/formbuilder/response_field_file.rb +75 -20
- data/app/models/formbuilder/response_field_number.rb +9 -2
- data/app/models/formbuilder/response_field_page_break.rb +13 -0
- data/app/models/formbuilder/response_field_paragraph.rb +19 -3
- data/app/models/formbuilder/response_field_price.rb +10 -6
- data/app/models/formbuilder/response_field_radio.rb +11 -2
- data/app/models/formbuilder/response_field_section_break.rb +12 -2
- data/app/models/formbuilder/response_field_table.rb +222 -0
- data/app/models/formbuilder/response_field_text.rb +9 -2
- data/app/models/formbuilder/response_field_time.rb +8 -1
- data/app/models/formbuilder/response_field_website.rb +26 -2
- data/app/uploaders/formbuilder/entry_attachment_uploader.rb +11 -1
- data/bin/rails +8 -0
- data/circle.yml +9 -0
- data/config/spring.rb +1 -0
- data/db/migrate/20130924185815_create_formbuilder_entry_attachments.rb +1 -0
- data/formbuilder-rb.gemspec +41 -0
- data/formbuilder-rb.sublime-project +20 -0
- data/lib/formbuilder.rb +8 -3
- data/lib/formbuilder/entry.rb +102 -159
- data/lib/formbuilder/entry_validator.rb +13 -6
- data/lib/formbuilder/version.rb +1 -1
- data/lib/formbuilder/views/entry_dl.rb +56 -0
- data/lib/formbuilder/views/form.rb +81 -0
- data/lib/formbuilder/views/form_field.rb +45 -0
- data/spec/controllers/formbuilder/forms_controller_spec.rb +40 -0
- data/spec/dummy/.ruby-gemset +1 -0
- data/spec/dummy/.ruby-version +1 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/forms_controller.rb +3 -0
- data/spec/dummy/app/controllers/test_controller.rb +57 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/models/entry.rb +7 -0
- data/spec/dummy/app/models/entry_with_alternate_column_name.rb +11 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/test/_form.rb +2 -0
- data/spec/dummy/app/views/test/render_entry.html.erb +1 -0
- data/spec/dummy/app/views/test/show_form.html.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +25 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml.ci +15 -0
- data/spec/dummy/config/database.yml.example +15 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +52 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +12 -0
- data/spec/dummy/db/migrate/20130924182939_create_entries.rb +13 -0
- data/spec/dummy/db/migrate/20130924192151_create_formbuilder_forms.formbuilder.rb +11 -0
- data/spec/dummy/db/migrate/20130924192152_create_formbuilder_response_fields.formbuilder.rb +17 -0
- data/spec/dummy/db/migrate/20130926205845_create_formbuilder_entry_attachments.formbuilder.rb +12 -0
- data/spec/dummy/db/migrate/20140128000000_create_entry_with_alternate_column_names.rb +13 -0
- data/spec/dummy/db/schema.rb +64 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/test/fixtures/entries.yml +9 -0
- data/spec/dummy/test/fixtures/response_fields.yml +19 -0
- data/spec/dummy/test/models/entry_test.rb +7 -0
- data/spec/dummy/test/models/response_field_test.rb +7 -0
- data/spec/factories/formbuilder_forms.rb +45 -0
- data/spec/features/form_renderer_spec.rb +30 -0
- data/spec/features/submitting_an_entry_spec.rb +79 -0
- data/spec/fixtures/test_files/text.txt +1 -0
- data/spec/fixtures/test_files/text2.txt +1 -0
- data/spec/lib/formbuilder/entry_spec.rb +199 -0
- data/spec/lib/formbuilder/entry_validator_spec.rb +215 -0
- data/spec/lib/formbuilder/entry_with_alternate_column_name_spec.rb +37 -0
- data/spec/lib/formbuilder/views/entry_dl_spec.rb +38 -0
- data/spec/models/formbuilder/entry_attachment_spec.rb +17 -0
- data/spec/models/formbuilder/form_spec.rb +100 -0
- data/spec/models/formbuilder/response_field_address_spec.rb +25 -0
- data/spec/models/formbuilder/response_field_checkboxes_spec.rb +57 -0
- data/spec/models/formbuilder/response_field_file_spec.rb +80 -0
- data/spec/models/formbuilder/response_field_paragraph_spec.rb +22 -0
- data/spec/models/formbuilder/response_field_radio_spec.rb +30 -0
- data/spec/models/formbuilder/response_field_spec.rb +21 -0
- data/spec/models/formbuilder/response_field_table_spec.rb +124 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/database_cleaner.rb +21 -0
- data/spec/support/submitting_an_entry_spec_helper.rb +151 -0
- metadata +286 -44
- data/app/controllers/formbuilder/forms_controller.rb +0 -53
- data/lib/formbuilder/entry_renderer.rb +0 -47
- data/lib/formbuilder/entry_table_renderer.rb +0 -58
- data/lib/formbuilder/form_renderer.rb +0 -102
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ba39021b688857fba2a29ba89b37132da3f41aa7
|
|
4
|
+
data.tar.gz: 76670efaf98c3781c137996f4a18f4151578795a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 44772ca06fb009e7bd3c2e2b220814c07d233687a98921c4c657c53b388ac6b218e712cdc2403a8b728b3caf9198f38c4be2416e589c9349dffdd8736ae46bb2
|
|
7
|
+
data.tar.gz: 5b0e3f312708d04ade5ec4ec3d7c75a448a8c85156c04ac59ceb6a80d61e599425098afe62785c2e3f11ea1bccbc3c26aded6107f82c97b86649bd6bc14259c0
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-gemset
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
formbuilder-rb
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.1.1
|
data/Gemfile
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
# Declare your gem's dependencies in formbuilder.gemspec.
|
|
4
|
+
# Bundler will treat runtime dependencies like base dependencies, and
|
|
5
|
+
# development dependencies will be added by default to the :development group.
|
|
6
|
+
gemspec
|
|
7
|
+
|
|
8
|
+
# Declare any dependencies that are still in development here instead of in
|
|
9
|
+
# your gemspec. These might include edge Rails or gems from your path or
|
|
10
|
+
# Git. Remember to move these dependencies to your gemspec before releasing
|
|
11
|
+
# your gem to rubygems.org.
|
|
12
|
+
|
|
13
|
+
# To use debugger
|
|
14
|
+
# gem 'debugger'
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
formbuilder-rb (0.2.0)
|
|
5
|
+
carrierwave
|
|
6
|
+
erector-rails4
|
|
7
|
+
geocoder
|
|
8
|
+
pg
|
|
9
|
+
rails (= 4.1.0.rc1)
|
|
10
|
+
rinku
|
|
11
|
+
rmagick
|
|
12
|
+
|
|
13
|
+
GEM
|
|
14
|
+
remote: https://rubygems.org/
|
|
15
|
+
specs:
|
|
16
|
+
actionmailer (4.1.0.rc1)
|
|
17
|
+
actionpack (= 4.1.0.rc1)
|
|
18
|
+
actionview (= 4.1.0.rc1)
|
|
19
|
+
mail (~> 2.5.4)
|
|
20
|
+
actionpack (4.1.0.rc1)
|
|
21
|
+
actionview (= 4.1.0.rc1)
|
|
22
|
+
activesupport (= 4.1.0.rc1)
|
|
23
|
+
rack (~> 1.5.2)
|
|
24
|
+
rack-test (~> 0.6.2)
|
|
25
|
+
actionview (4.1.0.rc1)
|
|
26
|
+
activesupport (= 4.1.0.rc1)
|
|
27
|
+
builder (~> 3.1)
|
|
28
|
+
erubis (~> 2.7.0)
|
|
29
|
+
activemodel (4.1.0.rc1)
|
|
30
|
+
activesupport (= 4.1.0.rc1)
|
|
31
|
+
builder (~> 3.1)
|
|
32
|
+
activerecord (4.1.0.rc1)
|
|
33
|
+
activemodel (= 4.1.0.rc1)
|
|
34
|
+
activesupport (= 4.1.0.rc1)
|
|
35
|
+
arel (~> 5.0.0)
|
|
36
|
+
activesupport (4.1.0.rc1)
|
|
37
|
+
i18n (~> 0.6, >= 0.6.9)
|
|
38
|
+
json (~> 1.7, >= 1.7.7)
|
|
39
|
+
minitest (~> 5.1)
|
|
40
|
+
thread_safe (~> 0.1)
|
|
41
|
+
tzinfo (~> 1.1)
|
|
42
|
+
addressable (2.3.5)
|
|
43
|
+
arel (5.0.0)
|
|
44
|
+
atomic (1.1.15)
|
|
45
|
+
builder (3.2.2)
|
|
46
|
+
capybara (2.2.1)
|
|
47
|
+
mime-types (>= 1.16)
|
|
48
|
+
nokogiri (>= 1.3.3)
|
|
49
|
+
rack (>= 1.0.0)
|
|
50
|
+
rack-test (>= 0.5.4)
|
|
51
|
+
xpath (~> 2.0)
|
|
52
|
+
carrierwave (0.10.0)
|
|
53
|
+
activemodel (>= 3.2.0)
|
|
54
|
+
activesupport (>= 3.2.0)
|
|
55
|
+
json (>= 1.7)
|
|
56
|
+
mime-types (>= 1.16)
|
|
57
|
+
celluloid (0.15.2)
|
|
58
|
+
timers (~> 1.1.0)
|
|
59
|
+
celluloid-io (0.15.0)
|
|
60
|
+
celluloid (>= 0.15.0)
|
|
61
|
+
nio4r (>= 0.5.0)
|
|
62
|
+
coderay (1.1.0)
|
|
63
|
+
coveralls (0.7.0)
|
|
64
|
+
multi_json (~> 1.3)
|
|
65
|
+
rest-client
|
|
66
|
+
simplecov (>= 0.7)
|
|
67
|
+
term-ansicolor
|
|
68
|
+
thor
|
|
69
|
+
daemons (1.1.9)
|
|
70
|
+
database_cleaner (1.2.0)
|
|
71
|
+
diff-lcs (1.2.5)
|
|
72
|
+
docile (1.1.3)
|
|
73
|
+
erector-rails4 (0.1.0)
|
|
74
|
+
rails (= 4.1.0.rc1)
|
|
75
|
+
treetop (>= 1.2.3)
|
|
76
|
+
erubis (2.7.0)
|
|
77
|
+
eventmachine (1.0.3)
|
|
78
|
+
factory_girl (4.4.0)
|
|
79
|
+
activesupport (>= 3.0.0)
|
|
80
|
+
factory_girl_rails (4.4.1)
|
|
81
|
+
factory_girl (~> 4.4.0)
|
|
82
|
+
railties (>= 3.0.0)
|
|
83
|
+
ffi (1.9.3)
|
|
84
|
+
formatador (0.2.4)
|
|
85
|
+
geocoder (1.1.9)
|
|
86
|
+
guard (2.5.1)
|
|
87
|
+
formatador (>= 0.2.4)
|
|
88
|
+
listen (~> 2.6)
|
|
89
|
+
lumberjack (~> 1.0)
|
|
90
|
+
pry (>= 0.9.12)
|
|
91
|
+
thor (>= 0.18.1)
|
|
92
|
+
guard-rspec (4.2.8)
|
|
93
|
+
guard (~> 2.1)
|
|
94
|
+
rspec (>= 2.14, < 4.0)
|
|
95
|
+
hike (1.2.3)
|
|
96
|
+
i18n (0.6.9)
|
|
97
|
+
json (1.8.1)
|
|
98
|
+
launchy (2.4.2)
|
|
99
|
+
addressable (~> 2.3)
|
|
100
|
+
listen (2.7.0)
|
|
101
|
+
celluloid (>= 0.15.2)
|
|
102
|
+
celluloid-io (>= 0.15.0)
|
|
103
|
+
rb-fsevent (>= 0.9.3)
|
|
104
|
+
rb-inotify (>= 0.9)
|
|
105
|
+
lumberjack (1.0.4)
|
|
106
|
+
mail (2.5.4)
|
|
107
|
+
mime-types (~> 1.16)
|
|
108
|
+
treetop (~> 1.4.8)
|
|
109
|
+
method_source (0.8.2)
|
|
110
|
+
mime-types (1.25.1)
|
|
111
|
+
mini_portile (0.5.2)
|
|
112
|
+
minitest (5.3.0)
|
|
113
|
+
multi_json (1.9.0)
|
|
114
|
+
nio4r (1.0.0)
|
|
115
|
+
nokogiri (1.6.1)
|
|
116
|
+
mini_portile (~> 0.5.0)
|
|
117
|
+
pg (0.17.1)
|
|
118
|
+
polyglot (0.3.4)
|
|
119
|
+
pry (0.9.12.6)
|
|
120
|
+
coderay (~> 1.0)
|
|
121
|
+
method_source (~> 0.8)
|
|
122
|
+
slop (~> 3.4)
|
|
123
|
+
rack (1.5.2)
|
|
124
|
+
rack-test (0.6.2)
|
|
125
|
+
rack (>= 1.0)
|
|
126
|
+
rails (4.1.0.rc1)
|
|
127
|
+
actionmailer (= 4.1.0.rc1)
|
|
128
|
+
actionpack (= 4.1.0.rc1)
|
|
129
|
+
actionview (= 4.1.0.rc1)
|
|
130
|
+
activemodel (= 4.1.0.rc1)
|
|
131
|
+
activerecord (= 4.1.0.rc1)
|
|
132
|
+
activesupport (= 4.1.0.rc1)
|
|
133
|
+
bundler (>= 1.3.0, < 2.0)
|
|
134
|
+
railties (= 4.1.0.rc1)
|
|
135
|
+
sprockets-rails (~> 2.0.0)
|
|
136
|
+
railties (4.1.0.rc1)
|
|
137
|
+
actionpack (= 4.1.0.rc1)
|
|
138
|
+
activesupport (= 4.1.0.rc1)
|
|
139
|
+
rake (>= 0.8.7)
|
|
140
|
+
thor (>= 0.18.1, < 2.0)
|
|
141
|
+
rake (10.1.1)
|
|
142
|
+
rb-fsevent (0.9.4)
|
|
143
|
+
rb-inotify (0.9.3)
|
|
144
|
+
ffi (>= 0.5.0)
|
|
145
|
+
rest-client (1.6.7)
|
|
146
|
+
mime-types (>= 1.16)
|
|
147
|
+
rinku (1.7.3)
|
|
148
|
+
rmagick (2.13.2)
|
|
149
|
+
rspec (2.14.1)
|
|
150
|
+
rspec-core (~> 2.14.0)
|
|
151
|
+
rspec-expectations (~> 2.14.0)
|
|
152
|
+
rspec-mocks (~> 2.14.0)
|
|
153
|
+
rspec-core (2.14.8)
|
|
154
|
+
rspec-expectations (2.14.5)
|
|
155
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
|
156
|
+
rspec-mocks (2.14.6)
|
|
157
|
+
rspec-rails (2.14.1)
|
|
158
|
+
actionpack (>= 3.0)
|
|
159
|
+
activemodel (>= 3.0)
|
|
160
|
+
activesupport (>= 3.0)
|
|
161
|
+
railties (>= 3.0)
|
|
162
|
+
rspec-core (~> 2.14.0)
|
|
163
|
+
rspec-expectations (~> 2.14.0)
|
|
164
|
+
rspec-mocks (~> 2.14.0)
|
|
165
|
+
simplecov (0.8.2)
|
|
166
|
+
docile (~> 1.1.0)
|
|
167
|
+
multi_json
|
|
168
|
+
simplecov-html (~> 0.8.0)
|
|
169
|
+
simplecov-html (0.8.0)
|
|
170
|
+
slop (3.4.7)
|
|
171
|
+
spring (1.1.2)
|
|
172
|
+
spring-commands-rspec (1.0.1)
|
|
173
|
+
spring (>= 0.9.1)
|
|
174
|
+
sprockets (2.11.0)
|
|
175
|
+
hike (~> 1.2)
|
|
176
|
+
multi_json (~> 1.0)
|
|
177
|
+
rack (~> 1.0)
|
|
178
|
+
tilt (~> 1.1, != 1.3.0)
|
|
179
|
+
sprockets-rails (2.0.1)
|
|
180
|
+
actionpack (>= 3.0)
|
|
181
|
+
activesupport (>= 3.0)
|
|
182
|
+
sprockets (~> 2.8)
|
|
183
|
+
term-ansicolor (1.3.0)
|
|
184
|
+
tins (~> 1.0)
|
|
185
|
+
terminal-notifier-guard (1.5.3)
|
|
186
|
+
thin (1.6.2)
|
|
187
|
+
daemons (>= 1.0.9)
|
|
188
|
+
eventmachine (>= 1.0.0)
|
|
189
|
+
rack (>= 1.0.0)
|
|
190
|
+
thor (0.18.1)
|
|
191
|
+
thread_safe (0.2.0)
|
|
192
|
+
atomic (>= 1.1.7, < 2)
|
|
193
|
+
tilt (1.4.1)
|
|
194
|
+
timers (1.1.0)
|
|
195
|
+
tins (1.0.0)
|
|
196
|
+
treetop (1.4.15)
|
|
197
|
+
polyglot
|
|
198
|
+
polyglot (>= 0.3.1)
|
|
199
|
+
tzinfo (1.1.0)
|
|
200
|
+
thread_safe (~> 0.1)
|
|
201
|
+
xpath (2.0.0)
|
|
202
|
+
nokogiri (~> 1.3)
|
|
203
|
+
|
|
204
|
+
PLATFORMS
|
|
205
|
+
ruby
|
|
206
|
+
|
|
207
|
+
DEPENDENCIES
|
|
208
|
+
capybara
|
|
209
|
+
coveralls
|
|
210
|
+
database_cleaner
|
|
211
|
+
factory_girl_rails
|
|
212
|
+
formbuilder-rb!
|
|
213
|
+
guard-rspec
|
|
214
|
+
launchy
|
|
215
|
+
rspec-rails
|
|
216
|
+
spring
|
|
217
|
+
spring-commands-rspec
|
|
218
|
+
terminal-notifier-guard
|
|
219
|
+
thin
|
data/Guardfile
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# A sample Guardfile
|
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
|
3
|
+
|
|
4
|
+
group :all_specs do
|
|
5
|
+
guard :rspec, all_on_start: false, all_after_pass: false,
|
|
6
|
+
cmd: 'spring rspec' do
|
|
7
|
+
|
|
8
|
+
watch('spec/spec_helper.rb') { "spec" }
|
|
9
|
+
|
|
10
|
+
watch(%r{^spec/.+_spec\.rb$})
|
|
11
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
|
12
|
+
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
|
13
|
+
watch(%r{^app/models/formbuilder/(.+)\.rb$}) { |m| "app/models/formbuilder/#{m[1]}_spec.rb" }
|
|
14
|
+
watch(%r{^lib/formbuilder/(.+)\.rb$}) { |m| "spec/lib/formbuilder/#{m[1]}_spec.rb" }
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
data/{MIT-LICENSE → LICENSE.md}
RENAMED
data/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#### Alert: This gem is used internally at [DOBT](https://github.com/dobtco), and might not be perfect for your implementation. We recommend forking this repository and using it as a starting opint.
|
|
2
|
+
|
|
3
|
+
Formbuilder.rb [](https://circleci.com/gh/dobtco/formbuilder-rb) <a href='https://coveralls.io/r/dobtco/formbuilder-rb'><img src='https://coveralls.io/repos/dobtco/formbuilder-rb/badge.png' alt='Coverage Status' /></a>
|
|
4
|
+
========
|
|
5
|
+
|
|
6
|
+
Formbuilder.rb is a [Rails Engine](http://edgeguides.rubyonrails.org/engines.html) that's designed as a compliment to [Formbuilder.js](https://github.com/dobtco/formbuilder), a library that lets your users create their own webforms inside of your application.
|
|
7
|
+
|
|
8
|
+
Since Formbuilder.rb is a fairly non-trial piece of software, it's important to understand its components and how it works:
|
|
9
|
+
|
|
10
|
+
1. We add `ResponseField`, `EntryAttachment`, and `Form` models to your application. (Each type of response field (text, checkboxes, dropdown, etc.) uses [STI](blog.thirst.co/post/14885390861/rails-single-table-inheritance), inheriting from the `ResponseField` model.)
|
|
11
|
+
3. You `include Formbuilder::Entry` in an existing model.
|
|
12
|
+
4. We add a few classes to help you render forms and entries.
|
|
13
|
+
|
|
14
|
+
*Note: All Formbuilder models and classes are namespaced within the `Formbuilder` module.*
|
|
15
|
+
|
|
16
|
+
If you have a few moments, consider reading the source, especially the Rails app in `spec/dummy`, as it should give you a good idea of how Formbuilder integrates.
|
|
17
|
+
|
|
18
|
+
### Requirements
|
|
19
|
+
|
|
20
|
+
**Postgres is currently required.** See [Issue #1](https://github.com/dobtco/formbuilder-rb/issues/1).
|
|
21
|
+
|
|
22
|
+
[Carrierwave](https://github.com/carrierwaveuploader/carrierwave) and [Rmagick](https://github.com/rmagick/rmagick) for file uploads.
|
|
23
|
+
[Geocoder](https://github.com/alexreisner/geocoder) to geocode address fields.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Installation
|
|
27
|
+
#### 1) In your Gemfile
|
|
28
|
+
`gem 'formbuilder-rb', require: 'formbuilder'`
|
|
29
|
+
|
|
30
|
+
#### 2) Create the migrations for the Formbuilder models
|
|
31
|
+
1. `rake formbuilder:install:migrations`
|
|
32
|
+
2. `rake db:migrate`
|
|
33
|
+
|
|
34
|
+
#### 3) The `Entry` model gets mixed in to an existing model in your application
|
|
35
|
+
```ruby
|
|
36
|
+
# responses :hstore
|
|
37
|
+
# responses_text :text
|
|
38
|
+
|
|
39
|
+
class Entry < ActiveRecord::Base
|
|
40
|
+
include Formbuilder::Entry
|
|
41
|
+
end
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### 4) Associate a form with an existing model (optional)
|
|
45
|
+
```ruby
|
|
46
|
+
class MovieTheater < ActiveRecord::Base
|
|
47
|
+
has_one :form, as: :formable, class_name: 'Formbuilder::Form'
|
|
48
|
+
end
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Usage
|
|
52
|
+
|
|
53
|
+
#### Render a form
|
|
54
|
+
```erb
|
|
55
|
+
<%= Formbuilder::FormRenderer.new(@form, @entry).to_html %>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### Save an entry
|
|
59
|
+
```ruby
|
|
60
|
+
@entry = Entry.new(form: @form)
|
|
61
|
+
@entry.save_responses(params[:response_fields], @form.response_fields) # validates automatically
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### Validate an entry
|
|
65
|
+
```ruby
|
|
66
|
+
@entry.valid?
|
|
67
|
+
# => false
|
|
68
|
+
|
|
69
|
+
@entry.error_for(form.response_fields.first)
|
|
70
|
+
# => "can't be blank"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### Integrate with the [Formbuilder.js](https://github.com/dobtco/formbuilder) frontend
|
|
74
|
+
```ruby
|
|
75
|
+
# config/routes.rb
|
|
76
|
+
resources :forms, only: [:update]
|
|
77
|
+
|
|
78
|
+
# app/controllers/forms_controller.rb
|
|
79
|
+
class FormsController < ApplicationController
|
|
80
|
+
include Formbuilder::Concerns::FormsController
|
|
81
|
+
end
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### License
|
|
85
|
+
|
|
86
|
+
MIT
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# A controller to integrate with the Formbuilder.js frontend (https://github.com/dobtco/formbuilder)
|
|
2
|
+
|
|
3
|
+
module Formbuilder
|
|
4
|
+
module Concerns
|
|
5
|
+
module FormsController
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
included do
|
|
9
|
+
before_filter :load_form, only: [:update]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def update
|
|
13
|
+
existing_response_field_ids = []
|
|
14
|
+
cids = {}
|
|
15
|
+
|
|
16
|
+
(params[:fields] || []).each_with_index do |field_params, i|
|
|
17
|
+
response_field = field_params[:id].present? ?
|
|
18
|
+
@form.response_fields.find { |rf| rf.id == field_params[:id].to_i } :
|
|
19
|
+
@form.response_fields.build
|
|
20
|
+
|
|
21
|
+
response_field.update_attributes(transformed_field_params(field_params, i))
|
|
22
|
+
cids[response_field.id] = field_params[:cid]
|
|
23
|
+
existing_response_field_ids.push response_field.id
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# destroy fields that no longer exist
|
|
27
|
+
@form.response_fields.each do |response_field|
|
|
28
|
+
response_field.destroy unless response_field.id.in?(existing_response_field_ids)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
@form.response_fields.reload
|
|
32
|
+
|
|
33
|
+
@form.response_fields.each do |rf|
|
|
34
|
+
rf.cid = cids[rf.id]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
render json: @form.response_fields_json
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
def load_form
|
|
42
|
+
@form = Formbuilder::Form.find(params[:id])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def transformed_field_params(field_params, i)
|
|
46
|
+
filtered_params = field_params.select { |k, _|
|
|
47
|
+
k.to_sym.in?(Formbuilder::ResponseField::ALLOWED_PARAMS)
|
|
48
|
+
}.merge(
|
|
49
|
+
sort_order: i,
|
|
50
|
+
type: "Formbuilder::ResponseField#{field_params[:field_type].camelize}"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
filtered_params.permit!
|
|
54
|
+
filtered_params
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -2,14 +2,8 @@ module Formbuilder
|
|
|
2
2
|
class EntryAttachment < ActiveRecord::Base
|
|
3
3
|
|
|
4
4
|
mount_uploader :upload, Formbuilder::EntryAttachmentUploader
|
|
5
|
-
before_save :update_upload_attributes
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
def update_upload_attributes
|
|
9
|
-
if upload.present? && upload_changed?
|
|
10
|
-
self.content_type = upload.file.content_type
|
|
11
|
-
end
|
|
12
|
-
end
|
|
6
|
+
validates :upload, presence: true
|
|
13
7
|
|
|
14
8
|
end
|
|
15
|
-
end
|
|
9
|
+
end
|