noodall-form-builder 0.0.10 → 0.0.11
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/app/controllers/noodall/form_responses_controller.rb +1 -1
- data/app/models/noodall/form.rb +12 -10
- data/app/models/noodall/form_response.rb +2 -3
- data/app/views/form_mailer/form_response_thankyou.html.erb +2 -4
- data/app/views/noodall/admin/form_responses/index.html.erb +1 -1
- data/app/views/noodall/admin/forms/show.html.erb +12 -0
- data/app/views/noodall/form_responses/create.html.erb +2 -2
- data/features/form_builder.feature +9 -8
- data/features/form_module.feature +14 -0
- data/features/step_definitions/form_builder_steps.rb +15 -9
- data/features/support/mm_factory_steps.rb +14 -0
- data/lib/noodall/form_builder/version.rb +1 -1
- metadata +5 -4
data/app/models/noodall/form.rb
CHANGED
@@ -3,11 +3,13 @@ module Noodall
|
|
3
3
|
include MongoMapper::Document
|
4
4
|
plugin MongoMapper::Plugins::MultiParameterAttributes
|
5
5
|
plugin Noodall::GlobalUpdateTime
|
6
|
-
|
6
|
+
|
7
7
|
key :title, String, :required => true
|
8
8
|
key :description, String
|
9
9
|
key :email, String, :format => /.+\@.+\..+/
|
10
|
-
|
10
|
+
key :thank_you_message, :default => 'Thank you for getting in contact.'
|
11
|
+
key :thank_you_email, :default => 'Thank you for getting in contact.'
|
12
|
+
|
11
13
|
MANDATORY_FIELDS = ['Name','Email']
|
12
14
|
many :fields, :class => Noodall::Field
|
13
15
|
many :responses, :class => Noodall::FormResponse do
|
@@ -18,21 +20,21 @@ module Noodall
|
|
18
20
|
self.select {|r| r.spaminess >= (self.class.defensio_config['spam_threshold'] || 0.75)}
|
19
21
|
end
|
20
22
|
end
|
21
|
-
|
23
|
+
|
22
24
|
before_save :create_mandatory_fields!
|
23
|
-
|
25
|
+
|
24
26
|
timestamps!
|
25
|
-
|
27
|
+
|
26
28
|
validates_associated :fields, :message => "have not had a name completed"
|
27
|
-
|
29
|
+
|
28
30
|
def boolean_fields
|
29
31
|
self.fields.select{|f| f.class == Noodall::CheckBox }
|
30
32
|
end
|
31
|
-
|
33
|
+
|
32
34
|
def required_fields
|
33
35
|
self.fields.select{|f| f.required }
|
34
36
|
end
|
35
|
-
|
37
|
+
|
36
38
|
def create_mandatory_fields!
|
37
39
|
MANDATORY_FIELDS.each do |mf|
|
38
40
|
if fields.blank? or fields.select{|f| f.name == mf }.empty?
|
@@ -40,6 +42,6 @@ module Noodall
|
|
40
42
|
end
|
41
43
|
end
|
42
44
|
end
|
43
|
-
|
45
|
+
|
44
46
|
end
|
45
|
-
end
|
47
|
+
end
|
@@ -40,12 +40,11 @@ module Noodall
|
|
40
40
|
def check_for_spam
|
41
41
|
if self.defensio_signature.blank?
|
42
42
|
status, response = self.class.defensio.post_document(self.defensio_attributes)
|
43
|
-
Rails.logger.debug "Defensio said: #{response.inspect}"
|
44
43
|
return unless status == 200
|
45
44
|
|
46
45
|
self.defensio_signature = response['signature']
|
47
|
-
self.spaminess = response['spaminess']
|
48
|
-
self.approved = (
|
46
|
+
self.spaminess = response['spaminess'] || 0
|
47
|
+
self.approved = (spaminess < (self.class.defensio_config['spam_threshold'] || 0.75))
|
49
48
|
end
|
50
49
|
end
|
51
50
|
|
@@ -6,9 +6,7 @@
|
|
6
6
|
<body>
|
7
7
|
<p>Dear <%= "#{@response.name}" %>,</p>
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
<p>We will be in touch shortly.</p>
|
9
|
+
<%= simple_format(@form.thank_you_email) %>
|
12
10
|
|
13
11
|
<p>Regards<br />
|
14
12
|
<%= Noodall::UI.app_name %>
|
@@ -32,4 +30,4 @@ Subject: <%= "#{Noodall::UI.app_name}: Response to the #{@form.title} form." %><
|
|
32
30
|
</tbody>
|
33
31
|
</table>
|
34
32
|
</body>
|
35
|
-
</html>
|
33
|
+
</html>
|
@@ -20,7 +20,7 @@
|
|
20
20
|
<% @responses.sort_by(&:created_at).reverse.each do |response| %>
|
21
21
|
<tr id="form-<%= response.id %>" class="<%=cycle('odd', 'even')%>">
|
22
22
|
<td class="edit"><%= mail_to response.email, h(response.name) %></td>
|
23
|
-
<td><%= @form.fields.collect{|f| "<strong>#{f.name}:</strong> #{response.send(f.underscored_name)}" }.join(", ").html_safe %></td>
|
23
|
+
<td><%= @form.fields.collect{|f| "<strong>#{f.name}:</strong> #{response.respond_to?(f.underscored_name) ? response.send(f.underscored_name) : ''}" }.join(", ").html_safe %></td>
|
24
24
|
<td><%= h response.created_at.to_formatted_s(:long_dot) %></td>
|
25
25
|
<td><%= link_to 'Delete', noodall_admin_form_form_response_path(@form, response), :confirm => 'Are you sure?', :method => :delete, :class => 'delete', :title => 'Delete this response' %>
|
26
26
|
<%= link_to 'Mark as Spam', mark_as_spam_noodall_admin_form_form_response_path(@form, response), :class => 'spam', :title => 'Mark this response as spam and delete' %></td>
|
@@ -24,6 +24,18 @@
|
|
24
24
|
<span class="input-wrap"><%= f.text_field :email %></span>
|
25
25
|
</p>
|
26
26
|
|
27
|
+
<p>
|
28
|
+
<span class="tooltip" title="Enter an message that will displayed once thet have submitted the form"> </span>
|
29
|
+
<%= f.label :thank_you_message %><br/>
|
30
|
+
<span class="input-wrap"><%= f.text_area :thank_you_message, :rows => 3 %></span>
|
31
|
+
</p>
|
32
|
+
|
33
|
+
<p>
|
34
|
+
<span class="tooltip" title="Enter a message they will see in the thank you email"> </span>
|
35
|
+
<%= f.label :thank_you_email %><br/>
|
36
|
+
<span class="input-wrap"><%= f.text_area :thank_you_email, :rows => 3 %></span>
|
37
|
+
</p>
|
38
|
+
|
27
39
|
<div id="form-fields">
|
28
40
|
<fieldset>
|
29
41
|
<div id="content-table">
|
@@ -9,15 +9,17 @@ Feature: Form builder
|
|
9
9
|
| Name |
|
10
10
|
| Email |
|
11
11
|
When I fill the following fields:
|
12
|
-
| Field
|
13
|
-
| Title
|
14
|
-
| Description
|
15
|
-
| Email
|
12
|
+
| Field | Value |
|
13
|
+
| Title | A Contact Form |
|
14
|
+
| Description | So people can get in touch |
|
15
|
+
| Email | hello@weaarebeef.co.uk |
|
16
|
+
| Thank you message | Cheers then! |
|
17
|
+
| Thank you email | Thaanks for that |
|
16
18
|
And I add the fields I want on the form
|
17
19
|
And I press "Create"
|
18
20
|
Then I should see the new form in the Form List
|
19
21
|
|
20
|
-
@
|
22
|
+
@javascript
|
21
23
|
Scenario Outline: Add fields
|
22
24
|
Given I am creating a form
|
23
25
|
When I select "<Field Type>" from "Add a new field"
|
@@ -31,7 +33,7 @@ Feature: Form builder
|
|
31
33
|
| Radio | Name, Label, Default Option, Options, Required |
|
32
34
|
| Check Box | Name, Label, Default state, Required |
|
33
35
|
|
34
|
-
@
|
36
|
+
@javascript
|
35
37
|
Scenario: Reorder fields
|
36
38
|
Given a form exists with the following fields:
|
37
39
|
| Name | Text Field |
|
@@ -43,7 +45,7 @@ Feature: Form builder
|
|
43
45
|
Then the "Title" field should be at position 1
|
44
46
|
When I click the "down" arrow next to "Email" once
|
45
47
|
Then the "Email" field should be at position 4
|
46
|
-
When I press "
|
48
|
+
When I press "Update"
|
47
49
|
And I view the form on the website
|
48
50
|
Then I should see the fields in the order I set
|
49
51
|
|
@@ -53,7 +55,6 @@ Feature: Form builder
|
|
53
55
|
And I click "Download Responses" on the forms row in the Form List
|
54
56
|
Then I should receive a CSV file containing all the responses to that form
|
55
57
|
|
56
|
-
@javscript @wip
|
57
58
|
Scenario: Update an existing form with responses
|
58
59
|
Given a form exists that has had many responses
|
59
60
|
When I am editing the last form
|
@@ -38,3 +38,17 @@ Feature: Form Module
|
|
38
38
|
Then it should be checked against the validation speficied in the form builder
|
39
39
|
And it should be rejected if the the response does not meet the validation
|
40
40
|
And the website visitor should see an error message
|
41
|
+
|
42
|
+
Scenario: Custom Thank You Messages
|
43
|
+
Given a form exists with the following:
|
44
|
+
| thank_you_message | Thanks for that |
|
45
|
+
| thank_you_email | Cheers then! |
|
46
|
+
When I view the form on the website
|
47
|
+
And I fill in the following:
|
48
|
+
| Name | Dave |
|
49
|
+
| Email | spoon@buttonmooon.com |
|
50
|
+
And I press "Send"
|
51
|
+
Then I should see "Thanks for that"
|
52
|
+
And "spoon@buttonmooon.com" should receive an email
|
53
|
+
When I open the email
|
54
|
+
Then I should see "Cheers then!" in the email body
|
@@ -192,7 +192,7 @@ end
|
|
192
192
|
When /^a form response is deemed to be spam$/ do
|
193
193
|
When %{a website visitor visits the content}
|
194
194
|
defensio_dummy = double("defensio dummy")
|
195
|
-
defensio_dummy.stub(:post_document){ [200, {
|
195
|
+
defensio_dummy.stub(:post_document){ [200, {'spaminess' => 1}] }
|
196
196
|
|
197
197
|
Noodall::FormResponse.stub(:defensio).and_return(defensio_dummy)
|
198
198
|
When %{they fill in and submit the form}
|
@@ -229,18 +229,17 @@ end
|
|
229
229
|
|
230
230
|
Then /^the "([^"]*)" field should be at position (\d+)$/ do |field, position|
|
231
231
|
index = 0
|
232
|
-
|
232
|
+
all('table.content tbody tr').each do |fieldset|
|
233
233
|
index = index+1
|
234
|
-
|
235
|
-
return unless fieldset.find('input[value=#{field}]').nil?
|
234
|
+
break if fieldset.has_css?("input[value=#{field}]")
|
236
235
|
end
|
237
|
-
|
236
|
+
|
238
237
|
position.to_i.should == index
|
239
238
|
end
|
240
239
|
|
241
240
|
When /^I click the "([^\"]*)" arrow next to "([^\"]*)" once$/ do |arrow, field|
|
242
|
-
|
243
|
-
|
241
|
+
all('table.content tbody tr').each do |fieldset|
|
242
|
+
fieldset.find("a:contains('#{arrow}')").click if fieldset.has_css?("input[value=#{field}]")
|
244
243
|
end
|
245
244
|
end
|
246
245
|
|
@@ -252,9 +251,16 @@ When /^I view the form on the website$/ do
|
|
252
251
|
end
|
253
252
|
|
254
253
|
Then /^I should see the fields in the order I set$/ do
|
255
|
-
|
254
|
+
within('div.form-wrap') do
|
255
|
+
page.should have_content("Title")
|
256
|
+
end
|
256
257
|
end
|
257
258
|
|
258
259
|
When /^I am editing the last form$/ do
|
259
260
|
visit noodall_admin_form_path(Noodall::Form.last)
|
260
|
-
end
|
261
|
+
end
|
262
|
+
|
263
|
+
Given /^a form exists with the following:$/ do |fields|
|
264
|
+
@_form = Factory(:form, fields.rows_hash)
|
265
|
+
end
|
266
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Factory.factories.values.each do |factory|
|
2
|
+
if factory.build_class.respond_to?(:keys)
|
3
|
+
factory.build_class.keys.each_key do |key|
|
4
|
+
human_column_name = key.downcase.gsub('_', ' ')
|
5
|
+
Given /^an? #{factory.human_name} exists with an? #{human_column_name} of "([^"]*)"$/i do |value|
|
6
|
+
Factory(factory.factory_name, key => value)
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /^(\d+) #{factory.human_name.pluralize} exist with an? #{human_column_name} of "([^"]*)"$/i do |count, value|
|
10
|
+
count.to_i.times { Factory(factory.factory_name, key => value) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noodall-form-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 11
|
10
|
+
version: 0.0.11
|
11
11
|
platform: ruby
|
12
12
|
authors: []
|
13
13
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-16 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- features/step_definitions/web_steps.rb
|
111
111
|
- features/support/defensio_mock.rb
|
112
112
|
- features/support/env.rb
|
113
|
+
- features/support/mm_factory_steps.rb
|
113
114
|
- features/support/paths.rb
|
114
115
|
- lib/noodall-form-builder.rb
|
115
116
|
- lib/noodall/form_builder/engine.rb
|