surveyor 0.6.1
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 +6 -0
- data/MIT-LICENSE +20 -0
- data/README.md +104 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/app/controllers/surveyor_controller.rb +117 -0
- data/app/helpers/survey_form_builder.rb +37 -0
- data/app/helpers/surveyor_helper.rb +66 -0
- data/app/models/answer.rb +21 -0
- data/app/models/dependency.rb +46 -0
- data/app/models/dependency_condition.rb +79 -0
- data/app/models/question.rb +54 -0
- data/app/models/question_group.rb +18 -0
- data/app/models/response.rb +47 -0
- data/app/models/response_set.rb +185 -0
- data/app/models/survey.rb +57 -0
- data/app/models/survey_section.rb +15 -0
- data/app/views/layouts/surveyor_default.html.erb +13 -0
- data/app/views/partials/_answer.html.haml +49 -0
- data/app/views/partials/_question.html.haml +73 -0
- data/app/views/partials/_question_group.html.haml +41 -0
- data/app/views/surveyor/edit.html.haml +32 -0
- data/app/views/surveyor/new.html.haml +17 -0
- data/app/views/surveyor/show.html.haml +12 -0
- data/config/routes.rb +10 -0
- data/generators/surveyor/EXTENDING_SURVEYOR +12 -0
- data/generators/surveyor/extend_surveyor_generator.rb +22 -0
- data/generators/surveyor/surveyor_generator.rb +60 -0
- data/generators/surveyor/templates/README +10 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_arrows_leftright.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_arrows_updown.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_close.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_doc.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_folder_closed.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_folder_open.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_minus.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_plus.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_11x11_icon_resize_se.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_35x9_colorpicker_indicator.gif.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_7x7_arrow_down.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_7x7_arrow_left.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_7x7_arrow_right.gif +0 -0
- data/generators/surveyor/templates/assets/images/222222_7x7_arrow_up.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_arrows_leftright.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_arrows_updown.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_close.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_doc.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_folder_closed.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_folder_open.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_minus.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_11x11_icon_plus.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_7x7_arrow_down.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_7x7_arrow_left.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_7x7_arrow_right.gif +0 -0
- data/generators/surveyor/templates/assets/images/454545_7x7_arrow_up.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_arrows_leftright.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_arrows_updown.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_close.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_doc.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_folder_closed.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_folder_open.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_minus.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_11x11_icon_plus.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_7x7_arrow_down.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_7x7_arrow_left.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_7x7_arrow_right.gif +0 -0
- data/generators/surveyor/templates/assets/images/888888_7x7_arrow_up.gif +0 -0
- data/generators/surveyor/templates/assets/images/dadada_40x100_textures_02_glass_75.png +0 -0
- data/generators/surveyor/templates/assets/images/e6e6e6_40x100_textures_02_glass_75.png +0 -0
- data/generators/surveyor/templates/assets/images/ffffff_40x100_textures_01_flat_0.png +0 -0
- data/generators/surveyor/templates/assets/images/ffffff_40x100_textures_02_glass_65.png +0 -0
- data/generators/surveyor/templates/assets/javascripts/accessibleUISlider.jQuery.js +201 -0
- data/generators/surveyor/templates/assets/javascripts/jquery-1.2.6.js +3549 -0
- data/generators/surveyor/templates/assets/javascripts/jquery-ui-personalized-1.5.3.js +7616 -0
- data/generators/surveyor/templates/assets/javascripts/jquery.form.js +637 -0
- data/generators/surveyor/templates/assets/javascripts/surveyor.js +28 -0
- data/generators/surveyor/templates/assets/stylesheets/jquery-ui-slider-additions.css +71 -0
- data/generators/surveyor/templates/assets/stylesheets/reset.css +46 -0
- data/generators/surveyor/templates/assets/stylesheets/sass/surveyor.sass +245 -0
- data/generators/surveyor/templates/assets/stylesheets/surveyor.css +231 -0
- data/generators/surveyor/templates/assets/stylesheets/ui.theme.css +851 -0
- data/generators/surveyor/templates/extensions/survey_extensions.rb +18 -0
- data/generators/surveyor/templates/extensions/surveyor_controller_extensions.rb +28 -0
- data/generators/surveyor/templates/extensions/surveyor_custom.html.erb +13 -0
- data/generators/surveyor/templates/extensions/surveyor_helper_extensions.rb +18 -0
- data/generators/surveyor/templates/initializers/haml.rb +8 -0
- data/generators/surveyor/templates/initializers/surveyor.rb +11 -0
- data/generators/surveyor/templates/migrate/create_answers.rb +45 -0
- data/generators/surveyor/templates/migrate/create_dependencies.rb +21 -0
- data/generators/surveyor/templates/migrate/create_dependency_conditions.rb +29 -0
- data/generators/surveyor/templates/migrate/create_question_groups.rb +18 -0
- data/generators/surveyor/templates/migrate/create_questions.rb +33 -0
- data/generators/surveyor/templates/migrate/create_response_sets.rb +22 -0
- data/generators/surveyor/templates/migrate/create_responses.rb +33 -0
- data/generators/surveyor/templates/migrate/create_survey_sections.rb +25 -0
- data/generators/surveyor/templates/migrate/create_surveys.rb +25 -0
- data/generators/surveyor/templates/surveys/kitchen_sink_survey.rb +201 -0
- data/generators/surveyor/templates/tasks/surveyor.rb +4 -0
- data/init.rb +1 -0
- data/install.rb +1 -0
- data/lib/surveyor.rb +7 -0
- data/lib/surveyor/config.rb +45 -0
- data/lib/tasks/surveyor_tasks.rake +33 -0
- data/lib/tiny_code.rb +58 -0
- data/lib/xml_formatter.rb +12 -0
- data/script/surveyor/answer.rb +84 -0
- data/script/surveyor/columnizer.rb +36 -0
- data/script/surveyor/dependency.rb +43 -0
- data/script/surveyor/dependency_condition.rb +74 -0
- data/script/surveyor/question.rb +76 -0
- data/script/surveyor/question_group.rb +33 -0
- data/script/surveyor/specs/answer_spec.rb +66 -0
- data/script/surveyor/specs/question_dependency_spec.rb +46 -0
- data/script/surveyor/specs/question_group_spec.rb +9 -0
- data/script/surveyor/specs/question_spec.rb +111 -0
- data/script/surveyor/specs/section_spec.rb +58 -0
- data/script/surveyor/survey.rb +108 -0
- data/script/surveyor/survey_parser.rb +64 -0
- data/script/surveyor/survey_section.rb +153 -0
- data/script/surveyor/whr_dsl.tmproj +244 -0
- data/spec/controllers/surveyor_controller_spec.rb +328 -0
- data/spec/factories.rb +107 -0
- data/spec/models/answer_spec.rb +29 -0
- data/spec/models/dependency_condition_spec.rb +338 -0
- data/spec/models/dependency_spec.rb +82 -0
- data/spec/models/question_group_spec.rb +11 -0
- data/spec/models/question_spec.rb +75 -0
- data/spec/models/response_set_spec.rb +153 -0
- data/spec/models/response_spec.rb +94 -0
- data/spec/models/survey_section_spec.rb +34 -0
- data/spec/models/survey_spec.rb +72 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +14 -0
- data/surveyor.gemspec +187 -0
- data/uninstall.rb +1 -0
- metadata +211 -0
data/spec/factories.rb
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# http://github.com/thoughtbot/factory_girl/tree/master
|
|
2
|
+
|
|
3
|
+
Factory.define :survey do |s|
|
|
4
|
+
s.title {"Simple survey"}
|
|
5
|
+
s.description {"A simple survey for testing"}
|
|
6
|
+
s.access_code {"simple_survey"}
|
|
7
|
+
s.active_at {Time.now}
|
|
8
|
+
s.inactive_at {}
|
|
9
|
+
s.css_url {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
Factory.sequence(:survey_section_display_order){|n| n }
|
|
13
|
+
|
|
14
|
+
Factory.define :survey_section do |s|
|
|
15
|
+
s.association :survey # s.survey_id {}
|
|
16
|
+
s.title {"Demographics"}
|
|
17
|
+
s.description {"Asking you about your personal data"}
|
|
18
|
+
s.display_order {Factory.next :survey_section_display_order}
|
|
19
|
+
s.reference_identifier {"demographics"}
|
|
20
|
+
s.data_export_identifier {"demographics"}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
Factory.sequence(:question_display_order){|n| n }
|
|
24
|
+
|
|
25
|
+
Factory.define :question do |s|
|
|
26
|
+
s.association :survey_section # s.survey_section_id {}
|
|
27
|
+
s.text {"What is your favorite color?"}
|
|
28
|
+
s.short_text {"favorite_color"}
|
|
29
|
+
s.help_text {"just write it in the box"}
|
|
30
|
+
s.pick {:none}
|
|
31
|
+
s.display_type {} # nil is default
|
|
32
|
+
s.display_order {Factory.next :question_display_order}
|
|
33
|
+
s.question_group_id {}
|
|
34
|
+
s.is_mandatory {false}
|
|
35
|
+
s.reference_identifier {|me| "q_#{me.object_id}"}
|
|
36
|
+
s.data_export_identifier {}
|
|
37
|
+
s.display_width {}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
Factory.sequence(:answer_display_order){|n| n }
|
|
41
|
+
|
|
42
|
+
Factory.define :answer do |a|
|
|
43
|
+
a.association :question # a.question_id {}
|
|
44
|
+
a.text {"My favorite color is clear"}
|
|
45
|
+
a.short_text {"clear"}
|
|
46
|
+
a.help_text {"Clear is the absense of color"}
|
|
47
|
+
a.weight {}
|
|
48
|
+
a.response_class {"String"}
|
|
49
|
+
a.display_order {}
|
|
50
|
+
a.is_exclusive {}
|
|
51
|
+
a.hide_label {}
|
|
52
|
+
a.reference_identifier {}
|
|
53
|
+
a.data_export_identifier {}
|
|
54
|
+
a.common_data_identitier {}
|
|
55
|
+
a.max_value {}
|
|
56
|
+
a.min_value {}
|
|
57
|
+
a.length {}
|
|
58
|
+
a.decimal_precision {}
|
|
59
|
+
a.allow_negative {}
|
|
60
|
+
a.allow_blank {}
|
|
61
|
+
a.unit {}
|
|
62
|
+
a.display_length {}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Factory.define :dependency do |d|
|
|
66
|
+
# the dependent question
|
|
67
|
+
d.association :question # d.question_id {}
|
|
68
|
+
d.rule {"1"}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
Factory.define :dependency_condition do |d|
|
|
72
|
+
d.association :dependency # d.dependency_id {}
|
|
73
|
+
d.rule_key {"1"}
|
|
74
|
+
# the conditional question
|
|
75
|
+
d.question_id {}
|
|
76
|
+
d.operator {"=="}
|
|
77
|
+
d.answer_id {}
|
|
78
|
+
d.datetime_value {}
|
|
79
|
+
d.integer_value {}
|
|
80
|
+
d.float_value {}
|
|
81
|
+
d.unit {}
|
|
82
|
+
d.text_value {}
|
|
83
|
+
d.string_value {}
|
|
84
|
+
d.response_other {}
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
Factory.define :response_set do |r|
|
|
88
|
+
r.user_id {}
|
|
89
|
+
r.association :survey # r.survey_id {}
|
|
90
|
+
r.access_code {ResponseSet.make_tiny_code}
|
|
91
|
+
r.started_at {Time.now}
|
|
92
|
+
r.completed_at {}
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
Factory.define :response do |r|
|
|
96
|
+
r.association :response_set # r.response_set_id {}
|
|
97
|
+
r.question_id {}
|
|
98
|
+
r.answer_id {}
|
|
99
|
+
r.datetime_value {}
|
|
100
|
+
r.integer_value {}
|
|
101
|
+
r.float_value {}
|
|
102
|
+
r.unit {}
|
|
103
|
+
r.text_value {}
|
|
104
|
+
r.string_value {}
|
|
105
|
+
r.response_other {}
|
|
106
|
+
r.response_group {}
|
|
107
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe Answer, "when creating a new answer" do
|
|
4
|
+
before(:each) do
|
|
5
|
+
@answer = Factory(:answer, :text => "Red")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should be valid" do
|
|
9
|
+
@answer.should be_valid
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should be invalid without a unique reference identifier (within the scope of its parent)" do
|
|
13
|
+
@answer.question_id = nil
|
|
14
|
+
@answer.should_not be_valid
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should have 'default' renderer with nil question.pick and response_class" do
|
|
18
|
+
@answer.question = Factory(:question, :pick => nil)
|
|
19
|
+
@answer.response_class = nil
|
|
20
|
+
@answer.renderer.should == :default
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should have a_b renderer for a question.pick and B response_class" do
|
|
24
|
+
@answer.question = Factory(:question, :pick => "a")
|
|
25
|
+
@answer.response_class = "B"
|
|
26
|
+
@answer.renderer.should == :a_b
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
describe DependencyCondition, "Class methods" do
|
|
5
|
+
it "should have a list of operators" do
|
|
6
|
+
%w(== != < > <= >=).each{|operator| DependencyCondition.operators.include?(operator).should be_true }
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe DependencyCondition, "instance" do
|
|
11
|
+
before(:each) do
|
|
12
|
+
@dependency_condition = DependencyCondition.new(:dependency_id => 1, :question_id => 45, :operator => "==", :answer_id => 23, :rule_key => "1")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should be valid" do
|
|
16
|
+
@dependency_condition.should be_valid
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should be invalid without a parent dependency_id, question_id, answer_id" do
|
|
20
|
+
@dependency_condition.dependency_id = nil
|
|
21
|
+
@dependency_condition.should have(1).errors_on(:dependency_id)
|
|
22
|
+
@dependency_condition.question_id = nil
|
|
23
|
+
@dependency_condition.should have(1).errors_on(:question_id)
|
|
24
|
+
@dependency_condition.answer_id = nil
|
|
25
|
+
@dependency_condition.should have(1).errors_on(:answer_id)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should be invalid without an operator" do
|
|
29
|
+
@dependency_condition.operator = nil
|
|
30
|
+
@dependency_condition.should have(2).errors_on(:operator)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should be invalid without a rule_key" do
|
|
34
|
+
@dependency_condition.should be_valid
|
|
35
|
+
@dependency_condition.rule_key = nil
|
|
36
|
+
@dependency_condition.should_not be_valid
|
|
37
|
+
@dependency_condition.should have(1).errors_on(:rule_key)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should have unique rule_key within the context of a dependency" do
|
|
41
|
+
@dependency_condition.should be_valid
|
|
42
|
+
DependencyCondition.create(:dependency_id => 2, :question_id => 46, :operator => "==", :answer_id => 14, :rule_key => "2")
|
|
43
|
+
@dependency_condition.rule_key = "2" #rule key uniquness is scoped by dependency_id
|
|
44
|
+
@dependency_condition.dependency_id = 2
|
|
45
|
+
@dependency_condition.should_not be_valid
|
|
46
|
+
@dependency_condition.should have(1).errors_on(:rule_key)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should have an operator in DependencyCondition.operators" do
|
|
50
|
+
DependencyCondition.operators.each do |o|
|
|
51
|
+
@dependency_condition.operator = o
|
|
52
|
+
@dependency_condition.should have(0).errors_on(:operator)
|
|
53
|
+
end
|
|
54
|
+
@dependency_condition.operator = "#"
|
|
55
|
+
@dependency_condition.should have(1).error_on(:operator)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should evaluate within the context of a response set object" do
|
|
59
|
+
@response = Response.new(:question_id => 45, :response_set_id => 40, :answer_id => 23)
|
|
60
|
+
@response.answer = Answer.new(:question_id => 45, :response_class => "answer")
|
|
61
|
+
@response_set = ResponseSet.new()
|
|
62
|
+
@response_set.stub!(:find_response).and_return(@response)
|
|
63
|
+
@dependency_condition.evaluation_of(@response_set).should be_true
|
|
64
|
+
# inversion
|
|
65
|
+
@alt_response = Response.new(:question_id => 45, :response_set_id => 40, :answer_id => 55)
|
|
66
|
+
@alt_response.answer = Answer.new(:question_id => 45, :response_class => "answer")
|
|
67
|
+
@alt_resp_set = ResponseSet.new()
|
|
68
|
+
|
|
69
|
+
@alt_resp_set.stub!(:find_response).and_return(@alt_response)
|
|
70
|
+
@dependency_condition.evaluation_of(@alt_resp_set).should be_false
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should return false if there is no response set value that corresponds to the dependency condition" do
|
|
75
|
+
@empty_rs = mock(ResponseSet, :find_response => nil)
|
|
76
|
+
@dependency_condition.evaluation_of(@empty_rs).should be_false
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "when helping the dependency object determine state" do
|
|
80
|
+
|
|
81
|
+
it "returns its key as a symbol" do
|
|
82
|
+
@dependency_condition.symbol_key.should == @dependency_condition.rule_key.to_sym
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "converts to a hash for evaluation by the depedency object" do
|
|
86
|
+
@rs = mock(ResponseSet)
|
|
87
|
+
@dependency_condition.stub!(:evaluation_of).with(@rs)
|
|
88
|
+
@dependency_condition.to_evaluation_hash(@rs)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe DependencyCondition, "evaluting the resonse_set state" do
|
|
95
|
+
|
|
96
|
+
describe "when if given a response object whether the dependency is satisfied using '=='" do
|
|
97
|
+
before(:each) do
|
|
98
|
+
@dep_c = DependencyCondition.new(:answer_id => 2, :operator => "==")
|
|
99
|
+
@select_answer = Answer.new(:question_id => 1, :response_class => "answer")
|
|
100
|
+
@response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
|
|
101
|
+
@response.answer = @select_answer
|
|
102
|
+
@dep_c.answer = @select_answer
|
|
103
|
+
@dep_c.as(:answer).should == 2
|
|
104
|
+
@response.as(:answer).should == 2
|
|
105
|
+
@dep_c.as(:answer).should == @response.as(:answer)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "knows checkbox/radio type response" do
|
|
109
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
110
|
+
@dep_c.answer_id = 12
|
|
111
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "knows string value response" do
|
|
115
|
+
@select_answer.response_class = "string"
|
|
116
|
+
@response.string_value = "hello123"
|
|
117
|
+
@dep_c.string_value = "hello123"
|
|
118
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
119
|
+
@response.string_value = "foo_abc"
|
|
120
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "knows a text value response" do
|
|
124
|
+
@select_answer.response_class = "text"
|
|
125
|
+
@response.text_value = "hello this is some text for comparison"
|
|
126
|
+
@dep_c.text_value = "hello this is some text for comparison"
|
|
127
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
128
|
+
@response.text_value = "Not the same text"
|
|
129
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "knows an integer value response" do
|
|
133
|
+
@select_answer.response_class = "integer"
|
|
134
|
+
@response.integer_value = 10045
|
|
135
|
+
@dep_c.integer_value = 10045
|
|
136
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
137
|
+
@response.integer_value = 421
|
|
138
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "knows a float value response" do
|
|
142
|
+
@select_answer.response_class = "float"
|
|
143
|
+
@response.float_value = 121.1
|
|
144
|
+
@dep_c.float_value = 121.1
|
|
145
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
146
|
+
@response.float_value = 130.123
|
|
147
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
describe "when if given a response object whether the dependency is satisfied using '!='" do
|
|
153
|
+
before(:each) do
|
|
154
|
+
@dep_c = DependencyCondition.new(:answer_id => 2, :operator => "!=")
|
|
155
|
+
@select_answer = Answer.new(:question_id => 1, :response_class => "answer")
|
|
156
|
+
@response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
|
|
157
|
+
@response.answer = @select_answer
|
|
158
|
+
@dep_c.answer = @select_answer
|
|
159
|
+
@dep_c.as(:answer).should == 2
|
|
160
|
+
@response.as(:answer).should == 2
|
|
161
|
+
@dep_c.as(:answer).should == @response.as(:answer)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "knows checkbox/radio type response" do
|
|
165
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
166
|
+
@dep_c.answer_id = 12
|
|
167
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "knows string value response" do
|
|
171
|
+
@select_answer.response_class = "string"
|
|
172
|
+
@response.string_value = "hello123"
|
|
173
|
+
@dep_c.string_value = "hello123"
|
|
174
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
175
|
+
@response.string_value = "foo_abc"
|
|
176
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
it "knows a text value response" do
|
|
180
|
+
@select_answer.response_class = "text"
|
|
181
|
+
@response.text_value = "hello this is some text for comparison"
|
|
182
|
+
@dep_c.text_value = "hello this is some text for comparison"
|
|
183
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
184
|
+
@response.text_value = "Not the same text"
|
|
185
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it "knows an integer value response" do
|
|
189
|
+
@select_answer.response_class = "integer"
|
|
190
|
+
@response.integer_value = 10045
|
|
191
|
+
@dep_c.integer_value = 10045
|
|
192
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
193
|
+
@response.integer_value = 421
|
|
194
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "knows a float value response" do
|
|
198
|
+
@select_answer.response_class = "float"
|
|
199
|
+
@response.float_value = 121.1
|
|
200
|
+
@dep_c.float_value = 121.1
|
|
201
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
202
|
+
@response.float_value = 130.123
|
|
203
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe "when if given a response object whether the dependency is satisfied using '<'" do
|
|
209
|
+
before(:each) do
|
|
210
|
+
@dep_c = DependencyCondition.new(:answer_id => 2, :operator => "<")
|
|
211
|
+
@select_answer = Answer.new(:question_id => 1, :response_class => "answer")
|
|
212
|
+
@response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
|
|
213
|
+
@response.answer = @select_answer
|
|
214
|
+
@dep_c.answer = @select_answer
|
|
215
|
+
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
it "knows operator on integer value response" do
|
|
219
|
+
@select_answer.response_class = "integer"
|
|
220
|
+
@response.integer_value = 50
|
|
221
|
+
@dep_c.integer_value = 100
|
|
222
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
223
|
+
@response.integer_value = 421
|
|
224
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
it "knows operator on float value response" do
|
|
228
|
+
@select_answer.response_class = "float"
|
|
229
|
+
@response.float_value = 5.1
|
|
230
|
+
@dep_c.float_value = 121.1
|
|
231
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
232
|
+
@response.float_value = 130.123
|
|
233
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
describe "when if given a response object whether the dependency is satisfied using '<='" do
|
|
239
|
+
before(:each) do
|
|
240
|
+
@dep_c = DependencyCondition.new(:answer_id => 2, :operator => "<=")
|
|
241
|
+
@select_answer = Answer.new(:question_id => 1, :response_class => "answer")
|
|
242
|
+
@response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
|
|
243
|
+
@response.answer = @select_answer
|
|
244
|
+
@dep_c.answer = @select_answer
|
|
245
|
+
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "knows operator on integer value response" do
|
|
249
|
+
@select_answer.response_class = "integer"
|
|
250
|
+
@response.integer_value = 50
|
|
251
|
+
@dep_c.integer_value = 100
|
|
252
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
253
|
+
@response.integer_value = 100
|
|
254
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
255
|
+
@response.integer_value = 421
|
|
256
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
it "knows operator on float value response" do
|
|
260
|
+
@select_answer.response_class = "float"
|
|
261
|
+
@response.float_value = 5.1
|
|
262
|
+
@dep_c.float_value = 121.1
|
|
263
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
264
|
+
@response.float_value = 121.1
|
|
265
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
266
|
+
@response.float_value = 130.123
|
|
267
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
describe "when if given a response object whether the dependency is satisfied using '>'" do
|
|
273
|
+
before(:each) do
|
|
274
|
+
@dep_c = DependencyCondition.new(:answer_id => 2, :operator => ">")
|
|
275
|
+
@select_answer = Answer.new(:question_id => 1, :response_class => "answer")
|
|
276
|
+
@response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
|
|
277
|
+
@response.answer = @select_answer
|
|
278
|
+
@dep_c.answer = @select_answer
|
|
279
|
+
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
it "knows operator on integer value response" do
|
|
283
|
+
@select_answer.response_class = "integer"
|
|
284
|
+
@response.integer_value = 50
|
|
285
|
+
@dep_c.integer_value = 100
|
|
286
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
287
|
+
@response.integer_value = 421
|
|
288
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
it "knows operator on float value response" do
|
|
292
|
+
@select_answer.response_class = "float"
|
|
293
|
+
@response.float_value = 5.1
|
|
294
|
+
@dep_c.float_value = 121.1
|
|
295
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
296
|
+
@response.float_value = 130.123
|
|
297
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
describe "when if given a response object whether the dependency is satisfied using '>='" do
|
|
303
|
+
before(:each) do
|
|
304
|
+
@dep_c = DependencyCondition.new(:answer_id => 2, :operator => ">=")
|
|
305
|
+
@select_answer = Answer.new(:question_id => 1, :response_class => "answer")
|
|
306
|
+
@response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
|
|
307
|
+
@response.answer = @select_answer
|
|
308
|
+
@dep_c.answer = @select_answer
|
|
309
|
+
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
it "knows operator on integer value response" do
|
|
313
|
+
@select_answer.response_class = "integer"
|
|
314
|
+
@response.integer_value = 50
|
|
315
|
+
@dep_c.integer_value = 100
|
|
316
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
317
|
+
@response.integer_value = 100
|
|
318
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
319
|
+
@response.integer_value = 421
|
|
320
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
it "knows operator on float value response" do
|
|
324
|
+
@select_answer.response_class = "float"
|
|
325
|
+
@response.float_value = 5.1
|
|
326
|
+
@dep_c.float_value = 121.1
|
|
327
|
+
@dep_c.is_satisfied_by?(@response).should be_false
|
|
328
|
+
@response.float_value = 121.1
|
|
329
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
330
|
+
@response.float_value = 130.123
|
|
331
|
+
@dep_c.is_satisfied_by?(@response).should be_true
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
end
|
|
338
|
+
|