surveyor 0.19.5 → 0.19.6

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/CHANGELOG CHANGED
@@ -1,3 +1,14 @@
1
+ 0.19.6
2
+
3
+ * fix parsing of group questions with dependencies. closes #160
4
+ * update homepage
5
+ * lock ci to ree-1.8.7-2010.02
6
+ * Fixed safari issue with conditional questions not hiding/showing.
7
+ * add checkbox + text renderer. closes #107
8
+ * add sass, since Haml will no longer do so
9
+ * adjusting testbed cucumber to avoid 'uninitialized constant Gherkin::Formatter::Model::PyString' error
10
+ * Fixed error when user answers a checkbox question.
11
+
1
12
  0.19.5
2
13
 
3
14
  * Fixed dependent questions not appearing under certain conditions. Closes #143.
data/Rakefile CHANGED
@@ -7,9 +7,10 @@ begin
7
7
  gem.name = "surveyor"
8
8
  gem.summary = %Q{A rails (gem) plugin to enable surveys in your application}
9
9
  gem.email = "yoon@northwestern.edu"
10
- gem.homepage = "http://github.com/breakpointer/surveyor"
10
+ gem.homepage = "http://github.com/NUBIC/surveyor"
11
11
  gem.authors = ["Brian Chamberlain", "Mark Yoon"]
12
12
  gem.add_dependency 'haml'
13
+ gem.add_dependency 'sass'
13
14
  gem.add_dependency 'fastercsv'
14
15
  gem.add_dependency 'formtastic'
15
16
  gem.add_dependency 'uuid'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.19.5
1
+ 0.19.6
data/ci-env.sh CHANGED
@@ -25,5 +25,5 @@ export rvm_project_rvmrc=0
25
25
  set +xe
26
26
  echo "Loading RVM ree@surveyor-dev"
27
27
  source ~/.rvm/scripts/rvm
28
- rvm use ree@surveyor-dev
28
+ rvm use ree-1.8.7-2010.02@surveyor-dev
29
29
  set -xe
@@ -75,3 +75,14 @@ Then /^question "([^"]*)" should have correct answer "([^"]*)"$/ do |qr, ar|
75
75
  q.correct_answer.should == q.answers.find_by_reference_identifier(ar)
76
76
  end
77
77
 
78
+ Then /^(\d+) dependencies should depend on questions$/ do |x|
79
+ arr = Dependency.find_all_by_question_group_id(nil)
80
+ arr.size.should == 2
81
+ arr.each{|d| d.question.should_not be_nil}
82
+ end
83
+
84
+ Then /^(\d+) dependencies should depend on question groups$/ do |x|
85
+ arr = Dependency.find_all_by_question_id(nil)
86
+ arr.size.should == 2
87
+ arr.each{|d| d.question_group.should_not be_nil}
88
+ end
@@ -50,3 +50,13 @@ Then /^a dropdown should exist with the options "([^"]*)"$/ do |options_text|
50
50
  end
51
51
  end
52
52
  end
53
+
54
+ Then /^there should be (\d+) checkboxes$/ do |count|
55
+ response.should have_selector('input[type=checkbox]', :count => count.to_i)
56
+
57
+ end
58
+
59
+ Then /^there should be (\d+) text areas$/ do |count|
60
+ response.should have_selector('textarea', :count => count.to_i)
61
+ end
62
+
@@ -153,4 +153,19 @@ Feature: Survey creation
153
153
  And I press "Click here to finish"
154
154
  Then there should be 1 response set with 1 response with:
155
155
  | shrimp |
