surveyor 0.16.1 → 0.17.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/.gitignore +3 -1
- data/.rvmrc +1 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +86 -0
- data/README.md +21 -8
- data/Rakefile +71 -1
- data/VERSION +1 -1
- data/features/step_definitions/surveyor_steps.rb +1 -1
- data/features/support/env.rb +2 -41
- data/features/surveyor.feature +16 -3
- data/generators/surveyor/templates/assets/stylesheets/sass/surveyor.sass +1 -1
- data/generators/surveyor/templates/surveys/kitchen_sink_survey.rb +9 -0
- data/lib/surveyor/common.rb +1 -1
- data/lib/surveyor/models/dependency_condition_methods.rb +29 -7
- data/lib/surveyor/parser.rb +14 -6
- data/lib/surveyor/unparser.rb +1 -1
- data/spec/models/dependency_condition_spec.rb +106 -50
- data/spec/spec_helper.rb +16 -8
- data/spec/test_Gemfile +15 -0
- data/spec/test_boot.rb +128 -0
- data/spec/test_preinitializer.rb +21 -0
- data/surveyor.gemspec +53 -2
- metadata +99 -5
data/.gitignore
CHANGED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm_gemset_create_on_use_flag=1; rvm gemset use surveyor-dev
|
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source :rubygems
|
2
|
+
|
3
|
+
gem 'rails', '2.3.10'
|
4
|
+
gem 'jeweler'
|
5
|
+
gem 'rspec', '~> 1.3'
|
6
|
+
gem 'rspec-rails', '1.3.3'
|
7
|
+
gem 'sqlite3-ruby', '1.2.5' #Using this version for ruby 1.8.7 compatibility reasons
|
8
|
+
gem 'webrat'
|
9
|
+
gem 'cucumber', '~> 0.8.0'
|
10
|
+
gem 'cucumber-rails'
|
11
|
+
gem 'database_cleaner'
|
12
|
+
gem 'factory_girl'
|
13
|
+
gem 'yard', '~> 0.6'
|
14
|
+
|
15
|
+
plugin_root = File.dirname(__FILE__)
|
16
|
+
gem 'surveyor', :path => plugin_root
|
17
|
+
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
surveyor (0.16.1)
|
5
|
+
fastercsv
|
6
|
+
haml
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
actionmailer (2.3.10)
|
12
|
+
actionpack (= 2.3.10)
|
13
|
+
actionpack (2.3.10)
|
14
|
+
activesupport (= 2.3.10)
|
15
|
+
rack (~> 1.1.0)
|
16
|
+
activerecord (2.3.10)
|
17
|
+
activesupport (= 2.3.10)
|
18
|
+
activeresource (2.3.10)
|
19
|
+
activesupport (= 2.3.10)
|
20
|
+
activesupport (2.3.10)
|
21
|
+
builder (2.1.2)
|
22
|
+
cucumber (0.8.5)
|
23
|
+
builder (~> 2.1.2)
|
24
|
+
diff-lcs (~> 1.1.2)
|
25
|
+
gherkin (~> 2.1.4)
|
26
|
+
json_pure (~> 1.4.3)
|
27
|
+
term-ansicolor (~> 1.0.4)
|
28
|
+
cucumber-rails (0.3.2)
|
29
|
+
cucumber (>= 0.8.0)
|
30
|
+
database_cleaner (0.6.0)
|
31
|
+
diff-lcs (1.1.2)
|
32
|
+
factory_girl (1.3.2)
|
33
|
+
fastercsv (1.5.3)
|
34
|
+
gemcutter (0.6.1)
|
35
|
+
gherkin (2.1.5)
|
36
|
+
trollop (~> 1.16.2)
|
37
|
+
git (1.2.5)
|
38
|
+
haml (3.0.23)
|
39
|
+
jeweler (1.4.0)
|
40
|
+
gemcutter (>= 0.1.0)
|
41
|
+
git (>= 1.2.5)
|
42
|
+
rubyforge (>= 2.0.0)
|
43
|
+
json_pure (1.4.6)
|
44
|
+
nokogiri (1.4.3.1)
|
45
|
+
rack (1.1.0)
|
46
|
+
rack-test (0.5.6)
|
47
|
+
rack (>= 1.0)
|
48
|
+
rails (2.3.10)
|
49
|
+
actionmailer (= 2.3.10)
|
50
|
+
actionpack (= 2.3.10)
|
51
|
+
activerecord (= 2.3.10)
|
52
|
+
activeresource (= 2.3.10)
|
53
|
+
activesupport (= 2.3.10)
|
54
|
+
rake (>= 0.8.3)
|
55
|
+
rake (0.8.7)
|
56
|
+
rspec (1.3.1)
|
57
|
+
rspec-rails (1.3.3)
|
58
|
+
rack (>= 1.0.0)
|
59
|
+
rspec (= 1.3.1)
|
60
|
+
rubyforge (2.0.4)
|
61
|
+
json_pure (>= 1.1.7)
|
62
|
+
sqlite3-ruby (1.2.5)
|
63
|
+
term-ansicolor (1.0.5)
|
64
|
+
trollop (1.16.2)
|
65
|
+
webrat (0.7.2)
|
66
|
+
nokogiri (>= 1.2.0)
|
67
|
+
rack (>= 1.0)
|
68
|
+
rack-test (>= 0.5.3)
|
69
|
+
yard (0.6.1)
|
70
|
+
|
71
|
+
PLATFORMS
|
72
|
+
ruby
|
73
|
+
|
74
|
+
DEPENDENCIES
|
75
|
+
cucumber (~> 0.8.0)
|
76
|
+
cucumber-rails
|
77
|
+
database_cleaner
|
78
|
+
factory_girl
|
79
|
+
jeweler
|
80
|
+
rails (= 2.3.10)
|
81
|
+
rspec (~> 1.3)
|
82
|
+
rspec-rails (= 1.3.3)
|
83
|
+
sqlite3-ruby (= 1.2.5)
|
84
|
+
surveyor!
|
85
|
+
webrat
|
86
|
+
yard (~> 0.6)
|
data/README.md
CHANGED
@@ -55,13 +55,7 @@ The survey above shows a couple simple question types. The first one is a "pick
|
|
55
55
|
|
56
56
|
# Installation
|
57
57
|
|
58
|
-
As a
|
59
|
-
|
60
|
-
gem install haml
|
61
|
-
gem install fastercsv
|
62
|
-
script/plugin install git://github.com/breakpointer/surveyor.git
|
63
|
-
|
64
|
-
Or as a gem:
|
58
|
+
As a gem:
|
65
59
|
|
66
60
|
# in environment.rb
|
67
61
|
config.gem "surveyor", :source => 'http://gemcutter.org'
|
@@ -70,7 +64,7 @@ Or as a gem:
|
|
70
64
|
|
71
65
|
Or as a gem (with bundler):
|
72
66
|
|
73
|
-
# in
|
67
|
+
# in Gemfile
|
74
68
|
gem "surveyor"
|
75
69
|
|
76
70
|
bundle install
|
@@ -114,6 +108,25 @@ To work on the plugin code (for enhancements, and bug fixes, etc...) fork this g
|
|
114
108
|
|
115
109
|
# Changes
|
116
110
|
|
111
|
+
0.17.0
|
112
|
+
|
113
|
+
* cucumber tests now work
|
114
|
+
* correction to post install notes in rakefile
|
115
|
+
* fix to rakefile instructions
|
116
|
+
* un-dryed the gemfile to try to fix a gem location problem
|
117
|
+
* added test boot file for test app usage, modified the rake task to copy in this file as well
|
118
|
+
* removed unparser from specs, it was breakin a bunch of them. deferred investigation
|
119
|
+
* got specs running and passing by adding internal rails app
|
120
|
+
* added rvmrc to create default gemset and added bundler
|
121
|
+
* Plugin installation is no longer supported
|
122
|
+
* wrong information in readme
|
123
|
+
* Merge branch 'master' into issue87
|
124
|
+
* Add count operator example to kitchen sink survey
|
125
|
+
* Generalize count operator to handle < <= >= !=
|
126
|
+
* Parse/unparse surveys w/ count> DC operator
|
127
|
+
* Add custom validation to handle count operator
|
128
|
+
* Remove count> "operator."
|
129
|
+
|
117
130
|
0.16.1
|
118
131
|
|
119
132
|
* fixed surveyor.sections translation line
|
data/Rakefile
CHANGED
@@ -19,10 +19,80 @@ rescue LoadError
|
|
19
19
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
20
20
|
end
|
21
21
|
|
22
|
+
begin
|
23
|
+
require 'cucumber/rake/task'
|
24
|
+
Cucumber::Rake::Task.new(:features)
|
25
|
+
|
26
|
+
task :features => :check_dependencies
|
27
|
+
rescue LoadError
|
28
|
+
task :features do
|
29
|
+
abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
namespace "testbed" do
|
35
|
+
|
36
|
+
RAPPNAME = "test_app" #This is also hardcoded in the spec/spec_helper.rb and gitignore file. Change it there too...
|
37
|
+
|
38
|
+
desc "Install rails base app in spec dir"
|
39
|
+
task :build_app do
|
40
|
+
directory "spec"
|
41
|
+
chdir("spec") do
|
42
|
+
sh "rails #{RAPPNAME}"
|
43
|
+
puts "Put a test_app in the spec folder"
|
44
|
+
chdir("#{RAPPNAME}") do
|
45
|
+
sh "ruby script/generate rspec"
|
46
|
+
puts "Ran installer for rspec in #{RAPPNAME}"
|
47
|
+
sh "ruby script/generate cucumber --webrat"
|
48
|
+
puts "Ran installer for cucumber in #{RAPPNAME}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "Copy in setup files to test app"
|
54
|
+
task :copy_files do
|
55
|
+
chdir("spec/#{RAPPNAME}") do
|
56
|
+
sh "cp ../test_Gemfile Gemfile"
|
57
|
+
sh "cp ../test_preinitializer.rb config/preinitializer.rb"
|
58
|
+
sh "cp ../test_boot.rb config/boot.rb"
|
59
|
+
puts "NOTE: These files were created/modified as described here: http://gembundler.com/rails23.html"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "Install surveyor in rails base app, runs migrations, preps for testing"
|
64
|
+
task :install_surveyor do
|
65
|
+
sh "gem install surveyor"
|
66
|
+
chdir("spec/#{RAPPNAME}") do
|
67
|
+
sh "bundle install"
|
68
|
+
sh "bundle exec script/generate surveyor"
|
69
|
+
sh "rake db:migrate"
|
70
|
+
sh "rake db:test:prepare"
|
71
|
+
end
|
72
|
+
# I don't think this is needed anymore
|
73
|
+
puts "NOTE: We installed the surveyor gem using 'gem install surveyor' to fix a problem where RVM (or bundler or both) don't let Rails see generators in a gem. ('script/generate surveyor' for example). To remove the gem run `gem uninstall surveyor` to remove the gem version of surveyor leaving the dev version" # Getting around a bug/problem in bundler. see: http://bit.ly/9NZOEz
|
74
|
+
end
|
75
|
+
|
76
|
+
desc "Remove rails base app in spec dir"
|
77
|
+
task :remove_app do
|
78
|
+
puts "Removing the test_app in the spec folder"
|
79
|
+
sh "rm -rf spec/#{RAPPNAME}"
|
80
|
+
end
|
81
|
+
|
82
|
+
desc "Setup for the test app (create)"
|
83
|
+
task :setup => [:build_app, :copy_files, :install_surveyor]
|
84
|
+
desc "Teardown for the test app (remove)"
|
85
|
+
task :teardown => [:remove_app]
|
86
|
+
|
87
|
+
end # namespace
|
88
|
+
|
22
89
|
require 'spec/rake/spectask'
|
23
90
|
Spec::Rake::SpecTask.new(:spec) do |spec|
|
24
91
|
spec.libs << 'lib' << 'spec'
|
25
|
-
spec.spec_files = FileList
|
92
|
+
spec.spec_files = FileList.new('spec/**/*_spec.rb') do |fl|
|
93
|
+
fl.exclude(/vendor\/plugins/) #excluding the stuff inthe embedded rails app
|
94
|
+
fl.exclude(/unparse/) #not sure why but this breaks a bunch of specs
|
95
|
+
end
|
26
96
|
end
|
27
97
|
|
28
98
|
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.17.0
|
@@ -46,7 +46,7 @@ Then /^there should be (\d+) resolved dependency_condition(?:s?) with:$/ do |x,
|
|
46
46
|
d = DependencyCondition.find(:first, :conditions => hash)
|
47
47
|
d.should_not be_nil
|
48
48
|
d.question.should_not be_nil
|
49
|
-
d.answer.should_not be_nil
|
49
|
+
d.answer.should_not be_nil unless d.operator.match(/^count[<>=!]{1,2}\d+/)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
data/features/support/env.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# files.
|
6
6
|
|
7
7
|
ENV["RAILS_ENV"] ||= "cucumber"
|
8
|
-
require File.expand_path(File.dirname(__FILE__) + '
|
8
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec/test_app/config/environment')
|
9
9
|
|
10
10
|
require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
|
11
11
|
require 'cucumber/rails/world'
|
@@ -15,43 +15,4 @@ require 'cucumber/web/tableish'
|
|
15
15
|
require 'webrat'
|
16
16
|
require 'webrat/core/matchers'
|
17
17
|
|
18
|
-
|
19
|
-
config.mode = :rails
|
20
|
-
config.open_error_files = false # Set to true if you want error pages to pop up in the browser
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
# If you set this to false, any error raised from within your app will bubble
|
25
|
-
# up to your step definition and out to cucumber unless you catch it somewhere
|
26
|
-
# on the way. You can make Rails rescue errors and render error pages on a
|
27
|
-
# per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
|
28
|
-
#
|
29
|
-
# If you set this to true, Rails will rescue all errors and render error
|
30
|
-
# pages, more or less in the same way your application would behave in the
|
31
|
-
# default production environment. It's not recommended to do this for all
|
32
|
-
# of your scenarios, as this makes it hard to discover errors in your application.
|
33
|
-
ActionController::Base.allow_rescue = false
|
34
|
-
|
35
|
-
# If you set this to true, each scenario will run in a database transaction.
|
36
|
-
# You can still turn off transactions on a per-scenario basis, simply tagging
|
37
|
-
# a feature or scenario with the @no-txn tag. If you are using Capybara,
|
38
|
-
# tagging with @culerity or @javascript will also turn transactions off.
|
39
|
-
#
|
40
|
-
# If you set this to false, transactions will be off for all scenarios,
|
41
|
-
# regardless of whether you use @no-txn or not.
|
42
|
-
#
|
43
|
-
# Beware that turning transactions off will leave data in your database
|
44
|
-
# after each scenario, which can lead to hard-to-debug failures in
|
45
|
-
# subsequent scenarios. If you do this, we recommend you create a Before
|
46
|
-
# block that will explicitly put your database in a known state.
|
47
|
-
Cucumber::Rails::World.use_transactional_fixtures = true
|
48
|
-
|
49
|
-
# How to clean your database when transactions are turned off. See
|
50
|
-
# http://github.com/bmabey/database_cleaner for more info.
|
51
|
-
if defined?(ActiveRecord::Base)
|
52
|
-
begin
|
53
|
-
require 'database_cleaner'
|
54
|
-
DatabaseCleaner.strategy = :truncation
|
55
|
-
rescue LoadError => ignore_if_database_cleaner_not_present
|
56
|
-
end
|
57
|
-
end
|
18
|
+
# Since we're using the test_app, and it has cucumber installed we don't need to do any configuration here.
|
data/features/surveyor.feature
CHANGED
@@ -119,22 +119,35 @@ Feature: Survey creation
|
|
119
119
|
a :text, :custom_class => 'mapper'
|
120
120
|
validation :rule => "AC"
|
121
121
|
vcondition_AC "=~", :regexp => /[0-9a-zA-z\. #]/
|
122
|
+
|
123
|
+
q_2 "Which colors do you loathe?", :pick => :any
|
124
|
+
a_1 "red"
|
125
|
+
a_2 "blue"
|
126
|
+
a_3 "green"
|
127
|
+
a_4 "yellow"
|
128
|
+
|
129
|
+
q_2a "Please explain why you hate so many colors?"
|
130
|
+
a_1 "explanation", :text
|
131
|
+
dependency :rule => "Z"
|
132
|
+
condition_Z :q_2, "count>2"
|
122
133
|
end
|
123
134
|
end
|
124
135
|
"""
|
125
136
|
Then there should be 1 survey with:
|
126
137
|
| title |
|
127
138
|
| Dependency and validation survey |
|
128
|
-
And there should be
|
139
|
+
And there should be 6 questions with:
|
129
140
|
| text | pick | display_type | custom_class |
|
130
141
|
| What... is your name? (e.g. It is 'Arthur', King of the Britons) | none | default | nil |
|
131
142
|
| What is your address? | none | default | address |
|
132
|
-
And there should be
|
143
|
+
And there should be 2 dependency with:
|
133
144
|
| rule |
|
134
145
|
| A |
|
135
|
-
|
146
|
+
| Z |
|
147
|
+
And there should be 2 resolved dependency_condition with:
|
136
148
|
| rule_key |
|
137
149
|
| A |
|
150
|
+
| Z |
|
138
151
|
And there should be 2 validations with:
|
139
152
|
| rule |
|
140
153
|
| A |
|
@@ -32,6 +32,15 @@ survey "“Kitchen Sink” survey" do
|
|
32
32
|
condition_C :q_2, "==", :a_3
|
33
33
|
condition_D :q_2, "==", :a_4
|
34
34
|
|
35
|
+
# A dependant question demonstrating the count operator. The
|
36
|
+
# dependency condition checks the answer count for the referenced question.
|
37
|
+
# It understands conditions of the form count> count< count>= count<=
|
38
|
+
# count!=
|
39
|
+
q_2b "Please explain why you dislike so many colors?"
|
40
|
+
a_1 "explanation", :text
|
41
|
+
dependency :rule => "Z"
|
42
|
+
condition_Z :q_2, "count>2"
|
43
|
+
|
35
44
|
# When :pick isn't specified, the default is :none (no checkbox or radio button)
|
36
45
|
q_montypython3 "What... is your name? (e.g. It is 'Arthur', King of the Britons)"
|
37
46
|
a_1 :string
|
data/lib/surveyor/common.rb
CHANGED
@@ -10,10 +10,10 @@ module Surveyor
|
|
10
10
|
|
11
11
|
# Validations
|
12
12
|
base.send :validates_presence_of, :operator, :rule_key
|
13
|
-
base.send :
|
13
|
+
base.send :validate, :validates_operator
|
14
14
|
base.send :validates_uniqueness_of, :rule_key, :scope => :dependency_id
|
15
15
|
# this causes issues with building and saving
|
16
|
-
# base.send :validates_numericality_of, :question_id, :
|
16
|
+
# base.send :validates_numericality_of, :question_id, :dependency_id
|
17
17
|
|
18
18
|
base.send :include, Surveyor::ActsAsResponse # includes "as" instance method
|
19
19
|
|
@@ -27,22 +27,44 @@ module Surveyor
|
|
27
27
|
|
28
28
|
# Instance methods
|
29
29
|
def to_hash(response_set)
|
30
|
-
|
31
|
-
|
30
|
+
# all responses to associated question
|
31
|
+
responses = response_set.responses.select do |r|
|
32
|
+
question && question.answers.include?(r.answer)
|
33
|
+
end
|
34
|
+
{rule_key.to_sym => (!responses.empty? and self.is_met?(responses))}
|
32
35
|
end
|
33
36
|
|
34
|
-
# Checks to see if the
|
35
|
-
def is_met?(
|
37
|
+
# Checks to see if the responses passed in meet the dependency condition
|
38
|
+
def is_met?(responses)
|
39
|
+
# response to associated answer if available, or first response
|
40
|
+
response = if self.answer_id
|
41
|
+
responses.detect do |r|
|
42
|
+
r.answer == self.answer
|
43
|
+
end
|
44
|
+
end || responses.first
|
36
45
|
klass = response.answer.response_class
|
37
46
|
return case self.operator
|
38
47
|
when "==", "<", ">", "<=", ">="
|
39
48
|
response.as(klass).send(self.operator, self.as(klass))
|
40
49
|
when "!="
|
41
50
|
!(response.as(klass) == self.as(klass))
|
51
|
+
when /^count[<>=]{1,2}\d+$/
|
52
|
+
op, i = self.operator.scan(/^count([<>!=]{1,2})(\d+)$/).flatten
|
53
|
+
responses.count.send(op, i.to_i)
|
54
|
+
when /^count!=\d+$/
|
55
|
+
!(responses.count == self.operator.scan(/\d+/).first.to_i)
|
42
56
|
else
|
43
57
|
false
|
44
58
|
end
|
45
59
|
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def validates_operator
|
64
|
+
errors.add(:operator, "Invalid operator") unless
|
65
|
+
Surveyor::Common::OPERATORS.include?(self.operator) ||
|
66
|
+
self.operator && self.operator.match(/^count(<|>|==|>=|<=|!=)(\d+)/)
|
67
|
+
end
|
46
68
|
end
|
47
69
|
end
|
48
|
-
end
|
70
|
+
end
|
data/lib/surveyor/parser.rb
CHANGED
@@ -171,12 +171,20 @@ class DependencyCondition < ActiveRecord::Base
|
|
171
171
|
|
172
172
|
# build and set context
|
173
173
|
a0, a1, a2 = args
|
174
|
-
context[:dependency_condition] = context[:dependency].
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
174
|
+
context[:dependency_condition] = context[:dependency].
|
175
|
+
dependency_conditions.build(
|
176
|
+
{
|
177
|
+
:context_reference => context,
|
178
|
+
:operator => a1 || "==",
|
179
|
+
:question_reference => a0.to_s.gsub("q_", ""),
|
180
|
+
:rule_key => reference_identifier
|
181
|
+
}.merge(
|
182
|
+
a2.is_a?(Hash) ? a2 : { :answer_reference =>
|
183
|
+
a2.to_s.gsub("a_", "") }
|
184
|
+
)
|
185
|
+
)
|
179
186
|
end
|
187
|
+
|
180
188
|
def resolve_references
|
181
189
|
if context_reference
|
182
190
|
# Looking up references to questions and answers for linking the dependency objects
|
@@ -185,8 +193,8 @@ class DependencyCondition < ActiveRecord::Base
|
|
185
193
|
print (self.answer = context_reference[:answer_references][question_reference][answer_reference]) ? "found answer:#{answer_reference} " : "lost! answer:#{answer_reference} "
|
186
194
|
end
|
187
195
|
end
|
188
|
-
|
189
196
|
end
|
197
|
+
|
190
198
|
class Answer < ActiveRecord::Base
|
191
199
|
# nonblock
|
192
200
|
include Surveyor::Models::AnswerMethods
|
data/lib/surveyor/unparser.rb
CHANGED
@@ -97,7 +97,7 @@ class DependencyCondition < ActiveRecord::Base
|
|
97
97
|
dsl << " condition"
|
98
98
|
dsl << "_#{rule_key}" unless rule_key.blank?
|
99
99
|
dsl << " :q_#{question.reference_identifier}, \"#{operator}\""
|
100
|
-
dsl << (attrs.blank? ? ", {:answer_reference=>\"#{answer.reference_identifier}\"}\n" : ", {#{attrs.inspect.gsub(/\{|\}/, "")}, :answer_reference=>\"#{answer.reference_identifier}\"}\n")
|
100
|
+
dsl << (attrs.blank? ? ", {:answer_reference=>\"#{answer && answer.reference_identifier}\"}\n" : ", {#{attrs.inspect.gsub(/\{|\}/, "")}, :answer_reference=>\"#{answer && answer.reference_identifier}\"}\n")
|
101
101
|
end
|
102
102
|
end
|
103
103
|
class Answer < ActiveRecord::Base
|
@@ -3,7 +3,9 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
3
3
|
|
4
4
|
describe DependencyCondition, "Class methods" do
|
5
5
|
it "should have a list of operators" do
|
6
|
-
%w(== != < > <= >=).each
|
6
|
+
%w(== != < > <= >=).each do |operator|
|
7
|
+
DependencyCondition.operators.include?(operator).should be_true
|
8
|
+
end
|
7
9
|
end
|
8
10
|
end
|
9
11
|
|
@@ -16,14 +18,12 @@ describe DependencyCondition, "instance" do
|
|
16
18
|
@dependency_condition.should be_valid
|
17
19
|
end
|
18
20
|
|
19
|
-
it "should be invalid without a parent dependency_id, question_id
|
21
|
+
it "should be invalid without a parent dependency_id, question_id" do
|
20
22
|
# this causes issues with building and saving
|
21
23
|
# @dependency_condition.dependency_id = nil
|
22
24
|
# @dependency_condition.should have(1).errors_on(:dependency_id)
|
23
25
|
# @dependency_condition.question_id = nil
|
24
26
|
# @dependency_condition.should have(1).errors_on(:question_id)
|
25
|
-
# @dependency_condition.answer_id = nil
|
26
|
-
# @dependency_condition.should have(1).errors_on(:answer_id)
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should be invalid without an operator" do
|
@@ -59,15 +59,15 @@ describe DependencyCondition, "instance" do
|
|
59
59
|
it "should evaluate within the context of a response set object" do
|
60
60
|
@response = Response.new(:question_id => 45, :response_set_id => 40, :answer_id => 23)
|
61
61
|
@response.answer = Answer.new(:question_id => 45, :response_class => "answer")
|
62
|
-
@dependency_condition.is_met?(@response).should be_true
|
62
|
+
@dependency_condition.is_met?([@response]).should be_true
|
63
63
|
# inversion
|
64
64
|
@alt_response = Response.new(:question_id => 45, :response_set_id => 40, :answer_id => 55)
|
65
65
|
@alt_response.answer = Answer.new(:question_id => 45, :response_class => "answer")
|
66
66
|
|
67
|
-
@dependency_condition.is_met?(@alt_response).should be_false
|
67
|
+
@dependency_condition.is_met?([@alt_response]).should be_false
|
68
68
|
end
|
69
69
|
|
70
|
-
it "converts to a hash for evaluation by the
|
70
|
+
it "converts to a hash for evaluation by the dependency object" do
|
71
71
|
@response = Response.new(:question_id => 45, :response_set_id => 40, :answer_id => 23)
|
72
72
|
@rs = mock(ResponseSet, :responses => [@response])
|
73
73
|
@dependency_condition.stub!(:is_met?).and_return(true)
|
@@ -75,7 +75,7 @@ describe DependencyCondition, "instance" do
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
describe DependencyCondition, "
|
78
|
+
describe DependencyCondition, "evaluating the response_set state" do
|
79
79
|
|
80
80
|
describe "when if given a response object whether the dependency is satisfied using '=='" do
|
81
81
|
before(:each) do
|
@@ -90,45 +90,45 @@ describe DependencyCondition, "evaluting the resonse_set state" do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it "knows checkbox/radio type response" do
|
93
|
-
@dep_c.is_met?(@response).should be_true
|
93
|
+
@dep_c.is_met?([@response]).should be_true
|
94
94
|
@dep_c.answer_id = 12
|
95
|
-
@dep_c.is_met?(@response).should be_false
|
95
|
+
@dep_c.is_met?([@response]).should be_false
|
96
96
|
end
|
97
97
|
|
98
98
|
it "knows string value response" do
|
99
99
|
@select_answer.response_class = "string"
|
100
100
|
@response.string_value = "hello123"
|
101
101
|
@dep_c.string_value = "hello123"
|
102
|
-
@dep_c.is_met?(@response).should be_true
|
102
|
+
@dep_c.is_met?([@response]).should be_true
|
103
103
|
@response.string_value = "foo_abc"
|
104
|
-
@dep_c.is_met?(@response).should be_false
|
104
|
+
@dep_c.is_met?([@response]).should be_false
|
105
105
|
end
|
106
106
|
|
107
107
|
it "knows a text value response" do
|
108
108
|
@select_answer.response_class = "text"
|
109
109
|
@response.text_value = "hello this is some text for comparison"
|
110
110
|
@dep_c.text_value = "hello this is some text for comparison"
|
111
|
-
@dep_c.is_met?(@response).should be_true
|
111
|
+
@dep_c.is_met?([@response]).should be_true
|
112
112
|
@response.text_value = "Not the same text"
|
113
|
-
@dep_c.is_met?(@response).should be_false
|
113
|
+
@dep_c.is_met?([@response]).should be_false
|
114
114
|
end
|
115
115
|
|
116
116
|
it "knows an integer value response" do
|
117
117
|
@select_answer.response_class = "integer"
|
118
118
|
@response.integer_value = 10045
|
119
119
|
@dep_c.integer_value = 10045
|
120
|
-
@dep_c.is_met?(@response).should be_true
|
120
|
+
@dep_c.is_met?([@response]).should be_true
|
121
121
|
@response.integer_value = 421
|
122
|
-
@dep_c.is_met?(@response).should be_false
|
122
|
+
@dep_c.is_met?([@response]).should be_false
|
123
123
|
end
|
124
124
|
|
125
125
|
it "knows a float value response" do
|
126
126
|
@select_answer.response_class = "float"
|
127
127
|
@response.float_value = 121.1
|
128
128
|
@dep_c.float_value = 121.1
|
129
|
-
@dep_c.is_met?(@response).should be_true
|
129
|
+
@dep_c.is_met?([@response]).should be_true
|
130
130
|
@response.float_value = 130.123
|
131
|
-
@dep_c.is_met?(@response).should be_false
|
131
|
+
@dep_c.is_met?([@response]).should be_false
|
132
132
|
end
|
133
133
|
|
134
134
|
end
|
@@ -146,45 +146,45 @@ describe DependencyCondition, "evaluting the resonse_set state" do
|
|
146
146
|
end
|
147
147
|
|
148
148
|
it "knows checkbox/radio type response" do
|
149
|
-
@dep_c.is_met?(@response).should be_false
|
149
|
+
@dep_c.is_met?([@response]).should be_false
|
150
150
|
@dep_c.answer_id = 12
|
151
|
-
@dep_c.is_met?(@response).should be_true
|
151
|
+
@dep_c.is_met?([@response]).should be_true
|
152
152
|
end
|
153
153
|
|
154
154
|
it "knows string value response" do
|
155
155
|
@select_answer.response_class = "string"
|
156
156
|
@response.string_value = "hello123"
|
157
157
|
@dep_c.string_value = "hello123"
|
158
|
-
@dep_c.is_met?(@response).should be_false
|
158
|
+
@dep_c.is_met?([@response]).should be_false
|
159
159
|
@response.string_value = "foo_abc"
|
160
|
-
@dep_c.is_met?(@response).should be_true
|
160
|
+
@dep_c.is_met?([@response]).should be_true
|
161
161
|
end
|
162
162
|
|
163
163
|
it "knows a text value response" do
|
164
164
|
@select_answer.response_class = "text"
|
165
165
|
@response.text_value = "hello this is some text for comparison"
|
166
166
|
@dep_c.text_value = "hello this is some text for comparison"
|
167
|
-
@dep_c.is_met?(@response).should be_false
|
167
|
+
@dep_c.is_met?([@response]).should be_false
|
168
168
|
@response.text_value = "Not the same text"
|
169
|
-
@dep_c.is_met?(@response).should be_true
|
169
|
+
@dep_c.is_met?([@response]).should be_true
|
170
170
|
end
|
171
171
|
|
172
172
|
it "knows an integer value response" do
|
173
173
|
@select_answer.response_class = "integer"
|
174
174
|
@response.integer_value = 10045
|
175
175
|
@dep_c.integer_value = 10045
|
176
|
-
@dep_c.is_met?(@response).should be_false
|
176
|
+
@dep_c.is_met?([@response]).should be_false
|
177
177
|
@response.integer_value = 421
|
178
|
-
@dep_c.is_met?(@response).should be_true
|
178
|
+
@dep_c.is_met?([@response]).should be_true
|
179
179
|
end
|
180
180
|
|
181
181
|
it "knows a float value response" do
|
182
182
|
@select_answer.response_class = "float"
|
183
183
|
@response.float_value = 121.1
|
184
184
|
@dep_c.float_value = 121.1
|
185
|
-
@dep_c.is_met?(@response).should be_false
|
185
|
+
@dep_c.is_met?([@response]).should be_false
|
186
186
|
@response.float_value = 130.123
|
187
|
-
@dep_c.is_met?(@response).should be_true
|
187
|
+
@dep_c.is_met?([@response]).should be_true
|
188
188
|
end
|
189
189
|
|
190
190
|
end
|
@@ -203,18 +203,18 @@ describe DependencyCondition, "evaluting the resonse_set state" do
|
|
203
203
|
@select_answer.response_class = "integer"
|
204
204
|
@response.integer_value = 50
|
205
205
|
@dep_c.integer_value = 100
|
206
|
-
@dep_c.is_met?(@response).should be_true
|
206
|
+
@dep_c.is_met?([@response]).should be_true
|
207
207
|
@response.integer_value = 421
|
208
|
-
@dep_c.is_met?(@response).should be_false
|
208
|
+
@dep_c.is_met?([@response]).should be_false
|
209
209
|
end
|
210
210
|
|
211
211
|
it "knows operator on float value response" do
|
212
212
|
@select_answer.response_class = "float"
|
213
213
|
@response.float_value = 5.1
|
214
214
|
@dep_c.float_value = 121.1
|
215
|
-
@dep_c.is_met?(@response).should be_true
|
215
|
+
@dep_c.is_met?([@response]).should be_true
|
216
216
|
@response.float_value = 130.123
|
217
|
-
@dep_c.is_met?(@response).should be_false
|
217
|
+
@dep_c.is_met?([@response]).should be_false
|
218
218
|
end
|
219
219
|
|
220
220
|
end
|
@@ -233,22 +233,22 @@ describe DependencyCondition, "evaluting the resonse_set state" do
|
|
233
233
|
@select_answer.response_class = "integer"
|
234
234
|
@response.integer_value = 50
|
235
235
|
@dep_c.integer_value = 100
|
236
|
-
@dep_c.is_met?(@response).should be_true
|
236
|
+
@dep_c.is_met?([@response]).should be_true
|
237
237
|
@response.integer_value = 100
|
238
|
-
@dep_c.is_met?(@response).should be_true
|
238
|
+
@dep_c.is_met?([@response]).should be_true
|
239
239
|
@response.integer_value = 421
|
240
|
-
@dep_c.is_met?(@response).should be_false
|
240
|
+
@dep_c.is_met?([@response]).should be_false
|
241
241
|
end
|
242
242
|
|
243
243
|
it "knows operator on float value response" do
|
244
244
|
@select_answer.response_class = "float"
|
245
245
|
@response.float_value = 5.1
|
246
246
|
@dep_c.float_value = 121.1
|
247
|
-
@dep_c.is_met?(@response).should be_true
|
247
|
+
@dep_c.is_met?([@response]).should be_true
|
248
248
|
@response.float_value = 121.1
|
249
|
-
@dep_c.is_met?(@response).should be_true
|
249
|
+
@dep_c.is_met?([@response]).should be_true
|
250
250
|
@response.float_value = 130.123
|
251
|
-
@dep_c.is_met?(@response).should be_false
|
251
|
+
@dep_c.is_met?([@response]).should be_false
|
252
252
|
end
|
253
253
|
|
254
254
|
end
|
@@ -267,18 +267,18 @@ describe DependencyCondition, "evaluting the resonse_set state" do
|
|
267
267
|
@select_answer.response_class = "integer"
|
268
268
|
@response.integer_value = 50
|
269
269
|
@dep_c.integer_value = 100
|
270
|
-
@dep_c.is_met?(@response).should be_false
|
270
|
+
@dep_c.is_met?([@response]).should be_false
|
271
271
|
@response.integer_value = 421
|
272
|
-
@dep_c.is_met?(@response).should be_true
|
272
|
+
@dep_c.is_met?([@response]).should be_true
|
273
273
|
end
|
274
274
|
|
275
275
|
it "knows operator on float value response" do
|
276
276
|
@select_answer.response_class = "float"
|
277
277
|
@response.float_value = 5.1
|
278
278
|
@dep_c.float_value = 121.1
|
279
|
-
@dep_c.is_met?(@response).should be_false
|
279
|
+
@dep_c.is_met?([@response]).should be_false
|
280
280
|
@response.float_value = 130.123
|
281
|
-
@dep_c.is_met?(@response).should be_true
|
281
|
+
@dep_c.is_met?([@response]).should be_true
|
282
282
|
end
|
283
283
|
|
284
284
|
end
|
@@ -297,26 +297,82 @@ describe DependencyCondition, "evaluting the resonse_set state" do
|
|
297
297
|
@select_answer.response_class = "integer"
|
298
298
|
@response.integer_value = 50
|
299
299
|
@dep_c.integer_value = 100
|
300
|
-
@dep_c.is_met?(@response).should be_false
|
300
|
+
@dep_c.is_met?([@response]).should be_false
|
301
301
|
@response.integer_value = 100
|
302
|
-
@dep_c.is_met?(@response).should be_true
|
302
|
+
@dep_c.is_met?([@response]).should be_true
|
303
303
|
@response.integer_value = 421
|
304
|
-
@dep_c.is_met?(@response).should be_true
|
304
|
+
@dep_c.is_met?([@response]).should be_true
|
305
305
|
end
|
306
306
|
|
307
307
|
it "knows operator on float value response" do
|
308
308
|
@select_answer.response_class = "float"
|
309
309
|
@response.float_value = 5.1
|
310
310
|
@dep_c.float_value = 121.1
|
311
|
-
@dep_c.is_met?(@response).should be_false
|
311
|
+
@dep_c.is_met?([@response]).should be_false
|
312
312
|
@response.float_value = 121.1
|
313
|
-
@dep_c.is_met?(@response).should be_true
|
313
|
+
@dep_c.is_met?([@response]).should be_true
|
314
314
|
@response.float_value = 130.123
|
315
|
-
@dep_c.is_met?(@response).should be_true
|
315
|
+
@dep_c.is_met?([@response]).should be_true
|
316
316
|
end
|
317
317
|
end
|
318
318
|
|
319
|
-
|
319
|
+
describe "when given responses whether the dependency is satisfied using 'count'" do
|
320
|
+
before(:each) do
|
321
|
+
@dep_c = DependencyCondition.new(:answer_id => nil,
|
322
|
+
:operator => "count>2")
|
323
|
+
@question = Question.new
|
324
|
+
@select_answers = []
|
325
|
+
3.times do
|
326
|
+
@select_answers << Answer.new(:question => @question,
|
327
|
+
:response_class => "answer")
|
328
|
+
end
|
329
|
+
@responses = []
|
330
|
+
@select_answers.slice(0,2).each do |a|
|
331
|
+
@responses << Response.new(:question => @question, :answer => a,
|
332
|
+
:response_set_id => 159)
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
it "knows operator with >" do
|
337
|
+
@dep_c.is_met?(@responses).should be_false
|
338
|
+
@responses << Response.new(:question => @question,
|
339
|
+
:answer => @select_answers.last,
|
340
|
+
:response_set_id => 159)
|
341
|
+
@dep_c.is_met?(@responses).should be_true
|
342
|
+
end
|
320
343
|
|
321
|
-
|
344
|
+
it "knows operator with <" do
|
345
|
+
@dep_c.operator = "count<2"
|
346
|
+
@dep_c.is_met?(@responses).should be_false
|
347
|
+
@dep_c.operator = "count<3"
|
348
|
+
@dep_c.is_met?(@responses).should be_true
|
349
|
+
end
|
322
350
|
|
351
|
+
it "knows operator with <=" do
|
352
|
+
@dep_c.operator = "count<=1"
|
353
|
+
@dep_c.is_met?(@responses).should be_false
|
354
|
+
@dep_c.operator = "count<=2"
|
355
|
+
@dep_c.is_met?(@responses).should be_true
|
356
|
+
@dep_c.operator = "count<=3"
|
357
|
+
@dep_c.is_met?(@responses).should be_true
|
358
|
+
end
|
359
|
+
|
360
|
+
it "knows operator with >=" do
|
361
|
+
@dep_c.operator = "count>=1"
|
362
|
+
@dep_c.is_met?(@responses).should be_true
|
363
|
+
@dep_c.operator = "count>=2"
|
364
|
+
@dep_c.is_met?(@responses).should be_true
|
365
|
+
@dep_c.operator = "count>=3"
|
366
|
+
@dep_c.is_met?(@responses).should be_false
|
367
|
+
end
|
368
|
+
|
369
|
+
it "knows operator with !=" do
|
370
|
+
@dep_c.operator = "count!=1"
|
371
|
+
@dep_c.is_met?(@responses).should be_true
|
372
|
+
@dep_c.operator = "count!=2"
|
373
|
+
@dep_c.is_met?(@responses).should be_false
|
374
|
+
@dep_c.operator = "count!=3"
|
375
|
+
@dep_c.is_met?(@responses).should be_true
|
376
|
+
end
|
377
|
+
end
|
378
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
|
-
ENV["RAILS_ENV"] = "test"
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + "/../../../../config/environment")
|
3
|
-
require 'spec/autorun'
|
4
|
-
require 'spec/rails'
|
5
1
|
|
6
|
-
require
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler'
|
4
|
+
Bundler.setup
|
7
5
|
|
8
|
-
|
9
|
-
|
6
|
+
require "spec"
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
9
|
+
|
10
|
+
|
11
|
+
this_dir = File.dirname(__FILE__)
|
12
|
+
raise "Alert! Run the rake task to install the test Rails app. It seems to be missing." unless File.directory?(File.join(this_dir,'test_app/spec'))
|
13
|
+
require File.join(this_dir, 'test_app/spec/spec_helper')
|
14
|
+
require File.join(this_dir, '/factories')
|
15
|
+
|
16
|
+
require 'surveyor'
|
17
|
+
require 'surveyor/parser'
|
10
18
|
|
11
19
|
Spec::Runner.configure do |config|
|
12
|
-
end
|
20
|
+
end
|
data/spec/test_Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
source :rubygems
|
2
|
+
|
3
|
+
gem 'rails', '2.3.10'
|
4
|
+
gem 'rspec', '~> 1.3'
|
5
|
+
gem 'rspec-rails', '1.3.3'
|
6
|
+
gem 'sqlite3-ruby', '1.2.5' #Using this version for ruby 1.8.7 compatibility reasons
|
7
|
+
gem 'webrat'
|
8
|
+
gem 'cucumber', '~> 0.8.0'
|
9
|
+
gem 'cucumber-rails'
|
10
|
+
gem 'database_cleaner'
|
11
|
+
gem 'factory_girl'
|
12
|
+
|
13
|
+
plugin_root = File.expand_path("../../..", __FILE__)
|
14
|
+
#self.instance_eval File.read("#{plugin_root}/Gemfile")
|
15
|
+
gem 'surveyor', :path => plugin_root
|
data/spec/test_boot.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
# Don't change this file!
|
2
|
+
# Configure your app in config/environment.rb and config/environments/*.rb
|
3
|
+
|
4
|
+
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
|
5
|
+
|
6
|
+
module Rails
|
7
|
+
class << self
|
8
|
+
def boot!
|
9
|
+
unless booted?
|
10
|
+
preinitialize
|
11
|
+
pick_boot.run
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def booted?
|
16
|
+
defined? Rails::Initializer
|
17
|
+
end
|
18
|
+
|
19
|
+
def pick_boot
|
20
|
+
(vendor_rails? ? VendorBoot : GemBoot).new
|
21
|
+
end
|
22
|
+
|
23
|
+
def vendor_rails?
|
24
|
+
File.exist?("#{RAILS_ROOT}/vendor/rails")
|
25
|
+
end
|
26
|
+
|
27
|
+
def preinitialize
|
28
|
+
load(preinitializer_path) if File.exist?(preinitializer_path)
|
29
|
+
end
|
30
|
+
|
31
|
+
def preinitializer_path
|
32
|
+
"#{RAILS_ROOT}/config/preinitializer.rb"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Boot
|
37
|
+
def run
|
38
|
+
load_initializer
|
39
|
+
Rails::Initializer.run(:set_load_path)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class VendorBoot < Boot
|
44
|
+
def load_initializer
|
45
|
+
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
|
46
|
+
Rails::Initializer.run(:install_gem_spec_stubs)
|
47
|
+
Rails::GemDependency.add_frozen_gem_path
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class GemBoot < Boot
|
52
|
+
def load_initializer
|
53
|
+
self.class.load_rubygems
|
54
|
+
load_rails_gem
|
55
|
+
require 'initializer'
|
56
|
+
end
|
57
|
+
|
58
|
+
def load_rails_gem
|
59
|
+
if version = self.class.gem_version
|
60
|
+
gem 'rails', version
|
61
|
+
else
|
62
|
+
gem 'rails'
|
63
|
+
end
|
64
|
+
rescue Gem::LoadError => load_error
|
65
|
+
if load_error.message =~ /Could not find RubyGem rails/
|
66
|
+
STDERR.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
|
67
|
+
exit 1
|
68
|
+
else
|
69
|
+
raise
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class << self
|
74
|
+
def rubygems_version
|
75
|
+
Gem::RubyGemsVersion rescue nil
|
76
|
+
end
|
77
|
+
|
78
|
+
def gem_version
|
79
|
+
if defined? RAILS_GEM_VERSION
|
80
|
+
RAILS_GEM_VERSION
|
81
|
+
elsif ENV.include?('RAILS_GEM_VERSION')
|
82
|
+
ENV['RAILS_GEM_VERSION']
|
83
|
+
else
|
84
|
+
parse_gem_version(read_environment_rb)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def load_rubygems
|
89
|
+
min_version = '1.3.2'
|
90
|
+
require 'rubygems'
|
91
|
+
unless rubygems_version >= min_version
|
92
|
+
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
93
|
+
exit 1
|
94
|
+
end
|
95
|
+
|
96
|
+
rescue LoadError
|
97
|
+
$stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
|
98
|
+
exit 1
|
99
|
+
end
|
100
|
+
|
101
|
+
def parse_gem_version(text)
|
102
|
+
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
def read_environment_rb
|
107
|
+
File.read("#{RAILS_ROOT}/config/environment.rb")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
class Rails::Boot
|
113
|
+
def run
|
114
|
+
load_initializer
|
115
|
+
|
116
|
+
Rails::Initializer.class_eval do
|
117
|
+
def load_gems
|
118
|
+
@bundler_loaded ||= Bundler.require :default, Rails.env
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
Rails::Initializer.run(:set_load_path)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
# All that for this:
|
128
|
+
Rails.boot!
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# To go in test_app/config
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler"
|
6
|
+
rescue LoadError
|
7
|
+
raise "Could not load the bundler gem. Install it with `gem install bundler`."
|
8
|
+
end
|
9
|
+
|
10
|
+
if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24")
|
11
|
+
raise RuntimeError, "Your bundler version is too old." +
|
12
|
+
"Run `gem install bundler` to upgrade."
|
13
|
+
end
|
14
|
+
|
15
|
+
begin
|
16
|
+
ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
|
17
|
+
Bundler.setup
|
18
|
+
rescue Bundler::GemNotFound
|
19
|
+
raise RuntimeError, "Bundler couldn't find some gems." +
|
20
|
+
"Did you run `bundle install`?"
|
21
|
+
end
|
data/surveyor.gemspec
CHANGED
@@ -5,17 +5,20 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{surveyor}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.17.0"
|
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{2010-11-
|
12
|
+
s.date = %q{2010-11-30}
|
13
13
|
s.email = %q{yoon@northwestern.edu}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.md"
|
16
16
|
]
|
17
17
|
s.files = [
|
18
18
|
".gitignore",
|
19
|
+
".rvmrc",
|
20
|
+
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
19
22
|
"MIT-LICENSE",
|
20
23
|
"README.md",
|
21
24
|
"Rakefile",
|
@@ -177,6 +180,9 @@ Gem::Specification.new do |s|
|
|
177
180
|
"spec/rcov.opts",
|
178
181
|
"spec/spec.opts",
|
179
182
|
"spec/spec_helper.rb",
|
183
|
+
"spec/test_Gemfile",
|
184
|
+
"spec/test_boot.rb",
|
185
|
+
"spec/test_preinitializer.rb",
|
180
186
|
"spec/views/surveyor/show.html.haml_spec.rb",
|
181
187
|
"surveyor.gemspec",
|
182
188
|
"uninstall.rb"
|
@@ -204,6 +210,51 @@ Gem::Specification.new do |s|
|
|
204
210
|
"spec/models/validation_condition_spec.rb",
|
205
211
|
"spec/models/validation_spec.rb",
|
206
212
|
"spec/spec_helper.rb",
|
213
|
+
"spec/test_app/app/controllers/application_controller.rb",
|
214
|
+
"spec/test_app/app/helpers/application_helper.rb",
|
215
|
+
"spec/test_app/config/boot.rb",
|
216
|
+
"spec/test_app/config/environment.rb",
|
217
|
+
"spec/test_app/config/environments/cucumber.rb",
|
218
|
+
"spec/test_app/config/environments/development.rb",
|
219
|
+
"spec/test_app/config/environments/production.rb",
|
220
|
+
"spec/test_app/config/environments/test.rb",
|
221
|
+
"spec/test_app/config/initializers/backtrace_silencers.rb",
|
222
|
+
"spec/test_app/config/initializers/cookie_verification_secret.rb",
|
223
|
+
"spec/test_app/config/initializers/inflections.rb",
|
224
|
+
"spec/test_app/config/initializers/mime_types.rb",
|
225
|
+
"spec/test_app/config/initializers/new_rails_defaults.rb",
|
226
|
+
"spec/test_app/config/initializers/session_store.rb",
|
227
|
+
"spec/test_app/config/preinitializer.rb",
|
228
|
+
"spec/test_app/config/routes.rb",
|
229
|
+
"spec/test_app/db/migrate/20101119172426_create_surveys.rb",
|
230
|
+
"spec/test_app/db/migrate/20101119172427_create_survey_sections.rb",
|
231
|
+
"spec/test_app/db/migrate/20101119172428_create_questions.rb",
|
232
|
+
"spec/test_app/db/migrate/20101119172429_create_question_groups.rb",
|
233
|
+
"spec/test_app/db/migrate/20101119172430_create_answers.rb",
|
234
|
+
"spec/test_app/db/migrate/20101119172431_create_response_sets.rb",
|
235
|
+
"spec/test_app/db/migrate/20101119172432_create_responses.rb",
|
236
|
+
"spec/test_app/db/migrate/20101119172433_create_dependencies.rb",
|
237
|
+
"spec/test_app/db/migrate/20101119172434_create_dependency_conditions.rb",
|
238
|
+
"spec/test_app/db/migrate/20101119172435_create_validations.rb",
|
239
|
+
"spec/test_app/db/migrate/20101119172436_create_validation_conditions.rb",
|
240
|
+
"spec/test_app/db/migrate/20101119172437_add_display_order_to_surveys.rb",
|
241
|
+
"spec/test_app/db/migrate/20101119172438_add_correct_answer_id_to_questions.rb",
|
242
|
+
"spec/test_app/db/migrate/20101119172439_add_index_to_response_sets.rb",
|
243
|
+
"spec/test_app/db/migrate/20101119172440_add_index_to_surveys.rb",
|
244
|
+
"spec/test_app/db/migrate/20101119172441_add_unique_indicies.rb",
|
245
|
+
"spec/test_app/db/migrate/20101119172442_add_section_id_to_responses.rb",
|
246
|
+
"spec/test_app/db/schema.rb",
|
247
|
+
"spec/test_app/db/seeds.rb",
|
248
|
+
"spec/test_app/features/step_definitions/web_steps.rb",
|
249
|
+
"spec/test_app/features/support/env.rb",
|
250
|
+
"spec/test_app/features/support/paths.rb",
|
251
|
+
"spec/test_app/lib/tasks/surveyor.rb",
|
252
|
+
"spec/test_app/spec/spec_helper.rb",
|
253
|
+
"spec/test_app/surveys/kitchen_sink_survey.rb",
|
254
|
+
"spec/test_app/test/performance/browsing_test.rb",
|
255
|
+
"spec/test_app/test/test_helper.rb",
|
256
|
+
"spec/test_boot.rb",
|
257
|
+
"spec/test_preinitializer.rb",
|
207
258
|
"spec/views/surveyor/show.html.haml_spec.rb"
|
208
259
|
]
|
209
260
|
|
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:
|
4
|
+
hash: 91
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 17
|
9
|
+
- 0
|
10
|
+
version: 0.17.0
|
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: 2010-11-
|
19
|
+
date: 2010-11-30 00:00:00 -06:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -57,6 +57,9 @@ extra_rdoc_files:
|
|
57
57
|
- README.md
|
58
58
|
files:
|
59
59
|
- .gitignore
|
60
|
+
- .rvmrc
|
61
|
+
- Gemfile
|
62
|
+
- Gemfile.lock
|
60
63
|
- MIT-LICENSE
|
61
64
|
- README.md
|
62
65
|
- Rakefile
|
@@ -218,9 +221,55 @@ files:
|
|
218
221
|
- spec/rcov.opts
|
219
222
|
- spec/spec.opts
|
220
223
|
- spec/spec_helper.rb
|
224
|
+
- spec/test_Gemfile
|
225
|
+
- spec/test_boot.rb
|
226
|
+
- spec/test_preinitializer.rb
|
221
227
|
- spec/views/surveyor/show.html.haml_spec.rb
|
222
228
|
- surveyor.gemspec
|
223
229
|
- uninstall.rb
|
230
|
+
- spec/test_app/app/controllers/application_controller.rb
|
231
|
+
- spec/test_app/app/helpers/application_helper.rb
|
232
|
+
- spec/test_app/config/boot.rb
|
233
|
+
- spec/test_app/config/environment.rb
|
234
|
+
- spec/test_app/config/environments/cucumber.rb
|
235
|
+
- spec/test_app/config/environments/development.rb
|
236
|
+
- spec/test_app/config/environments/production.rb
|
237
|
+
- spec/test_app/config/environments/test.rb
|
238
|
+
- spec/test_app/config/initializers/backtrace_silencers.rb
|
239
|
+
- spec/test_app/config/initializers/cookie_verification_secret.rb
|
240
|
+
- spec/test_app/config/initializers/inflections.rb
|
241
|
+
- spec/test_app/config/initializers/mime_types.rb
|
242
|
+
- spec/test_app/config/initializers/new_rails_defaults.rb
|
243
|
+
- spec/test_app/config/initializers/session_store.rb
|
244
|
+
- spec/test_app/config/preinitializer.rb
|
245
|
+
- spec/test_app/config/routes.rb
|
246
|
+
- spec/test_app/db/migrate/20101119172426_create_surveys.rb
|
247
|
+
- spec/test_app/db/migrate/20101119172427_create_survey_sections.rb
|
248
|
+
- spec/test_app/db/migrate/20101119172428_create_questions.rb
|
249
|
+
- spec/test_app/db/migrate/20101119172429_create_question_groups.rb
|
250
|
+
- spec/test_app/db/migrate/20101119172430_create_answers.rb
|
251
|
+
- spec/test_app/db/migrate/20101119172431_create_response_sets.rb
|
252
|
+
- spec/test_app/db/migrate/20101119172432_create_responses.rb
|
253
|
+
- spec/test_app/db/migrate/20101119172433_create_dependencies.rb
|
254
|
+
- spec/test_app/db/migrate/20101119172434_create_dependency_conditions.rb
|
255
|
+
- spec/test_app/db/migrate/20101119172435_create_validations.rb
|
256
|
+
- spec/test_app/db/migrate/20101119172436_create_validation_conditions.rb
|
257
|
+
- spec/test_app/db/migrate/20101119172437_add_display_order_to_surveys.rb
|
258
|
+
- spec/test_app/db/migrate/20101119172438_add_correct_answer_id_to_questions.rb
|
259
|
+
- spec/test_app/db/migrate/20101119172439_add_index_to_response_sets.rb
|
260
|
+
- spec/test_app/db/migrate/20101119172440_add_index_to_surveys.rb
|
261
|
+
- spec/test_app/db/migrate/20101119172441_add_unique_indicies.rb
|
262
|
+
- spec/test_app/db/migrate/20101119172442_add_section_id_to_responses.rb
|
263
|
+
- spec/test_app/db/schema.rb
|
264
|
+
- spec/test_app/db/seeds.rb
|
265
|
+
- spec/test_app/features/step_definitions/web_steps.rb
|
266
|
+
- spec/test_app/features/support/env.rb
|
267
|
+
- spec/test_app/features/support/paths.rb
|
268
|
+
- spec/test_app/lib/tasks/surveyor.rb
|
269
|
+
- spec/test_app/spec/spec_helper.rb
|
270
|
+
- spec/test_app/surveys/kitchen_sink_survey.rb
|
271
|
+
- spec/test_app/test/performance/browsing_test.rb
|
272
|
+
- spec/test_app/test/test_helper.rb
|
224
273
|
has_rdoc: true
|
225
274
|
homepage: http://github.com/breakpointer/surveyor
|
226
275
|
licenses: []
|
@@ -273,4 +322,49 @@ test_files:
|
|
273
322
|
- spec/models/validation_condition_spec.rb
|
274
323
|
- spec/models/validation_spec.rb
|
275
324
|
- spec/spec_helper.rb
|
325
|
+
- spec/test_app/app/controllers/application_controller.rb
|
326
|
+
- spec/test_app/app/helpers/application_helper.rb
|
327
|
+
- spec/test_app/config/boot.rb
|
328
|
+
- spec/test_app/config/environment.rb
|
329
|
+
- spec/test_app/config/environments/cucumber.rb
|
330
|
+
- spec/test_app/config/environments/development.rb
|
331
|
+
- spec/test_app/config/environments/production.rb
|
332
|
+
- spec/test_app/config/environments/test.rb
|
333
|
+
- spec/test_app/config/initializers/backtrace_silencers.rb
|
334
|
+
- spec/test_app/config/initializers/cookie_verification_secret.rb
|
335
|
+
- spec/test_app/config/initializers/inflections.rb
|
336
|
+
- spec/test_app/config/initializers/mime_types.rb
|
337
|
+
- spec/test_app/config/initializers/new_rails_defaults.rb
|
338
|
+
- spec/test_app/config/initializers/session_store.rb
|
339
|
+
- spec/test_app/config/preinitializer.rb
|
340
|
+
- spec/test_app/config/routes.rb
|
341
|
+
- spec/test_app/db/migrate/20101119172426_create_surveys.rb
|
342
|
+
- spec/test_app/db/migrate/20101119172427_create_survey_sections.rb
|
343
|
+
- spec/test_app/db/migrate/20101119172428_create_questions.rb
|
344
|
+
- spec/test_app/db/migrate/20101119172429_create_question_groups.rb
|
345
|
+
- spec/test_app/db/migrate/20101119172430_create_answers.rb
|
346
|
+
- spec/test_app/db/migrate/20101119172431_create_response_sets.rb
|
347
|
+
- spec/test_app/db/migrate/20101119172432_create_responses.rb
|
348
|
+
- spec/test_app/db/migrate/20101119172433_create_dependencies.rb
|
349
|
+
- spec/test_app/db/migrate/20101119172434_create_dependency_conditions.rb
|
350
|
+
- spec/test_app/db/migrate/20101119172435_create_validations.rb
|
351
|
+
- spec/test_app/db/migrate/20101119172436_create_validation_conditions.rb
|
352
|
+
- spec/test_app/db/migrate/20101119172437_add_display_order_to_surveys.rb
|
353
|
+
- spec/test_app/db/migrate/20101119172438_add_correct_answer_id_to_questions.rb
|
354
|
+
- spec/test_app/db/migrate/20101119172439_add_index_to_response_sets.rb
|
355
|
+
- spec/test_app/db/migrate/20101119172440_add_index_to_surveys.rb
|
356
|
+
- spec/test_app/db/migrate/20101119172441_add_unique_indicies.rb
|
357
|
+
- spec/test_app/db/migrate/20101119172442_add_section_id_to_responses.rb
|
358
|
+
- spec/test_app/db/schema.rb
|
359
|
+
- spec/test_app/db/seeds.rb
|
360
|
+
- spec/test_app/features/step_definitions/web_steps.rb
|
361
|
+
- spec/test_app/features/support/env.rb
|
362
|
+
- spec/test_app/features/support/paths.rb
|
363
|
+
- spec/test_app/lib/tasks/surveyor.rb
|
364
|
+
- spec/test_app/spec/spec_helper.rb
|
365
|
+
- spec/test_app/surveys/kitchen_sink_survey.rb
|
366
|
+
- spec/test_app/test/performance/browsing_test.rb
|
367
|
+
- spec/test_app/test/test_helper.rb
|
368
|
+
- spec/test_boot.rb
|
369
|
+
- spec/test_preinitializer.rb
|
276
370
|
- spec/views/surveyor/show.html.haml_spec.rb
|