surveyor_gui 0.0.3

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 (283) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +44 -0
  3. data/.travis.yml +17 -0
  4. data/Gemfile +7 -0
  5. data/LICENSE +21 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +159 -0
  8. data/Rakefile +66 -0
  9. data/app/controllers/answers_controller.rb +3 -0
  10. data/app/controllers/application_controller.rb +3 -0
  11. data/app/controllers/dependencys_controller.rb +286 -0
  12. data/app/controllers/question_groups_controller.rb +84 -0
  13. data/app/controllers/questions_controller.rb +187 -0
  14. data/app/controllers/survey_sections_controller.rb +80 -0
  15. data/app/controllers/surveyforms_controller.rb +4 -0
  16. data/app/controllers/surveyor_controller.rb +89 -0
  17. data/app/controllers/surveyor_gui/reports_controller.rb +339 -0
  18. data/app/controllers/surveyor_gui/responses_controller.rb +39 -0
  19. data/app/controllers/surveyor_gui/survey_controller.rb +16 -0
  20. data/app/facades/report_formatter.rb +44 -0
  21. data/app/facades/report_preview_wrapper.rb +11 -0
  22. data/app/facades/report_response_generator.rb +147 -0
  23. data/app/helpers/application_helper.rb +2 -0
  24. data/app/helpers/dependency_helper.rb +5 -0
  25. data/app/helpers/question_helper.rb +22 -0
  26. data/app/helpers/surveyform_helper.rb +179 -0
  27. data/app/helpers/surveyor_gui/report_helper.rb +19 -0
  28. data/app/helpers/surveyor_helper.rb +4 -0
  29. data/app/inputs/currency_input.rb +5 -0
  30. data/app/inputs/date_picker_input.rb +7 -0
  31. data/app/inputs/datetime_picker_input.rb +5 -0
  32. data/app/inputs/percent_input.rb +5 -0
  33. data/app/inputs/time_picker_input.rb +5 -0
  34. data/app/mailers/.gitkeep +0 -0
  35. data/app/models/.gitkeep +0 -0
  36. data/app/models/answer.rb +4 -0
  37. data/app/models/column.rb +3 -0
  38. data/app/models/dependency.rb +4 -0
  39. data/app/models/dependency_condition.rb +4 -0
  40. data/app/models/permitted_params_decorator.rb +80 -0
  41. data/app/models/question.rb +4 -0
  42. data/app/models/question_group.rb +4 -0
  43. data/app/models/question_type.rb +7 -0
  44. data/app/models/response.rb +4 -0
  45. data/app/models/response_set.rb +4 -0
  46. data/app/models/row.rb +3 -0
  47. data/app/models/survey.rb +4 -0
  48. data/app/models/survey_section.rb +4 -0
  49. data/app/models/surveyform.rb +103 -0
  50. data/app/uploaders/blob_uploader.rb +48 -0
  51. data/app/views/dependencys/_column.html.erb +1 -0
  52. data/app/views/dependencys/_dependency.html.erb +22 -0
  53. data/app/views/dependencys/_dependency_condition_fields.html.erb +48 -0
  54. data/app/views/dependencys/_form.html.erb +20 -0
  55. data/app/views/dependencys/blank.html.erb +0 -0
  56. data/app/views/dependencys/edit.html.erb +1 -0
  57. data/app/views/dependencys/new.html.erb +1 -0
  58. data/app/views/layouts/application.html.erb +14 -0
  59. data/app/views/layouts/surveyor_gui_blank.html.erb +12 -0
  60. data/app/views/layouts/surveyor_gui_default.html.erb +16 -0
  61. data/app/views/layouts/surveyor_modified.html.erb +14 -0
  62. data/app/views/partials/_answer.html.haml +33 -0
  63. data/app/views/partials/_question.html.haml +33 -0
  64. data/app/views/partials/_question_group.html.haml +73 -0
  65. data/app/views/partials/_section.html.haml +13 -0
  66. data/app/views/question_groups/_form.html.erb +56 -0
  67. data/app/views/question_groups/_group_inline_field.html.erb +21 -0
  68. data/app/views/question_groups/_group_inline_fields.html.erb +25 -0
  69. data/app/views/question_groups/blank.html.erb +0 -0
  70. data/app/views/question_groups/edit.html.erb +1 -0
  71. data/app/views/question_groups/new.html.erb +1 -0
  72. data/app/views/questions/_answer_fields.html.erb +23 -0
  73. data/app/views/questions/_answer_options.html.erb +28 -0
  74. data/app/views/questions/_form.html.erb +65 -0
  75. data/app/views/questions/_grid_dropdown_columns.html.erb +10 -0
  76. data/app/views/questions/_grid_dropdown_fields.html.erb +42 -0
  77. data/app/views/questions/_grid_fields.html.erb +9 -0
  78. data/app/views/questions/_no_picks.html.erb +29 -0
  79. data/app/views/questions/_pick.html +21 -0
  80. data/app/views/questions/_picks.html.erb +12 -0
  81. data/app/views/questions/blank.html.erb +0 -0
  82. data/app/views/questions/edit.html.erb +1 -0
  83. data/app/views/questions/new.html.erb +1 -0
  84. data/app/views/survey_sections/_form.html.erb +13 -0
  85. data/app/views/survey_sections/blank.html.erb +0 -0
  86. data/app/views/survey_sections/edit.html.erb +1 -0
  87. data/app/views/survey_sections/new.html.erb +1 -0
  88. data/app/views/surveyforms/_form.html.erb +50 -0
  89. data/app/views/surveyforms/_question_field.html.erb +148 -0
  90. data/app/views/surveyforms/_question_group.html.erb +116 -0
  91. data/app/views/surveyforms/_question_group_fields.html.erb +3 -0
  92. data/app/views/surveyforms/_question_name_and_number.html.erb +6 -0
  93. data/app/views/surveyforms/_question_section.html.erb +15 -0
  94. data/app/views/surveyforms/_question_wrapper.html.erb +109 -0
  95. data/app/views/surveyforms/_survey_section_fields.html.erb +138 -0
  96. data/app/views/surveyforms/clone_survey.html.erb +13 -0
  97. data/app/views/surveyforms/edit.html.erb +5 -0
  98. data/app/views/surveyforms/index.html.erb +40 -0
  99. data/app/views/surveyforms/new.html.erb +1 -0
  100. data/app/views/surveyforms/show.html.erb +5 -0
  101. data/app/views/surveyor_gui/reports/_graphs.html.haml +21 -0
  102. data/app/views/surveyor_gui/reports/_grid.html.haml +42 -0
  103. data/app/views/surveyor_gui/reports/_grid_dropdown.html.haml +56 -0
  104. data/app/views/surveyor_gui/reports/_repeater.html.haml +28 -0
  105. data/app/views/surveyor_gui/reports/_show_report.html.haml +33 -0
  106. data/app/views/surveyor_gui/reports/_single_question.html.haml +70 -0
  107. data/app/views/surveyor_gui/reports/show.html.erb +14 -0
  108. data/app/views/surveyor_gui/responses/_grid.html.haml +20 -0
  109. data/app/views/surveyor_gui/responses/_grid_dropdown.html.haml +20 -0
  110. data/app/views/surveyor_gui/responses/_repeater.html.haml +22 -0
  111. data/app/views/surveyor_gui/responses/_survey_results.html.haml +40 -0
  112. data/app/views/surveyor_gui/responses/index.html.haml +24 -0
  113. data/app/views/surveyor_gui/responses/show.html.haml +42 -0
  114. data/app/views/surveyor_gui/shared/_grid_comments.html.haml +10 -0
  115. data/app/views/surveyor_gui/shared/_new_line.html.haml +2 -0
  116. data/app/views/surveyor_gui/shared/_pick_comments.html.haml +15 -0
  117. data/app/views/surveyor_gui/shared/_question_number.html.haml +9 -0
  118. data/app/views/surveyor_gui/shared/_report_data.html.haml +24 -0
  119. data/app/views/surveyor_gui/shared/_stars_report_data.html.haml +14 -0
  120. data/config.ru +4 -0
  121. data/config/environment.rb +0 -0
  122. data/config/routes.rb +71 -0
  123. data/db/migrate/20140307204049_add_template_to_surveys.rb +5 -0
  124. data/db/migrate/20140307235607_add_test_data_to_response_sets.rb +5 -0
  125. data/db/migrate/20140308171947_add_original_choice_to_answers.rb +5 -0
  126. data/db/migrate/20140308172118_add_blob_to_responses.rb +5 -0
  127. data/db/migrate/20140308172417_add_modifiable_to_survey_section.rb +5 -0
  128. data/db/migrate/20140308174532_add_modifiable_to_question.rb +5 -0
  129. data/db/migrate/20140308175305_add_dynamically_generate_to_questions.rb +5 -0
  130. data/db/migrate/20140311032923_add_dummy_blob_to_questions.rb +5 -0
  131. data/db/migrate/20140311160609_add_dynamic_source_to_questions.rb +5 -0
  132. data/db/migrate/20140311161714_add_report_code_to_questions.rb +5 -0
  133. data/db/migrate/20140530181134_add_is_comment_to_questions.rb +5 -0
  134. data/db/migrate/20140531012006_add_is_comment_to_answers.rb +5 -0
  135. data/db/migrate/20140531225529_create_rows.rb +9 -0
  136. data/db/migrate/20140601011151_create_columns.rb +11 -0
  137. data/db/migrate/20140602030330_add_column_id_to_answers.rb +5 -0
  138. data/db/migrate/20140603155606_add_column_id_to_responses.rb +5 -0
  139. data/db/migrate/20140606023527_add_column_id_to_dependency_conditions.rb +5 -0
  140. data/db/migrate/20140815165307_add_user_id_to_survey.rb +5 -0
  141. data/lib/assets/.gitkeep +0 -0
  142. data/lib/assets/images/addicon.png +0 -0
  143. data/lib/assets/images/datepicker.gif +0 -0
  144. data/lib/assets/images/delete.gif +0 -0
  145. data/lib/assets/images/delete.png +0 -0
  146. data/lib/assets/images/images/border.png +0 -0
  147. data/lib/assets/images/images/controls.png +0 -0
  148. data/lib/assets/images/images/loading.gif +0 -0
  149. data/lib/assets/images/images/loading_background.png +0 -0
  150. data/lib/assets/images/images/overlay.png +0 -0
  151. data/lib/assets/images/rails.png +0 -0
  152. data/lib/assets/images/star.gif +0 -0
  153. data/lib/assets/javascripts/.gitkeep +0 -0
  154. data/lib/assets/javascripts/surveyor_gui/jquery.MetaData.js +121 -0
  155. data/lib/assets/javascripts/surveyor_gui/jquery.blockUI.js +619 -0
  156. data/lib/assets/javascripts/surveyor_gui/jquery.rating.js +377 -0
  157. data/lib/assets/javascripts/surveyor_gui/jquery.validate.js +1188 -0
  158. data/lib/assets/javascripts/surveyor_gui/surveyor_add_ons.js +10 -0
  159. data/lib/assets/javascripts/surveyor_gui/surveyor_gui.js +1417 -0
  160. data/lib/assets/stylesheets/.gitkeep +0 -0
  161. data/lib/assets/stylesheets/surveyor_gui/jquery.rating.css +12 -0
  162. data/lib/assets/stylesheets/surveyor_gui/surveyor_add_ons.css +3 -0
  163. data/lib/assets/stylesheets/surveyor_gui/surveyor_gui.sass +650 -0
  164. data/lib/enumerable_extenders.rb +31 -0
  165. data/lib/generators/surveyor_gui/install_generator.rb +57 -0
  166. data/lib/generators/surveyor_gui/templates/app/assets/javascripts/surveyor_add_ons.js +2 -0
  167. data/lib/generators/surveyor_gui/templates/app/assets/javascripts/surveyor_gui_all.js +24 -0
  168. data/lib/generators/surveyor_gui/templates/app/assets/stylesheets/surveyor_add_ons.css.sass +1 -0
  169. data/lib/generators/surveyor_gui/templates/app/assets/stylesheets/surveyor_gui_all.css.sass +8 -0
  170. data/lib/generators/surveyor_gui/templates/app/helpers/surveyor_helper.rb +4 -0
  171. data/lib/generators/surveyor_gui/templates/app/models/response_set_user.rb +13 -0
  172. data/lib/generators/surveyor_gui/templates/app/views/layouts/surveyor_gui_default.html.erb +16 -0
  173. data/lib/generators/surveyor_gui/templates/config/initializers/simple_form.rb +140 -0
  174. data/lib/generators/surveyor_gui/templates/config/locales/en.yml +5 -0
  175. data/lib/surveyor_gui.rb +17 -0
  176. data/lib/surveyor_gui/engine.rb +30 -0
  177. data/lib/surveyor_gui/helpers/surveyor_helper_methods.rb +19 -0
  178. data/lib/surveyor_gui/models/answer_methods.rb +24 -0
  179. data/lib/surveyor_gui/models/column_methods.rb +43 -0
  180. data/lib/surveyor_gui/models/dependency_condition_methods.rb +53 -0
  181. data/lib/surveyor_gui/models/dependency_methods.rb +83 -0
  182. data/lib/surveyor_gui/models/question_and_group_shared_methods.rb +11 -0
  183. data/lib/surveyor_gui/models/question_group_methods.rb +55 -0
  184. data/lib/surveyor_gui/models/question_methods.rb +435 -0
  185. data/lib/surveyor_gui/models/question_type_methods.rb +493 -0
  186. data/lib/surveyor_gui/models/response_methods.rb +67 -0
  187. data/lib/surveyor_gui/models/response_set_methods.rb +54 -0
  188. data/lib/surveyor_gui/models/row_methods.rb +11 -0
  189. data/lib/surveyor_gui/models/survey_methods.rb +32 -0
  190. data/lib/surveyor_gui/models/survey_section_methods.rb +32 -0
  191. data/lib/surveyor_gui/surveyforms_controller_methods.rb +258 -0
  192. data/lib/surveyor_gui/version.rb +3 -0
  193. data/lib/tasks/.gitkeep +0 -0
  194. data/lib/tasks/surveyor_gui_tasks.rake +4 -0
  195. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  196. data/spec/controllers/surveyforms_controller_spec.rb +361 -0
  197. data/spec/controllers/surveyor_controller_spec.rb +303 -0
  198. data/spec/factories.rb +181 -0
  199. data/spec/features/create_survey_spec.rb +418 -0
  200. data/spec/features/dependencies_spec.rb +61 -0
  201. data/spec/features/rearrange_survey_spec.rb +118 -0
  202. data/spec/features/ui_spec.rb +469 -0
  203. data/spec/fixtures/REDCapDemoDatabase_DataDictionary.csv +127 -0
  204. data/spec/fixtures/chinese_survey.rb +14 -0
  205. data/spec/fixtures/everything.rb +215 -0
  206. data/spec/fixtures/favorites-ish.rb +22 -0
  207. data/spec/fixtures/favorites.rb +22 -0
  208. data/spec/fixtures/feelings.rb +38 -0
  209. data/spec/fixtures/lifestyle.rb +55 -0
  210. data/spec/fixtures/numbers.rb +21 -0
  211. data/spec/fixtures/redcap_new_headers.csv +1 -0
  212. data/spec/fixtures/redcap_siblings.csv +1 -0
  213. data/spec/fixtures/redcap_whitespace.csv +1 -0
  214. data/spec/helpers/formtastic_custom_input_spec.rb +15 -0
  215. data/spec/helpers/surveyor_helper_spec.rb +116 -0
  216. data/spec/lib/common_spec.rb +37 -0
  217. data/spec/lib/parser_spec.rb +393 -0
  218. data/spec/lib/rake_kitchen_sink.rb +42 -0
  219. data/spec/lib/redcap_parser_spec.rb +129 -0
  220. data/spec/lib/unparser_spec.rb +126 -0
  221. data/spec/models/answer_spec.rb +144 -0
  222. data/spec/models/dependency_condition_spec.rb +428 -0
  223. data/spec/models/dependency_spec.rb +90 -0
  224. data/spec/models/question_group_spec.rb +66 -0
  225. data/spec/models/question_spec.rb +176 -0
  226. data/spec/models/response_set_spec.rb +452 -0
  227. data/spec/models/response_spec.rb +208 -0
  228. data/spec/models/survey_section_spec.rb +58 -0
  229. data/spec/models/survey_spec.rb +155 -0
  230. data/spec/models/surveyor_gui/question_spec.rb +60 -0
  231. data/spec/models/surveyor_gui/question_type_spec.rb +268 -0
  232. data/spec/models/validation_condition_spec.rb +98 -0
  233. data/spec/models/validation_spec.rb +64 -0
  234. data/spec/spec.opts +4 -0
  235. data/spec/spec_helper.rb +119 -0
  236. data/spec/support/scenario_outline_helper.rb +39 -0
  237. data/spec/support/shared.rb +10 -0
  238. data/spec/support/surveyforms_creation_helpers.rb +312 -0
  239. data/spec/support/surveyforms_rearrangement_helpers.rb +170 -0
  240. data/spec/support/surveyor_api_helpers.rb +15 -0
  241. data/spec/support/surveyor_ui_helpers.rb +108 -0
  242. data/spec/support/wait_for_ajax.rb +11 -0
  243. data/spec/views/questions/edit.html.erb_spec.rb +73 -0
  244. data/spec/views/surveyforms/edit.html.erb_spec.rb +126 -0
  245. data/surveyor_gui.gemspec +52 -0
  246. data/test/dummy/README.rdoc +261 -0
  247. data/test/dummy/Rakefile +7 -0
  248. data/test/dummy/app/assets/javascripts/application.js +15 -0
  249. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  250. data/test/dummy/app/controllers/application_controller.rb +3 -0
  251. data/test/dummy/app/helpers/application_helper.rb +2 -0
  252. data/test/dummy/app/mailers/.gitkeep +0 -0
  253. data/test/dummy/app/models/.gitkeep +0 -0
  254. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  255. data/test/dummy/config.ru +4 -0
  256. data/test/dummy/config/application.rb +59 -0
  257. data/test/dummy/config/boot.rb +10 -0
  258. data/test/dummy/config/database.yml +25 -0
  259. data/test/dummy/config/environment.rb +5 -0
  260. data/test/dummy/config/environments/development.rb +37 -0
  261. data/test/dummy/config/environments/production.rb +67 -0
  262. data/test/dummy/config/environments/test.rb +37 -0
  263. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  264. data/test/dummy/config/initializers/inflections.rb +15 -0
  265. data/test/dummy/config/initializers/mime_types.rb +5 -0
  266. data/test/dummy/config/initializers/secret_token.rb +7 -0
  267. data/test/dummy/config/initializers/session_store.rb +8 -0
  268. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  269. data/test/dummy/config/locales/en.yml +5 -0
  270. data/test/dummy/config/routes.rb +58 -0
  271. data/test/dummy/lib/assets/.gitkeep +0 -0
  272. data/test/dummy/log/.gitkeep +0 -0
  273. data/test/dummy/public/404.html +26 -0
  274. data/test/dummy/public/422.html +26 -0
  275. data/test/dummy/public/500.html +25 -0
  276. data/test/dummy/public/favicon.ico +0 -0
  277. data/test/dummy/script/rails +6 -0
  278. data/test/surveyor-gui_test.rb +7 -0
  279. data/test/test_helper.rb +15 -0
  280. data/vendor/assets/stylesheets/.gitkeep +0 -0
  281. data/vendor/assets/stylesheets/custom.sass +5 -0
  282. data/vendor/plugins/.gitkeep +0 -0
  283. metadata +664 -0