156
-
156
+
157
+ Scenario: Checkboxes with text area
158
+ Given the survey
159
+ """
160
+ survey "Websites" do
161
+ section "Search engines" do
162
+ q "Have you ever used the following services?", :pick => :any
163
+ a "Yellowpages.com|Describe your experience", :text
164
+ a "Google.com|Describe your experience", :text
165
+ a "Bing.com|Describe your experience", :text
166
+ end
167
+ end
168
+ """
169
+ When I start the "Websites" survey
170
+ Then there should be 3 checkboxes
171
+ And there should be 3 text areas
@@ -198,4 +198,44 @@ Feature: Survey creation
198
198
  """
199
199
  Then there should be 5 dependencies
200
200
  And question "copd_sh_1a" should have a dependency with rule "A"
201
- And question "copd_sh_1ba" should have a dependency with rule "E"
201
+ And question "copd_sh_1ba" should have a dependency with rule "E"
202
+
203
+ Scenario: Dependencies on questions inside of a group
204
+ Given the survey
205
+ """
206
+ survey "Phone Screen Questions" do
207
+ section "Phone Screen" do
208
+ q_diabetes "Diabetes", :pick => :one
209
+ a_yes "Yes"
210
+ a_no "No"
211
+
212
+ q_high_blood_preassure "High blood pressure?", :pick => :one
213
+ a_yes "Yes"
214
+ a_no "No"
215
+
216
+ group do
217
+ dependency :rule => "A"
218
+ condition_A :q_diabetes, "==", :a_yes
219
+ label "It looks like you are not eligible for this specific study at the time"
220
+ end
221
+
222
+ group "Eligible" do
223
+ dependency :rule => "A"
224
+ condition_A :q_diabetes, "==", :a_no
225
+
226
+ label "You're Eligible!"
227
+
228
+ label "You need medical clearance"
229
+ dependency :rule => "A"
230
+ condition_A :q_high_blood_preassure, "==", :a_yes
231
+
232
+ label "You don't need medical clearance"
233
+ dependency :rule => "A"
234
+ condition_A :q_high_blood_preassure, "==", :a_no
235
+ end
236
+ end
237
+ end
238
+ """
239
+ Then there should be 4 dependencies
240
+ And 2 dependencies should depend on questions
241
+ And 2 dependencies should depend on question groups
@@ -25,7 +25,7 @@ jQuery(document).ready(function(){
25
25
  // surveyor_controller returns a json object to show/hide elements and insert/remove ids e.g. {"ids": {"2" => 234}, "remove": {"4" => 21}, "hide":["question_12","question_13"],"show":["question_14"]}
26
26
  jQuery.each(responseText.show, function(){ jQuery('#' + this).show("fast"); });
27
27
  jQuery.each(responseText.hide, function(){ jQuery('#' + this).hide("fast"); });
28
- jQuery.each(responseText.ids, function(k,v){ jQuery('#r_'+k+'_question_id').after('<input id="r_'+k+'_id" type="hidden" value="'+v+'" name="r['+k+'][id]"'); });
28
+ jQuery.each(responseText.ids, function(k,v){ jQuery('#r_'+k+'_question_id').after('<input id="r_'+k+'_id" type="hidden" value="'+v+'" name="r['+k+'][id]"/>'); });
29
29
  jQuery.each(responseText.remove, function(k,v){ jQuery('#r_'+k+'_id[value="'+v+'"]').remove(); });
30
30
  return false;
31
31
  }
@@ -40,7 +40,8 @@ module Formtastic
40
40
  )
41
41
  li_content << basic_input_helper(:text_field, :string, :string_value, options) if options[:response_class] == "other_and_string"
42
42
  li_content << basic_input_helper(:text_field, :string, :string_value, options) if %w(string other_and_string).include?(options[:response_class])
43
-
43
+ li_content << basic_input_helper(:text_area, :text, :text_value, options) if options[:response_class] == "text"
44
+
44
45
  # li_options = value_as_class ? { :class => [method.to_s.singularize, value.to_s.downcase].join('_') } : {}
45
46
  Formtastic::Util.html_safe(li_content)
46
47
  end
@@ -19,8 +19,9 @@ module Surveyor
19
19
  base.instance_eval do
20
20
  def applicable_attributes(attrs)
21
21
  result = HashWithIndifferentAccess.new(attrs)
22
- if result[:string_value] && Answer.exists?(result[:answer_id])
23
- answer = Answer.find(result[:answer_id])
22
+ answer_id = result[:answer_id].is_a?(Array) ? result[:answer_id].last : result[:answer_id] # checkboxes are arrays / radio buttons are not arrays
23
+ if result[:string_value] && Answer.exists?(answer_id)
24
+ answer = Answer.find(answer_id)
24
25
  result.delete(:string_value) unless answer.response_class && answer.response_class.to_sym == :string
25
26
  end
26
27
  result
@@ -169,7 +169,7 @@ class Dependency < ActiveRecord::Base
169
169
 
170
170
  # build and set context
171
171
  if context[:question]
172
- context[:dependency] = context[:question].build_dependency({:question_group => context[:question_group]}.merge(args[0] || {}))
172
+ context[:dependency] = context[:question].build_dependency(args[0] || {})
173
173
  elsif context[:question_group]
174
174
  context[:dependency] = context[:question_group].build_dependency(args[0] || {})
175
175
  end
@@ -82,7 +82,15 @@ describe ResponseSet do
82
82
  "20" => {"question_id" => "10", "answer_id" => "201", "string_value" => "hi"}, # new string, filled
83
83
  "21" => {"id" => "105", "question_id" => "11", "answer_id" => "211", "string_value" => ""}, # existing string, cleared
84
84
  "22" => {"id" => "106", "question_id" => "12", "answer_id" => "221", "string_value" => "ho"}, # existing string, changed
85
- "23" => {"id" => "107", "question_id" => "13", "answer_id" => "231", "string_value" => "hi"} # existing string, unchanged
85
+ "23" => {"id" => "107", "question_id" => "13", "answer_id" => "231", "string_value" => "hi"}, # existing string, unchanged
86
+ "24" => {"question_id" => "14", "answer_id" => [""], "string_value" => "foo"}, # new checkbox with string value, blank
87
+ "25" => {"question_id" => "15", "answer_id" => ["", "241"], "string_value" => "bar"}, # new checkbox with string value, checked
88
+ "26" => {"id" => "108", "question_id" => "14", "answer_id" => [""], "string_value" => "moo"}, # existing checkbox with string value, unchecked
89
+ "27" => {"id" => "109", "question_id" => "15", "answer_id" => ["", "251"], "string_value" => "mar"}, # existing checkbox with string value, left alone
90
+ "28" => {"question_id" => "16", "answer_id" => "", "string_value" => "foo"}, # new radio with string value, blank
91
+ "29" => {"question_id" => "17", "answer_id" => "261", "string_value" => "bar"}, # new radio with string value, selected
92
+ "30" => {"id" => "110", "question_id" => "18", "answer_id" => "271", "string_value" => "moo"}, # existing radio with string value, changed
93
+ "31" => {"id" => "111", "question_id" => "19", "answer_id" => "281", "string_value" => "mar"}, # existing radio with string value, unchanged
86
94
  }
87
95
  ResponseSet.reject_or_destroy_blanks(hash_of_hashes).should == {
88
96
  # "11" => {"question_id" => "1", "answer_id" => [""]}, # new checkbox, blank
@@ -97,7 +105,15 @@ describe ResponseSet do
97
105
  "20" => {"question_id" => "10", "answer_id" => "201", "string_value" => "hi"}, # new string, filled
98
106
  "21" => {"id" => "105", "question_id" => "11", "answer_id" => "211", "string_value" => "", "_destroy" => "true"}, # existing string, cleared
99
107
  "22" => {"id" => "106", "question_id" => "12", "answer_id" => "221", "string_value" => "ho"}, # existing string, changed
100
- "23" => {"id" => "107", "question_id" => "13", "answer_id" => "231", "string_value" => "hi"} # existing string, unchanged
108
+ "23" => {"id" => "107", "question_id" => "13", "answer_id" => "231", "string_value" => "hi"}, # existing string, unchanged
109
+ # "24" => {"question_id" => "14", "answer_id" => [""], "string_value" => "foo"}, # new checkbox with string value, blank
110
+ "25" => {"question_id" => "15", "answer_id" => ["", "241"], "string_value" => "bar"}, # new checkbox with string value, checked
111
+ "26" => {"id" => "108", "question_id" => "14", "answer_id" => [""], "string_value" => "moo", "_destroy" => "true"}, # existing checkbox with string value, unchecked
112
+ "27" => {"id" => "109", "question_id" => "15", "answer_id" => ["", "251"], "string_value" => "mar"}, # existing checkbox with string value, left alone
113
+ # "28" => {"question_id" => "16", "answer_id" => "", "string_value" => "foo"}, # new radio with string value, blank
114
+ "29" => {"question_id" => "17", "answer_id" => "261", "string_value" => "bar"}, # new radio with string value, selected
115
+ "30" => {"id" => "110", "question_id" => "18", "answer_id" => "271", "string_value" => "moo"}, # existing radio with string value, changed
116
+ "31" => {"id" => "111", "question_id" => "19", "answer_id" => "281", "string_value" => "mar"}, # existing radio with string value, unchanged
101
117
  }
102
118
  end
103
119
  it "should remove responses" do
@@ -91,4 +91,20 @@ describe Response, "applicable_attributes" do
91
91
  bad = {"question_id"=>@who.id, "answer_id"=>@odoyle.id, "string_value"=>"Frank"}
92
92
  Response.applicable_attributes(bad).should == {"question_id" => @who.id, "answer_id"=> @odoyle.id}
93
93
  end
94
+
95
+ it "should have string_value if response_type is string and answer_id is an array (in the case of checkboxes)" do
96
+ good = {"question_id"=>@who.id, "answer_id"=>["", @odoyle.id], "string_value"=>"Frank"}
97
+ Response.applicable_attributes(good).should == {"question_id" => @who.id, "answer_id"=> ["", @odoyle.id]}
98
+ end
99
+
100
+ it "should have ignore attribute if missing answer_id" do
101
+ ignore = {"question_id"=>@who.id, "answer_id"=>"", "string_value"=>"Frank"}
102
+ Response.applicable_attributes(ignore).should == {"question_id"=>@who.id, "answer_id"=>"", "string_value"=>"Frank"}
103
+ end
104
+
105
+ it "should have ignore attribute if missing answer_id is an array" do
106
+ ignore = {"question_id"=>@who.id, "answer_id"=>[""], "string_value"=>"Frank"}
107
+ Response.applicable_attributes(ignore).should == {"question_id"=>@who.id, "answer_id"=>[""], "string_value"=>"Frank"}
108
+ end
109
+
94
110
  end
data/surveyor.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{surveyor}
8
- s.version = "0.19.5"
8
+ s.version = "0.19.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brian Chamberlain", "Mark Yoon"]
12
- s.date = %q{2011-06-03}
12
+ s.date = %q{2011-06-08}
13
13
  s.email = %q{yoon@northwestern.edu}
14
14
  s.extra_rdoc_files = [
15
15
  "README.md"
@@ -148,7 +148,7 @@ Gem::Specification.new do |s|
148
148
  "surveyor.gemspec",
149
149
  "testbed/Gemfile"
150
150
  ]
151
- s.homepage = %q{http://github.com/breakpointer/surveyor}
151
+ s.homepage = %q{http://github.com/NUBIC/surveyor}
152
152
  s.require_paths = ["lib"]
153
153
  s.rubygems_version = %q{1.6.2}
154
154
  s.summary = %q{A rails (gem) plugin to enable surveys in your application}
@@ -158,12 +158,14 @@ Gem::Specification.new do |s|
158
158
 
159
159
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
160
160
  s.add_runtime_dependency(%q<haml>, [">= 0"])
161
+ s.add_runtime_dependency(%q<sass>, [">= 0"])
161
162
  s.add_runtime_dependency(%q<fastercsv>, [">= 0"])
162
163
  s.add_runtime_dependency(%q<formtastic>, [">= 0"])
163
164
  s.add_runtime_dependency(%q<uuid>, [">= 0"])
164
165
  s.add_development_dependency(%q<yard>, [">= 0"])
165
166
  else
166
167
  s.add_dependency(%q<haml>, [">= 0"])
168
+ s.add_dependency(%q<sass>, [">= 0"])
167
169
  s.add_dependency(%q<fastercsv>, [">= 0"])
168
170
  s.add_dependency(%q<formtastic>, [">= 0"])
169
171
  s.add_dependency(%q<uuid>, [">= 0"])
@@ -171,6 +173,7 @@ Gem::Specification.new do |s|
171
173
  end
172
174
  else
173
175
  s.add_dependency(%q<haml>, [">= 0"])
176
+ s.add_dependency(%q<sass>, [">= 0"])
174
177
  s.add_dependency(%q<fastercsv>, [">= 0"])
175
178
  s.add_dependency(%q<formtastic>, [">= 0"])
176
179
  s.add_dependency(%q<uuid>, [">= 0"])
data/testbed/Gemfile CHANGED
@@ -5,10 +5,9 @@ gem 'rspec', '~> 1.3'
5
5
  gem 'rspec-rails', '1.3.3'
6
6
  gem 'sqlite3-ruby', '1.2.5' # Using this version for ruby 1.8.7 compatibility reasons
7
7
  gem 'webrat'
8
- gem 'cucumber', '0.10.3'
8
+ gem 'cucumber', '~>0.9'
9
9
  gem 'cucumber-rails', '0.3.2'
10
10
  gem 'database_cleaner'
11
11
  gem 'factory_girl'
12
- gem 'uuid'
13
12
 
14
13
  gem 'surveyor', :path => ".."
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surveyor
3
3
  version: !ruby/object:Gem::Version
4
- hash: 89
4
+ hash: 95
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 19
9
- - 5
10
- version: 0.19.5
9
+ - 6
10
+ version: 0.19.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brian Chamberlain
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-06-03 00:00:00 -05:00
19
+ date: 2011-06-08 00:00:00 -05:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -34,7 +34,7 @@ dependencies:
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- name: fastercsv
37
+ name: sass
38
38
  prerelease: false
39
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
@@ -48,7 +48,7 @@ dependencies:
48
48
  type: :runtime
49
49
  version_requirements: *id002
50
50
  - !ruby/object:Gem::Dependency
51
- name: formtastic
51
+ name: fastercsv
52
52
  prerelease: false
53
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
54
  none: false
@@ -62,7 +62,7 @@ dependencies:
62
62
  type: :runtime
63
63
  version_requirements: *id003
64
64
  - !ruby/object:Gem::Dependency
65
- name: uuid
65
+ name: formtastic
66
66
  prerelease: false
67
67
  requirement: &id004 !ruby/object:Gem::Requirement
68
68
  none: false
@@ -76,7 +76,7 @@ dependencies:
76
76
  type: :runtime
77
77
  version_requirements: *id004
78
78
  - !ruby/object:Gem::Dependency
79
- name: yard
79
+ name: uuid
80
80
  prerelease: false
81
81
  requirement: &id005 !ruby/object:Gem::Requirement
82
82
  none: false
@@ -87,8 +87,22 @@ dependencies:
87
87
  segments:
88
88
  - 0
89
89
  version: "0"
90
- type: :development
90
+ type: :runtime
91
91
  version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: yard
94
+ prerelease: false
95
+ requirement: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 3
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ type: :development
105
+ version_requirements: *id006
92
106
  description:
93
107
  email: yoon@northwestern.edu
94
108
  executables: []
@@ -231,7 +245,7 @@ files:
231
245
  - surveyor.gemspec
232
246
  - testbed/Gemfile
233
247
  has_rdoc: true
234
- homepage: http://github.com/breakpointer/surveyor
248
+ homepage: http://github.com/NUBIC/surveyor
235
249
  licenses: []
236
250
 
237
251
  post_install_message: