breakpointer-surveyor 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. data/.gitignore +6 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +20 -0
  4. data/Rakefile +57 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/answers_controller.rb +87 -0
  7. data/app/controllers/dependencies_controller.rb +87 -0
  8. data/app/controllers/dependency_conditions_controller.rb +87 -0
  9. data/app/controllers/questions_controller.rb +85 -0
  10. data/app/controllers/sections_controller.rb +87 -0
  11. data/app/controllers/surveying_controller.rb +139 -0
  12. data/app/controllers/surveys_controller.rb +87 -0
  13. data/app/helpers/answers_helper.rb +2 -0
  14. data/app/helpers/application_helper.rb +3 -0
  15. data/app/helpers/questions_helper.rb +2 -0
  16. data/app/helpers/sections_helper.rb +2 -0
  17. data/app/helpers/survey_form_builder.rb +38 -0
  18. data/app/helpers/survey_importer_helper.rb +2 -0
  19. data/app/helpers/surveying_helper.rb +91 -0
  20. data/app/helpers/surveys_helper.rb +2 -0
  21. data/app/models/answer.rb +18 -0
  22. data/app/models/dependency.rb +43 -0
  23. data/app/models/dependency_condition.rb +76 -0
  24. data/app/models/question.rb +44 -0
  25. data/app/models/question_group.rb +5 -0
  26. data/app/models/response.rb +58 -0
  27. data/app/models/response_set.rb +174 -0
  28. data/app/models/survey.rb +54 -0
  29. data/app/models/survey_section.rb +19 -0
  30. data/app/models/user.rb +5 -0
  31. data/app/views/answer_display_types/_any_answer.html.haml +3 -0
  32. data/app/views/answer_display_types/_any_other_and_string.html.haml +5 -0
  33. data/app/views/answer_display_types/_any_string.html.haml +4 -0
  34. data/app/views/answer_display_types/_date.html.haml +3 -0
  35. data/app/views/answer_display_types/_datetime.html.haml +2 -0
  36. data/app/views/answer_display_types/_default.html.haml +1 -0
  37. data/app/views/answer_display_types/_float.html.haml +5 -0
  38. data/app/views/answer_display_types/_grid_any_answer.html.haml +2 -0
  39. data/app/views/answer_display_types/_grid_default.html.haml +2 -0
  40. data/app/views/answer_display_types/_grid_float.html.haml +2 -0
  41. data/app/views/answer_display_types/_grid_integer.html.haml +2 -0
  42. data/app/views/answer_display_types/_grid_one_answer.html.haml +2 -0
  43. data/app/views/answer_display_types/_grid_string.html.haml +2 -0
  44. data/app/views/answer_display_types/_integer.html.haml +6 -0
  45. data/app/views/answer_display_types/_one_answer.html.haml +3 -0
  46. data/app/views/answer_display_types/_one_string.html.haml +6 -0
  47. data/app/views/answer_display_types/_repeater_integer.html.haml +6 -0
  48. data/app/views/answer_display_types/_repeater_string.html.haml +7 -0
  49. data/app/views/answer_display_types/_string.html.haml +7 -0
  50. data/app/views/answer_display_types/_text.html.haml +6 -0
  51. data/app/views/answer_display_types/_time.html.haml +2 -0
  52. data/app/views/layouts/surveys.html.erb +17 -0
  53. data/app/views/question_display_types/_default.html.haml +12 -0
  54. data/app/views/question_display_types/_dropdown.html.haml +12 -0
  55. data/app/views/question_display_types/_grid_default.html.haml +14 -0
  56. data/app/views/question_display_types/_grid_dropdown.html.haml +15 -0
  57. data/app/views/question_display_types/_group_default.html.haml +8 -0
  58. data/app/views/question_display_types/_group_dropdown.html.haml +6 -0
  59. data/app/views/question_display_types/_image.html.haml +2 -0
  60. data/app/views/question_display_types/_inline.html.haml +12 -0
  61. data/app/views/question_display_types/_label.html.haml +4 -0
  62. data/app/views/question_display_types/_repeater_default.html.haml +10 -0
  63. data/app/views/question_display_types/_repeater_dropdown.html.haml +8 -0
  64. data/app/views/question_display_types/_slider.html.haml +17 -0
  65. data/app/views/question_group_display_types/_default.html.haml +13 -0
  66. data/app/views/question_group_display_types/_grid.html.haml +24 -0
  67. data/app/views/question_group_display_types/_repeater.html.haml +20 -0
  68. data/app/views/surveying/edit.html.haml +38 -0
  69. data/app/views/surveying/finish.html.haml +1 -0
  70. data/app/views/surveying/index.html.erb +19 -0
  71. data/app/views/surveying/new.html.haml +17 -0
  72. data/app/views/surveying/show.html.haml +8 -0
  73. data/config/routes.rb +10 -0
  74. data/generators/surveyor/surveyor_generator.rb +38 -0
  75. data/generators/surveyor/templates/README +9 -0
  76. data/generators/surveyor/templates/assets/images/222222_11x11_icon_arrows_leftright.gif +0 -0
  77. data/generators/surveyor/templates/assets/images/222222_11x11_icon_arrows_updown.gif +0 -0
  78. data/generators/surveyor/templates/assets/images/222222_11x11_icon_close.gif +0 -0
  79. data/generators/surveyor/templates/assets/images/222222_11x11_icon_doc.gif +0 -0
  80. data/generators/surveyor/templates/assets/images/222222_11x11_icon_folder_closed.gif +0 -0
  81. data/generators/surveyor/templates/assets/images/222222_11x11_icon_folder_open.gif +0 -0
  82. data/generators/surveyor/templates/assets/images/222222_11x11_icon_minus.gif +0 -0
  83. data/generators/surveyor/templates/assets/images/222222_11x11_icon_plus.gif +0 -0
  84. data/generators/surveyor/templates/assets/images/222222_11x11_icon_resize_se.gif +0 -0
  85. data/generators/surveyor/templates/assets/images/222222_35x9_colorpicker_indicator.gif.gif +0 -0
  86. data/generators/surveyor/templates/assets/images/222222_7x7_arrow_down.gif +0 -0
  87. data/generators/surveyor/templates/assets/images/222222_7x7_arrow_left.gif +0 -0
  88. data/generators/surveyor/templates/assets/images/222222_7x7_arrow_right.gif +0 -0
  89. data/generators/surveyor/templates/assets/images/222222_7x7_arrow_up.gif +0 -0
  90. data/generators/surveyor/templates/assets/images/454545_11x11_icon_arrows_leftright.gif +0 -0
  91. data/generators/surveyor/templates/assets/images/454545_11x11_icon_arrows_updown.gif +0 -0
  92. data/generators/surveyor/templates/assets/images/454545_11x11_icon_close.gif +0 -0
  93. data/generators/surveyor/templates/assets/images/454545_11x11_icon_doc.gif +0 -0
  94. data/generators/surveyor/templates/assets/images/454545_11x11_icon_folder_closed.gif +0 -0
  95. data/generators/surveyor/templates/assets/images/454545_11x11_icon_folder_open.gif +0 -0
  96. data/generators/surveyor/templates/assets/images/454545_11x11_icon_minus.gif +0 -0
  97. data/generators/surveyor/templates/assets/images/454545_11x11_icon_plus.gif +0 -0
  98. data/generators/surveyor/templates/assets/images/454545_7x7_arrow_down.gif +0 -0
  99. data/generators/surveyor/templates/assets/images/454545_7x7_arrow_left.gif +0 -0
  100. data/generators/surveyor/templates/assets/images/454545_7x7_arrow_right.gif +0 -0
  101. data/generators/surveyor/templates/assets/images/454545_7x7_arrow_up.gif +0 -0
  102. data/generators/surveyor/templates/assets/images/888888_11x11_icon_arrows_leftright.gif +0 -0
  103. data/generators/surveyor/templates/assets/images/888888_11x11_icon_arrows_updown.gif +0 -0
  104. data/generators/surveyor/templates/assets/images/888888_11x11_icon_close.gif +0 -0
  105. data/generators/surveyor/templates/assets/images/888888_11x11_icon_doc.gif +0 -0
  106. data/generators/surveyor/templates/assets/images/888888_11x11_icon_folder_closed.gif +0 -0
  107. data/generators/surveyor/templates/assets/images/888888_11x11_icon_folder_open.gif +0 -0
  108. data/generators/surveyor/templates/assets/images/888888_11x11_icon_minus.gif +0 -0
  109. data/generators/surveyor/templates/assets/images/888888_11x11_icon_plus.gif +0 -0
  110. data/generators/surveyor/templates/assets/images/888888_7x7_arrow_down.gif +0 -0
  111. data/generators/surveyor/templates/assets/images/888888_7x7_arrow_left.gif +0 -0
  112. data/generators/surveyor/templates/assets/images/888888_7x7_arrow_right.gif +0 -0
  113. data/generators/surveyor/templates/assets/images/888888_7x7_arrow_up.gif +0 -0
  114. data/generators/surveyor/templates/assets/images/dadada_40x100_textures_02_glass_75.png +0 -0
  115. data/generators/surveyor/templates/assets/images/e6e6e6_40x100_textures_02_glass_75.png +0 -0
  116. data/generators/surveyor/templates/assets/images/ffffff_40x100_textures_01_flat_0.png +0 -0
  117. data/generators/surveyor/templates/assets/images/ffffff_40x100_textures_02_glass_65.png +0 -0
  118. data/generators/surveyor/templates/assets/javascripts/accessibleUISlider.jQuery.js +201 -0
  119. data/generators/surveyor/templates/assets/javascripts/jquery-1.2.6.js +3549 -0
  120. data/generators/surveyor/templates/assets/javascripts/jquery-ui-personalized-1.5.3.js +7616 -0
  121. data/generators/surveyor/templates/assets/javascripts/jquery.form.js +637 -0
  122. data/generators/surveyor/templates/assets/javascripts/surveyor.js +35 -0
  123. data/generators/surveyor/templates/assets/stylesheets/jquery-ui-slider-additions.css +71 -0
  124. data/generators/surveyor/templates/assets/stylesheets/reset.css +46 -0
  125. data/generators/surveyor/templates/assets/stylesheets/sass/surveyor.sass +321 -0
  126. data/generators/surveyor/templates/assets/stylesheets/surveyor.css +245 -0
  127. data/generators/surveyor/templates/assets/stylesheets/ui.theme.css +851 -0
  128. data/generators/surveyor/templates/migrate/create_answers.rb +46 -0
  129. data/generators/surveyor/templates/migrate/create_dependencies.rb +21 -0
  130. data/generators/surveyor/templates/migrate/create_dependency_conditions.rb +29 -0
  131. data/generators/surveyor/templates/migrate/create_question_groups.rb +18 -0
  132. data/generators/surveyor/templates/migrate/create_questions.rb +33 -0
  133. data/generators/surveyor/templates/migrate/create_response_sets.rb +22 -0
  134. data/generators/surveyor/templates/migrate/create_responses.rb +33 -0
  135. data/generators/surveyor/templates/migrate/create_survey_sections.rb +25 -0
  136. data/generators/surveyor/templates/migrate/create_surveys.rb +25 -0
  137. data/generators/surveyor/templates/surveys/kitchen_sink_survey.rb +201 -0
  138. data/init.rb +1 -0
  139. data/install.rb +1 -0
  140. data/lib/tasks/surveyor_tasks.rake +29 -0
  141. data/lib/tiny_code.rb +58 -0
  142. data/lib/user_manager.rb +9 -0
  143. data/lib/xml_formatter.rb +12 -0
  144. data/script/surveyor/answer.rb +84 -0
  145. data/script/surveyor/columnizer.rb +36 -0
  146. data/script/surveyor/dependency.rb +43 -0
  147. data/script/surveyor/dependency_condition.rb +74 -0
  148. data/script/surveyor/dslparse.rb +66 -0
  149. data/script/surveyor/question.rb +76 -0
  150. data/script/surveyor/question_group.rb +33 -0
  151. data/script/surveyor/specs/answer_spec.rb +66 -0
  152. data/script/surveyor/specs/question_dependency_spec.rb +46 -0
  153. data/script/surveyor/specs/question_group_spec.rb +9 -0
  154. data/script/surveyor/specs/question_spec.rb +111 -0
  155. data/script/surveyor/specs/section_spec.rb +58 -0
  156. data/script/surveyor/survey.rb +108 -0
  157. data/script/surveyor/survey_section.rb +153 -0
  158. data/script/surveyor/whr_dsl.tmproj +244 -0
  159. data/spec/controllers/answers_controller_spec.rb +64 -0
  160. data/spec/controllers/dependencies_controller_spec.rb +63 -0
  161. data/spec/controllers/dependency_conditions_controller_spec.rb +64 -0
  162. data/spec/controllers/questions_controller_spec.rb +64 -0
  163. data/spec/controllers/sections_controller_spec.rb +64 -0
  164. data/spec/controllers/surveying_controller_spec.rb +328 -0
  165. data/spec/controllers/surveying_routing_spec.rb +45 -0
  166. data/spec/controllers/surveys_controller_spec.rb +64 -0
  167. data/spec/fixtures/answers.yml +9 -0
  168. data/spec/fixtures/dependencies.yml +7 -0
  169. data/spec/fixtures/dependency_conditions.yml +27 -0
  170. data/spec/fixtures/question_groups.yml +7 -0
  171. data/spec/fixtures/questions.yml +15 -0
  172. data/spec/fixtures/response_sets.yml +13 -0
  173. data/spec/fixtures/responses.yml +9 -0
  174. data/spec/fixtures/survey_sections.yml +11 -0
  175. data/spec/fixtures/surveys.yml +9 -0
  176. data/spec/fixtures/users.yml +7 -0
  177. data/spec/helpers/survey_importer_helper_spec.rb +11 -0
  178. data/spec/helpers/surveying_helper_spec.rb +11 -0
  179. data/spec/models/answer_spec.rb +62 -0
  180. data/spec/models/dependency_condition_spec.rb +347 -0
  181. data/spec/models/dependency_spec.rb +82 -0
  182. data/spec/models/question_group_spec.rb +11 -0
  183. data/spec/models/question_spec.rb +70 -0
  184. data/spec/models/response_set_spec.rb +172 -0
  185. data/spec/models/response_spec.rb +94 -0
  186. data/spec/models/survey_section_spec.rb +34 -0
  187. data/spec/models/survey_spec.rb +72 -0
  188. data/spec/models/user_spec.rb +11 -0
  189. data/spec/rcov.opts +2 -0
  190. data/spec/spec.opts +4 -0
  191. data/spec/spec_helper.rb +72 -0
  192. data/spec/views/app/edit.html.erb_spec.rb +20 -0
  193. data/spec/views/app/index.html.erb_spec.rb +19 -0
  194. data/spec/views/app/new.html.erb_spec.rb +21 -0
  195. data/spec/views/app/show.html.erb_spec.rb +17 -0
  196. data/surveyor.gemspec +258 -0
  197. data/uninstall.rb +1 -0
  198. metadata +286 -0
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ question_id: 1
5
+ text: MyText
6
+
7
+ two:
8
+ question_id: 1
9
+ text: MyText
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ # one:
4
+ # column: value
5
+ #
6
+ # two:
7
+ # column: value
@@ -0,0 +1,27 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ dependency_id: 1
5
+ question_id: 1
6
+ answer_id: 1
7
+ operator: MyString
8
+ datetime_value: 2008-09-07 07:33:46
9
+ integer_value: 1
10
+ float_value: 1.5
11
+ unit: MyString
12
+ text_value: MyText
13
+ string_value: MyString
14
+ response_other: MyString
15
+
16
+ two:
17
+ dependency_id: 1
18
+ question_id: 1
19
+ answer_id: 1
20
+ operator: MyString
21
+ datetime_value: 2008-09-07 07:33:46
22
+ integer_value: 1
23
+ float_value: 1.5
24
+ unit: MyString
25
+ text_value: MyText
26
+ string_value: MyString
27
+ response_other: MyString
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ # one:
4
+ # column: value
5
+ #
6
+ # two:
7
+ # column: value
@@ -0,0 +1,15 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ survey_section_id: 1
5
+ display_group_id: 1
6
+ display_type: MyString
7
+ display_order: 1
8
+ text: MyText
9
+
10
+ two:
11
+ survey_section_id: 1
12
+ display_group_id: 1
13
+ display_type: MyString
14
+ display_order: 1
15
+ text: MyText
@@ -0,0 +1,13 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ user_id: 1
5
+ survey_id: 1
6
+ started_at: 2008-06-19 09:31:24
7
+ completed_at: 2008-06-19 09:31:24
8
+
9
+ two:
10
+ user_id: 1
11
+ survey_id: 1
12
+ started_at: 2008-06-19 09:31:24
13
+ completed_at: 2008-06-19 09:31:24
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ response_set_id: 1
5
+ question_id: 1
6
+
7
+ two:
8
+ response_set_id: 1
9
+ question_id: 1
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ survey_id: 1
5
+ title: MyString
6
+ description: MyText
7
+
8
+ two:
9
+ survey_id: 1
10
+ title: MyString
11
+ description: MyText
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ title: MyString
5
+ description: MyText
6
+
7
+ two:
8
+ title: MyString
9
+ description: MyText
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ name: MyString
5
+
6
+ two:
7
+ name: MyString
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe SurveyImporterHelper do
4
+
5
+ #Delete this example and add some real ones or delete this file
6
+ it "should be included in the object returned by #helper" do
7
+ included_modules = (class << helper; self; end).send :included_modules
8
+ included_modules.should include(SurveyImporterHelper)
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe SurveyingHelper do
4
+
5
+ #Delete this example and add some real ones or delete this file
6
+ it "should be included in the object returned by #helper" do
7
+ included_modules = (class << helper; self; end).send :included_modules
8
+ included_modules.should include(AppHelper)
9
+ end
10
+
11
+ end
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ # describe Answer, "validations" do
4
+ # test_helper :validations
5
+ # before(:each) do
6
+ # @model = @answer = Answer.new(:question_id => 1, :text => "Red")
7
+ # end
8
+ # it 'should validate presence of' do
9
+ # assert_invalid :text, "can't be blank", '', ' ', nil
10
+ # end
11
+ # it 'should validate numericality of' do
12
+ # assert_invalid :question_id, 'is not a number', '', ' ', nil
13
+ # assert_valid :question_id, '1', '2'
14
+ # assert_invalid :question_id, 'is not a number', 'abcd', '1,2', '1.3'
15
+ # end
16
+ # end
17
+ describe Answer, "when creating a new answer" do
18
+ before(:each) do
19
+ @q = mock_model(Question)
20
+ @answer = Answer.new(:question => @q, :text => "Red")
21
+ end
22
+
23
+ it "should be valid" do
24
+ @answer.should be_valid
25
+ end
26
+
27
+ it "should be invalid without a unique reference identifier (within the scope of its parent)" do
28
+ pending
29
+ end
30
+
31
+ it "should return its parent question" do
32
+ @answer.question_id.should == @q.id
33
+ @answer.question.should == @q
34
+ end
35
+
36
+ it "should have 'default' partial_name with nil question" do
37
+ @answer.question = nil
38
+ @answer.partial_name.should == "default"
39
+ end
40
+
41
+ it "should have 'default' partial_name with nil question.pick and response_class" do
42
+ @question=mock_model(Question, :pick => nil)
43
+ @answer.stub!(:question).and_return(@question)
44
+ @answer.response_class = nil
45
+ @answer.partial_name.should == "default"
46
+ end
47
+
48
+ it "should have a_b partial_name for a question.pick and b response_class_string" do
49
+ @question=mock_model(Question, :pick => "a")
50
+ @answer.stub!(:question).and_return(@question)
51
+ @answer.stub!(:response_class_string).and_return("b")
52
+ @answer.partial_name.should == "a_b"
53
+ end
54
+
55
+ it "should return a downcase response_class_string or nil" do
56
+ @answer.response_class = nil
57
+ @answer.response_class_string.should == nil
58
+ @answer.response_class = "CamelCase"
59
+ @answer.response_class_string.should == "camelcase"
60
+ end
61
+
62
+ end
@@ -0,0 +1,347 @@
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
+ DependencyCondition.respond_to?(:operators).should be_true
7
+ DependencyCondition.operators.class.should == Array
8
+ DependencyCondition.operators.size.should > 0
9
+
10
+ DependencyCondition.operators.include?("==").should be_true
11
+ DependencyCondition.operators.include?("!=").should be_true
12
+ DependencyCondition.operators.include?("<").should be_true
13
+ DependencyCondition.operators.include?(">").should be_true
14
+ DependencyCondition.operators.include?("<=").should be_true
15
+ DependencyCondition.operators.include?(">=").should be_true
16
+ end
17
+ end
18
+
19
+ describe DependencyCondition, "instance" do
20
+ before(:each) do
21
+ @dependency_condition = DependencyCondition.new(:dependency_id => 1, :question_id => 45, :operator => "==", :answer_id => 23, :rule_key => "1")
22
+ end
23
+
24
+ it "should be valid" do
25
+ @dependency_condition.should be_valid
26
+ end
27
+
28
+ it "should be invalid without a parent dependency_id, question_id, answer_id" do
29
+ @dependency_condition.dependency_id = nil
30
+ @dependency_condition.should have(1).errors_on(:dependency_id)
31
+ @dependency_condition.question_id = nil
32
+ @dependency_condition.should have(1).errors_on(:question_id)
33
+ @dependency_condition.answer_id = nil
34
+ @dependency_condition.should have(1).errors_on(:answer_id)
35
+ end
36
+
37
+ it "should be invalid without an operator" do
38
+ @dependency_condition.operator = nil
39
+ @dependency_condition.should have(2).errors_on(:operator)
40
+ end
41
+
42
+ it "should be invalid without a rule_key" do
43
+ @dependency_condition.should be_valid
44
+ @dependency_condition.rule_key = nil
45
+ @dependency_condition.should_not be_valid
46
+ @dependency_condition.should have(1).errors_on(:rule_key)
47
+ end
48
+
49
+ it "should have unique rule_key within the context of a dependency" do
50
+ @dependency_condition.should be_valid
51
+ DependencyCondition.create(:dependency_id => 2, :question_id => 46, :operator => "==", :answer_id => 14, :rule_key => "2")
52
+ @dependency_condition.rule_key = "2" #rule key uniquness is scoped by dependency_id
53
+ @dependency_condition.dependency_id = 2
54
+ @dependency_condition.should_not be_valid
55
+ @dependency_condition.should have(1).errors_on(:rule_key)
56
+ end
57
+
58
+ it "should have an operator in DependencyCondition.operators" do
59
+ DependencyCondition.operators.each do |o|
60
+ @dependency_condition.operator = o
61
+ @dependency_condition.should have(0).errors_on(:operator)
62
+ end
63
+ @dependency_condition.operator = "#"
64
+ @dependency_condition.should have(1).error_on(:operator)
65
+ end
66
+
67
+ it "should evaluate within the context of a response set object" do
68
+ @response = Response.new(:question_id => 45, :response_set_id => 40, :answer_id => 23)
69
+ @response.answer = Answer.new(:question_id => 45, :response_class => "answer")
70
+ @response_set = ResponseSet.new()
71
+ @response_set.stub!(:find_response).and_return(@response)
72
+ @dependency_condition.evaluation_of(@response_set).should be_true
73
+ # inversion
74
+ @alt_response = Response.new(:question_id => 45, :response_set_id => 40, :answer_id => 55)
75
+ @alt_response.answer = Answer.new(:question_id => 45, :response_class => "answer")
76
+ @alt_resp_set = ResponseSet.new()
77
+
78
+ @alt_resp_set.stub!(:find_response).and_return(@alt_response)
79
+ @dependency_condition.evaluation_of(@alt_resp_set).should be_false
80
+
81
+ end
82
+
83
+ it "should return false if there is no response set value that corresponds to the dependency condition" do
84
+ @empty_rs = mock(ResponseSet, :find_response => nil)
85
+ @dependency_condition.evaluation_of(@empty_rs).should be_false
86
+ end
87
+
88
+ describe "when helping the dependency object determine state" do
89
+
90
+ it "returns its key as a symbol" do
91
+ @dependency_condition.symbol_key.should == @dependency_condition.rule_key.to_sym
92
+ end
93
+
94
+ it "converts to a hash for evaluation by the depedency object" do
95
+ @rs = mock(ResponseSet)
96
+ @dependency_condition.stub!(:evaluation_of).with(@rs)
97
+ @dependency_condition.to_evaluation_hash(@rs)
98
+ end
99
+
100
+ end
101
+ end
102
+
103
+ describe DependencyCondition, "evaluting the resonse_set state" do
104
+
105
+ describe "when if given a response object whether the dependency is satisfied using '=='" do
106
+ before(:each) do
107
+ @dep_c = DependencyCondition.new(:answer_id => 2, :operator => "==")
108
+ @select_answer = Answer.new(:question_id => 1, :response_class => "answer")
109
+ @response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
110
+ @response.answer = @select_answer
111
+ @dep_c.answer = @select_answer
112
+ @dep_c.as(:answer).should == 2
113
+ @response.as(:answer).should == 2
114
+ @dep_c.as(:answer).should == @response.as(:answer)
115
+ end
116
+
117
+ it "knows checkbox/radio type response" do
118
+ @dep_c.is_satisfied_by?(@response).should be_true
119
+ @dep_c.answer_id = 12
120
+ @dep_c.is_satisfied_by?(@response).should be_false
121
+ end
122
+
123
+ it "knows string value response" do
124
+ @select_answer.response_class = "string"
125
+ @response.string_value = "hello123"
126
+ @dep_c.string_value = "hello123"
127
+ @dep_c.is_satisfied_by?(@response).should be_true
128
+ @response.string_value = "foo_abc"
129
+ @dep_c.is_satisfied_by?(@response).should be_false
130
+ end
131
+
132
+ it "knows a text value response" do
133
+ @select_answer.response_class = "text"
134
+ @response.text_value = "hello this is some text for comparison"
135
+ @dep_c.text_value = "hello this is some text for comparison"
136
+ @dep_c.is_satisfied_by?(@response).should be_true
137
+ @response.text_value = "Not the same text"
138
+ @dep_c.is_satisfied_by?(@response).should be_false
139
+ end
140
+
141
+ it "knows an integer value response" do
142
+ @select_answer.response_class = "integer"
143
+ @response.integer_value = 10045
144
+ @dep_c.integer_value = 10045
145
+ @dep_c.is_satisfied_by?(@response).should be_true
146
+ @response.integer_value = 421
147
+ @dep_c.is_satisfied_by?(@response).should be_false
148
+ end
149
+
150
+ it "knows a float value response" do
151
+ @select_answer.response_class = "float"
152
+ @response.float_value = 121.1
153
+ @dep_c.float_value = 121.1
154
+ @dep_c.is_satisfied_by?(@response).should be_true
155
+ @response.float_value = 130.123
156
+ @dep_c.is_satisfied_by?(@response).should be_false
157
+ end
158
+
159
+ end
160
+
161
+ describe "when if given a response object whether the dependency is satisfied using '!='" do
162
+ before(:each) do
163
+ @dep_c = DependencyCondition.new(:answer_id => 2, :operator => "!=")
164
+ @select_answer = Answer.new(:question_id => 1, :response_class => "answer")
165
+ @response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
166
+ @response.answer = @select_answer
167
+ @dep_c.answer = @select_answer
168
+ @dep_c.as(:answer).should == 2
169
+ @response.as(:answer).should == 2
170
+ @dep_c.as(:answer).should == @response.as(:answer)
171
+ end
172
+
173
+ it "knows checkbox/radio type response" do
174
+ @dep_c.is_satisfied_by?(@response).should be_false
175
+ @dep_c.answer_id = 12
176
+ @dep_c.is_satisfied_by?(@response).should be_true
177
+ end
178
+
179
+ it "knows string value response" do
180
+ @select_answer.response_class = "string"
181
+ @response.string_value = "hello123"
182
+ @dep_c.string_value = "hello123"
183
+ @dep_c.is_satisfied_by?(@response).should be_false
184
+ @response.string_value = "foo_abc"
185
+ @dep_c.is_satisfied_by?(@response).should be_true
186
+ end
187
+
188
+ it "knows a text value response" do
189
+ @select_answer.response_class = "text"
190
+ @response.text_value = "hello this is some text for comparison"
191
+ @dep_c.text_value = "hello this is some text for comparison"
192
+ @dep_c.is_satisfied_by?(@response).should be_false
193
+ @response.text_value = "Not the same text"
194
+ @dep_c.is_satisfied_by?(@response).should be_true
195
+ end
196
+
197
+ it "knows an integer value response" do
198
+ @select_answer.response_class = "integer"
199
+ @response.integer_value = 10045
200
+ @dep_c.integer_value = 10045
201
+ @dep_c.is_satisfied_by?(@response).should be_false
202
+ @response.integer_value = 421
203
+ @dep_c.is_satisfied_by?(@response).should be_true
204
+ end
205
+
206
+ it "knows a float value response" do
207
+ @select_answer.response_class = "float"
208
+ @response.float_value = 121.1
209
+ @dep_c.float_value = 121.1
210
+ @dep_c.is_satisfied_by?(@response).should be_false
211
+ @response.float_value = 130.123
212
+ @dep_c.is_satisfied_by?(@response).should be_true
213
+ end
214
+
215
+ end
216
+
217
+ describe "when if given a response object whether the dependency is satisfied using '<'" do
218
+ before(:each) do
219
+ @dep_c = DependencyCondition.new(:answer_id => 2, :operator => "<")
220
+ @select_answer = Answer.new(:question_id => 1, :response_class => "answer")
221
+ @response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
222
+ @response.answer = @select_answer
223
+ @dep_c.answer = @select_answer
224
+
225
+ end
226
+
227
+ it "knows operator on integer value response" do
228
+ @select_answer.response_class = "integer"
229
+ @response.integer_value = 50
230
+ @dep_c.integer_value = 100
231
+ @dep_c.is_satisfied_by?(@response).should be_true
232
+ @response.integer_value = 421
233
+ @dep_c.is_satisfied_by?(@response).should be_false
234
+ end
235
+
236
+ it "knows operator on float value response" do
237
+ @select_answer.response_class = "float"
238
+ @response.float_value = 5.1
239
+ @dep_c.float_value = 121.1
240
+ @dep_c.is_satisfied_by?(@response).should be_true
241
+ @response.float_value = 130.123
242
+ @dep_c.is_satisfied_by?(@response).should be_false
243
+ end
244
+
245
+ end
246
+
247
+ describe "when if given a response object whether the dependency is satisfied using '<='" do
248
+ before(:each) do
249
+ @dep_c = DependencyCondition.new(:answer_id => 2, :operator => "<=")
250
+ @select_answer = Answer.new(:question_id => 1, :response_class => "answer")
251
+ @response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
252
+ @response.answer = @select_answer
253
+ @dep_c.answer = @select_answer
254
+
255
+ end
256
+
257
+ it "knows operator on integer value response" do
258
+ @select_answer.response_class = "integer"
259
+ @response.integer_value = 50
260
+ @dep_c.integer_value = 100
261
+ @dep_c.is_satisfied_by?(@response).should be_true
262
+ @response.integer_value = 100
263
+ @dep_c.is_satisfied_by?(@response).should be_true
264
+ @response.integer_value = 421
265
+ @dep_c.is_satisfied_by?(@response).should be_false
266
+ end
267
+
268
+ it "knows operator on float value response" do
269
+ @select_answer.response_class = "float"
270
+ @response.float_value = 5.1
271
+ @dep_c.float_value = 121.1
272
+ @dep_c.is_satisfied_by?(@response).should be_true
273
+ @response.float_value = 121.1
274
+ @dep_c.is_satisfied_by?(@response).should be_true
275
+ @response.float_value = 130.123
276
+ @dep_c.is_satisfied_by?(@response).should be_false
277
+ end
278
+
279
+ end
280
+
281
+ describe "when if given a response object whether the dependency is satisfied using '>'" do
282
+ before(:each) do
283
+ @dep_c = DependencyCondition.new(:answer_id => 2, :operator => ">")
284
+ @select_answer = Answer.new(:question_id => 1, :response_class => "answer")
285
+ @response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
286
+ @response.answer = @select_answer
287
+ @dep_c.answer = @select_answer
288
+
289
+ end
290
+
291
+ it "knows operator on integer value response" do
292
+ @select_answer.response_class = "integer"
293
+ @response.integer_value = 50
294
+ @dep_c.integer_value = 100
295
+ @dep_c.is_satisfied_by?(@response).should be_false
296
+ @response.integer_value = 421
297
+ @dep_c.is_satisfied_by?(@response).should be_true
298
+ end
299
+
300
+ it "knows operator on float value response" do
301
+ @select_answer.response_class = "float"
302
+ @response.float_value = 5.1
303
+ @dep_c.float_value = 121.1
304
+ @dep_c.is_satisfied_by?(@response).should be_false
305
+ @response.float_value = 130.123
306
+ @dep_c.is_satisfied_by?(@response).should be_true
307
+ end
308
+
309
+ end
310
+
311
+ describe "when if given a response object whether the dependency is satisfied using '>='" do
312
+ before(:each) do
313
+ @dep_c = DependencyCondition.new(:answer_id => 2, :operator => ">=")
314
+ @select_answer = Answer.new(:question_id => 1, :response_class => "answer")
315
+ @response = Response.new(:question_id => 314, :response_set_id => 159, :answer_id => 2)
316
+ @response.answer = @select_answer
317
+ @dep_c.answer = @select_answer
318
+
319
+ end
320
+
321
+ it "knows operator on integer value response" do
322
+ @select_answer.response_class = "integer"
323
+ @response.integer_value = 50
324
+ @dep_c.integer_value = 100
325
+ @dep_c.is_satisfied_by?(@response).should be_false
326
+ @response.integer_value = 100
327
+ @dep_c.is_satisfied_by?(@response).should be_true
328
+ @response.integer_value = 421
329
+ @dep_c.is_satisfied_by?(@response).should be_true
330
+ end
331
+
332
+ it "knows operator on float value response" do
333
+ @select_answer.response_class = "float"
334
+ @response.float_value = 5.1
335
+ @dep_c.float_value = 121.1
336
+ @dep_c.is_satisfied_by?(@response).should be_false
337
+ @response.float_value = 121.1
338
+ @dep_c.is_satisfied_by?(@response).should be_true
339
+ @response.float_value = 130.123
340
+ @dep_c.is_satisfied_by?(@response).should be_true
341
+ end
342
+ end
343
+
344
+
345
+
346
+ end
347
+