@@ -0,0 +1,19 @@
1
+ module SurveyorGui::ReportHelper
2
+
3
+ def question_should_display(q)
4
+ display=true
5
+ if q.dependency
6
+ q.dependency.dependency_conditions.each do |dc|
7
+ if Response.where(:question_id => dc.question_id).first && dc.answer_id != Response.where(:question_id => dc.question_id).first.answer_id
8
+ display=false
9
+ end
10
+ end
11
+ end
12
+ return display
13
+ end
14
+
15
+ def star_average(responses,q)
16
+ (responses.where(:question_id => q.id).where('integer_value > ?',0).collect(&:integer_value).average * 2).round
17
+ end
18
+
19
+ end
@@ -0,0 +1,4 @@
1
+ module SurveyorHelper
2
+ include Surveyor::Helpers::SurveyorHelperMethods
3
+ include SurveyorGui::Helpers::SurveyorGuiHelperMethods
4
+ end
@@ -0,0 +1,5 @@
1
+ class CurrencyInput < SimpleForm::Inputs::Base
2
+ def input
3
+ "$ #{@builder.text_field(attribute_name, input_html_options)}".html_safe
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class DatePickerInput < SimpleForm::Inputs::Base
2
+ def input
3
+ @builder.text_field(attribute_name,input_html_options)
4
+ end
5
+ end
6
+
7
+
@@ -0,0 +1,5 @@
1
+ class DatetimePickerInput < SimpleForm::Inputs::Base
2
+ def input
3
+ @builder.text_field(attribute_name,input_html_options)
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class PercentInput < SimpleForm::Inputs::Base
2
+ def input
3
+ "#{@builder.text_field(attribute_name, input_html_options)}%".html_safe
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class TimePickerInput < SimpleForm::Inputs::Base
2
+ def input
3
+ @builder.text_field(attribute_name,input_html_options)
4
+ end
5
+ end
File without changes
File without changes
@@ -0,0 +1,4 @@
1
+ class Answer < ActiveRecord::Base
2
+ include Surveyor::Models::AnswerMethods
3
+ include SurveyorGui::Models::AnswerMethods
4
+ end
@@ -0,0 +1,3 @@
1
+ class Column < ActiveRecord::Base
2
+ include SurveyorGui::Models::ColumnMethods
3
+ end
@@ -0,0 +1,4 @@
1
+ class Dependency < ActiveRecord::Base
2
+ include Surveyor::Models::DependencyMethods
3
+ include SurveyorGui::Models::DependencyMethods
4
+ end
@@ -0,0 +1,4 @@
1
+ class DependencyCondition < ActiveRecord::Base
2
+ include Surveyor::Models::DependencyConditionMethods
3
+ include SurveyorGui::Models::DependencyConditionMethods
4
+ end
@@ -0,0 +1,80 @@
1
+ PermittedParams.class_eval do
2
+
3
+
4
+ alias_method :base_answer_attributes, :answer_attributes
5
+ def answer_attributes
6
+ base_answer_attributes +
7
+ [:text, :response_class, :display_order, :original_choice, :hide_label,
8
+ :question_id, :display_type, :_destroy, :id, :is_comment, :comment]
9
+ end
10
+
11
+ alias_method :base_question_attributes, :question_attributes
12
+ def question_attributes
13
+ base_question_attributes +
14
+ [:question_type, :question_type_id, :survey_section_id, :question_group_id, :text,
15
+ :text_adjusted_for_group,
16
+ :pick, :reference_identifier, :display_order, :display_type, :is_mandatory,
17
+ :prefix, :suffix, :decimals, :dependency_attributes, :id,
18
+ :hide_label, :dummy_blob, :dynamically_generate, :dynamic_source,
19
+ :omit_text, :omit, :other, :other_text, :is_comment, :comments, :comments_text,
20
+ :modifiable, :report_code, :answers_textbox, :grid_columns_textbox, :_destroy,
21
+ :grid_rows_textbox, :dropdown_column_count, :dummy_answer, dummy_answer_array: [], question_group_attributes: [:id, :display_type, columns_attributes: column_attributes, questions_attributes: [:id, :pick, :display_order, :display_type, :text, :question_type_id, :_destroy]],
22
+ answers_attributes: answer_attributes,
23
+ dependency_attributes: dependency_attributes]
24
+ end
25
+
26
+ alias_method :base_dependency_attributes, :dependency_attributes
27
+ def dependency_attributes
28
+ base_dependency_attributes + [:id, dependency_conditions_attributes: dependency_condition_attributes]
29
+ end
30
+
31
+ alias_method :base_dependency_condition_attributes, :dependency_condition_attributes
32
+ def dependency_condition_attributes
33
+ base_dependency_condition_attributes +
34
+ [:id, :_destroy, :dependency_id, :rule_key, :question_id, :operator, :answer_id,
35
+ :float_value, :integer_value, :join_operator, :column_id, column_attributes: column_attributes]
36
+ end
37
+
38
+ alias_method :base_response_attributes, :response_attributes
39
+ def response_attributes
40
+ base_response_attributes +
41
+ [:response_set, :question, :answer, :date_value, :time_value,
42
+ :response_set_id, :question_id, :answer_id, :datetime_value,
43
+ :integer_value, :float_value, :unit, :text_value, :string_value,
44
+ :response_other, :response_group, :survey_section_id, :blob, :comment]
45
+ end
46
+
47
+ alias_method :base_response_set_attributes, :response_set_attributes
48
+ def response_set_attributes
49
+ base_response_set_attributes +
50
+ [:survey, :responses_attributes, :user_id, :survey_id, :test_data]
51
+ end
52
+
53
+ alias_method :base_survey_attributes, :survey_attributes
54
+ def survey_attributes
55
+ base_survey_attributes +
56
+ [:title, :access_code, :template, :id, :user_id,
57
+ survey_sections_attributes: survey_section_attributes]
58
+ end
59
+
60
+ alias_method :base_survey_section_attributes, :survey_section_attributes
61
+ def survey_section_attributes
62
+ base_survey_section_attributes +
63
+ [:title, :display_order, :questions_attributes, :survey_id, :modifiable,
64
+ :id, questions_attributes: question_attributes]
65
+ end
66
+ alias_method :base_question_group_attributes, :question_group_attributes
67
+ def question_group_attributes
68
+ base_question_group_attributes +
69
+ [:id, :question_type, :question_type_id, :question_id, :survey_section_id, :is_mandatory,
70
+ columns_attributes: column_attributes,
71
+ dependency_attributes: dependency_attributes,questions_attributes: question_attributes]
72
+ end
73
+ # column
74
+ def column
75
+ strong_parameters.permit(*column_attributes)
76
+ end
77
+ def column_attributes
78
+ [:id, :text, :question_group_id, :answers_textbox]
79
+ end
80
+ end
@@ -0,0 +1,4 @@
1
+ class Question < ActiveRecord::Base
2
+ include Surveyor::Models::QuestionMethods
3
+ include SurveyorGui::Models::QuestionMethods
4
+ end
@@ -0,0 +1,4 @@
1
+ class QuestionGroup < ActiveRecord::Base
2
+ include Surveyor::Models::QuestionGroupMethods
3
+ include SurveyorGui::Models::QuestionGroupMethods
4
+ end
@@ -0,0 +1,7 @@
1
+ class QuestionType
2
+ extend ActiveModel::Naming
3
+ include ActiveModel::Conversion
4
+
5
+ include SurveyorGui::Models::QuestionTypeMethods
6
+
7
+ end
@@ -0,0 +1,4 @@
1
+ class Response < ActiveRecord::Base
2
+ include Surveyor::Models::ResponseMethods
3
+ include SurveyorGui::Models::ResponseMethods
4
+ end
@@ -0,0 +1,4 @@
1
+ class ResponseSet < ActiveRecord::Base
2
+ include Surveyor::Models::ResponseSetMethods
3
+ include SurveyorGui::Models::ResponseSetMethods
4
+ end
@@ -0,0 +1,3 @@
1
+ class Row < ActiveRecord::Base
2
+ include SurveyorGui::Models::RowMethods
3
+ end
@@ -0,0 +1,4 @@
1
+ class Survey < ActiveRecord::Base
2
+ include Surveyor::Models::SurveyMethods
3
+ include SurveyorGui::Models::SurveyMethods
4
+ end
@@ -0,0 +1,4 @@
1
+ class SurveySection < ActiveRecord::Base
2
+ include Surveyor::Models::SurveySectionMethods
3
+ include SurveyorGui::Models::SurveySectionMethods
4
+ end
@@ -0,0 +1,103 @@
1
+ class Surveyform < Survey
2
+ def self.search(search)
3
+ search ? where('title LIKE ?', "%#{search}%") : all
4
+ end
5
+
6
+ def sort_as_per_array(serialized_sort_data)
7
+ question_sorter = QuestionSorter.new
8
+ _iterate_survey_sections(serialized_sort_data, question_sorter)
9
+ survey_section_questions = survey_sections.collect(&:questions)
10
+ question_sorter.rearrange(survey_section_questions)
11
+
12
+ end
13
+
14
+
15
+ def _iterate_survey_sections(serialized_sort_data, question_sorter)
16
+ # from data in the form of
17
+ # {"sortable_question<survey_section_id>": {
18
+ # <question_id>,
19
+ # <question_id>,
20
+ # etc.
21
+ # }
22
+ #
23
+ # build a hash in the form of
24
+ # {<question_id>: {
25
+ # "survey_section_id": <survey_section_id>,
26
+ # "display_order": <display_order>
27
+ # }
28
+ # }
29
+ serialized_sort_data.each do |(survey_section_identifier, questions)|
30
+ if survey_section_identifier.include? "sortable_question"
31
+ survey_section_id = /\d+/.match(survey_section_identifier).to_s
32
+ questions.delete("id") #for some reason, question groups introduce values of "id" into array.
33
+ _iterate_questions(questions, survey_section_id, question_sorter)
34
+ end
35
+ end
36
+ end
37
+
38
+ def _iterate_questions(questions, survey_section_id, question_sorter)
39
+ questions.each do |question_id|
40
+ question = Question.find(question_id.to_i)
41
+ if question.part_of_group?
42
+ _process_question_group(question, survey_section_id, question_sorter)
43
+ else
44
+ _process_individual_question(question, survey_section_id, question_sorter)
45
+ end
46
+ end
47
+ end
48
+
49
+ def _process_question_group(question, survey_section_id, question_sorter)
50
+ question_group = question.question_group
51
+ question_group.questions.each do |question|
52
+ _process_individual_question(question, survey_section_id, question_sorter)
53
+ end
54
+ end
55
+
56
+ def _process_individual_question(question, survey_section_id, question_sorter)
57
+ question_sorter.push(question.id.to_s, survey_section_id)
58
+ end
59
+
60
+ end
61
+
62
+ class QuestionSorter
63
+ def initialize
64
+ @sorting_hash = {}
65
+ @display_order = 0
66
+ @qoffset = 0
67
+ end
68
+
69
+ def push(id, survey_section_id)
70
+ @sorting_hash[id.to_s] = {survey_section_id: survey_section_id, display_order: @display_order}
71
+ _increment_display_order
72
+ end
73
+
74
+ def rearrange(survey_sections)
75
+ survey_sections.each do |survey_section|
76
+ survey_section.each do |question|
77
+ _update_question(survey_section, question)
78
+ end
79
+ end
80
+ end
81
+
82
+ private
83
+
84
+ def _increment_display_order
85
+ @display_order += 1
86
+ end
87
+
88
+ def _update_question(survey_section, question)
89
+ question_id = question.id.to_s
90
+
91
+ new_display_order = @sorting_hash[question_id][:display_order]
92
+ new_section_id = @sorting_hash[question_id][:survey_section_id].to_i
93
+ old_display_order = question.display_order
94
+ old_section_id = question.survey_section_id
95
+
96
+ if old_display_order != new_display_order || old_section_id != new_section_id
97
+ question.update_attributes!(
98
+ display_order: new_display_order,
99
+ survey_section_id: new_section_id
100
+ )
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ class BlobUploader < CarrierWave::Uploader::Base
4
+
5
+ # Include RMagick or ImageScience support:
6
+ # include CarrierWave::RMagick
7
+ # include CarrierWave::ImageScience
8
+
9
+ # Choose what kind of storage to use for this uploader:
10
+ # storage :file
11
+ storage :file
12
+
13
+ # Override the directory where uploaded files will be stored.
14
+ # This is a sensible default for uploaders that are meant to be mounted:
15
+ def store_dir
16
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
17
+ end
18
+
19
+ # Provide a default URL as a default if there hasn't been a file uploaded:
20
+ # def default_url
21
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
22
+ # end
23
+
24
+ # Process files as they are uploaded:
25
+ # process :scale => [200, 300]
26
+ #
27
+ # def scale(width, height)
28
+ # # do something
29
+ # end
30
+
31
+ # Create different versions of your uploaded files:
32
+ # version :thumb do
33
+ # process :scale => [50, 50]
34
+ # end
35
+
36
+ # Add a white list of extensions which are allowed to be uploaded.
37
+ # For images you might use something like this:
38
+ # def extension_white_list
39
+ # %w(jpg jpeg gif png)
40
+ # end
41
+
42
+ # Override the filename of the uploaded files:
43
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
44
+ # def filename
45
+ # "something.jpg" if original_filename
46
+ # end
47
+
48
+ end
@@ -0,0 +1 @@
1
+ <%= c.input :column_id, label: false, :collection => d.object.question_group ? d.object.question_group.columns : [["",""]], wrapper_html: {class: "fl not_first"} %>
@@ -0,0 +1,22 @@
1
+ <%= f.simple_fields_for :dependency do |d| %>
2
+ <%= d.hidden_field :question_id %>
3
+ <%= d.hidden_field :question_group_id %>
4
+ <%= d.hidden_field :rule %>
5
+ <div>
6
+ Show the question, "<%= @this_question %>", when the following conditions are true:<br /><br />
7
+ <table>
8
+ <thead>
9
+ <tr>
10
+ <td>Question</td><td>Condition</td><td>Answer</td>
11
+ </tr>
12
+ </thead>
13
+ <tbody id="dependency_conditions_partial" data-question_id="<%= @question.id.to_s %>" data-dependency_id="<%= d.object.id.to_s %>"></tbody>
14
+ </table>
15
+ <p class="floatdown2 add_condition">
16
+ Add a Condition <%= image_tag 'addicon.png', :border => 0 %>
17
+ </p>
18
+ </div>
19
+ <% end -%>
20
+ <br /><br />
21
+ <%= f.button :submit, 'Save Changes', :id=>'dependency_submit' %>
22
+
@@ -0,0 +1,48 @@
1
+ <%= simple_fields_for @question_or_group do |f| %>
2
+ <%= f.simple_fields_for :dependency do |d| %>
3
+ <%= d.simple_fields_for :dependency_conditions do |c| %>
4
+ <tr style='display:block;'>
5
+ <td colspan='3' talign='center'>
6
+ <%= c.input :join_operator, :label=> false, :collection => [['And','and'],['Or','or']], :include_blank => false %>
7
+ </td>
8
+ </tr>
9
+ <tr>
10
+ <%= c.hidden_field :rule_key %>
11
+ <%= c.hidden_field :id %>
12
+ <td>
13
+ <%= c.input :question_id, :collection => @controlling_questions, :label=>false, :include_blank => false, :input_html => {:style=>"max-width:38em;"} %>
14
+ <div class="column_id">
15
+ <%= render "column", c: c, d: d %>
16
+ </div>
17
+ </td>
18
+ <td>
19
+ <%= c.input :operator, :collection => @operators, :label=>false, :include_blank => false %>
20
+ </td>
21
+ <td class='answer_field'>
22
+ <div class="dependency_text">
23
+ <%= c.input :string_value, :label=>false, :size=>8 %>
24
+ </div>
25
+ <div class="dependency_text_box">
26
+ <%= c.input :text_value, :label=>false, :size=>8 %>
27
+ </div>
28
+ <div class="dependency_float">
29
+ <%= c.input :float_value, :label=>false, :size=>8 %>
30
+ </div>
31
+ <div class="dependency_date">
32
+ <%= c.input :datetime_value, :label=>false, :size=>8 %>
33
+ </div>
34
+ <div class="dependency_star">
35
+ <%= c.input :integer_value, label: false, :collection => [[nil,1],[nil,2],[nil,3],[nil,4],[nil,5]], :as => :radio_buttons, :input_html=>{:class=>'star'} %>
36
+ </div>
37
+ <div class="dependency_pick_multiple_choice">
38
+ <%= c.input :answer_id, :collection => Answer.where('question_id=?',c.object.question_id).map{|a| [a.text,a.id]}, :label=>false, :include_blank => false, :input_html => {:style=>"max-width:18em;"} %>
39
+ </div>
40
+ </td>
41
+ <td>
42
+ <%= link_to_remove_tbody "remove", c %>
43
+ </td>
44
+ </tr>
45
+
46
+ <% end -%>
47
+ <% end -%>
48
+ <% end -%>