ccls-ccls_engine 3.11.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 (269) hide show
  1. data/README.rdoc +182 -0
  2. data/app/models/abstract.rb +181 -0
  3. data/app/models/abstract_search.rb +50 -0
  4. data/app/models/abstract_validations.rb +324 -0
  5. data/app/models/address.rb +70 -0
  6. data/app/models/address_type.rb +15 -0
  7. data/app/models/addressing.rb +147 -0
  8. data/app/models/aliquot.rb +44 -0
  9. data/app/models/aliquot_sample_format.rb +13 -0
  10. data/app/models/analysis.rb +14 -0
  11. data/app/models/bc_request.rb +20 -0
  12. data/app/models/candidate_control.rb +101 -0
  13. data/app/models/context.rb +23 -0
  14. data/app/models/context_data_source.rb +4 -0
  15. data/app/models/county.rb +16 -0
  16. data/app/models/data_source.rb +24 -0
  17. data/app/models/diagnosis.rb +23 -0
  18. data/app/models/document_type.rb +16 -0
  19. data/app/models/document_version.rb +27 -0
  20. data/app/models/enrollment.rb +78 -0
  21. data/app/models/enrollment_validations.rb +167 -0
  22. data/app/models/follow_up.rb +16 -0
  23. data/app/models/follow_up_type.rb +18 -0
  24. data/app/models/gift_card.rb +22 -0
  25. data/app/models/gift_card_search.rb +137 -0
  26. data/app/models/home_exposure_response.rb +24 -0
  27. data/app/models/homex_outcome.rb +75 -0
  28. data/app/models/hospital.rb +22 -0
  29. data/app/models/icf_master_id.rb +30 -0
  30. data/app/models/icf_master_tracker.rb +217 -0
  31. data/app/models/icf_master_tracker_change.rb +9 -0
  32. data/app/models/icf_master_tracker_update.rb +50 -0
  33. data/app/models/ineligible_reason.rb +26 -0
  34. data/app/models/instrument.rb +26 -0
  35. data/app/models/instrument_type.rb +17 -0
  36. data/app/models/instrument_version.rb +28 -0
  37. data/app/models/interview.rb +122 -0
  38. data/app/models/interview_method.rb +17 -0
  39. data/app/models/interview_outcome.rb +16 -0
  40. data/app/models/language.rb +28 -0
  41. data/app/models/live_birth_data_update.rb +142 -0
  42. data/app/models/operational_event.rb +99 -0
  43. data/app/models/operational_event_type.rb +31 -0
  44. data/app/models/organization.rb +28 -0
  45. data/app/models/patient.rb +63 -0
  46. data/app/models/patient_validations.rb +118 -0
  47. data/app/models/person.rb +28 -0
  48. data/app/models/phone_number.rb +105 -0
  49. data/app/models/phone_type.rb +15 -0
  50. data/app/models/project.rb +39 -0
  51. data/app/models/project_outcome.rb +19 -0
  52. data/app/models/race.rb +31 -0
  53. data/app/models/refusal_reason.rb +23 -0
  54. data/app/models/sample.rb +168 -0
  55. data/app/models/sample_kit.rb +14 -0
  56. data/app/models/sample_outcome.rb +16 -0
  57. data/app/models/sample_temperature.rb +14 -0
  58. data/app/models/sample_type.rb +37 -0
  59. data/app/models/search.rb +195 -0
  60. data/app/models/section.rb +18 -0
  61. data/app/models/state.rb +25 -0
  62. data/app/models/study_subject.rb +237 -0
  63. data/app/models/study_subject_abstracts.rb +47 -0
  64. data/app/models/study_subject_addresses.rb +34 -0
  65. data/app/models/study_subject_associations.rb +38 -0
  66. data/app/models/study_subject_duplicates.rb +111 -0
  67. data/app/models/study_subject_enrollments.rb +17 -0
  68. data/app/models/study_subject_homex_outcome.rb +22 -0
  69. data/app/models/study_subject_identifier.rb +153 -0
  70. data/app/models/study_subject_interviews.rb +25 -0
  71. data/app/models/study_subject_languages.rb +21 -0
  72. data/app/models/study_subject_operational_events.rb +66 -0
  73. data/app/models/study_subject_patient.rb +177 -0
  74. data/app/models/study_subject_pii.rb +74 -0
  75. data/app/models/study_subject_races.rb +25 -0
  76. data/app/models/study_subject_search.rb +260 -0
  77. data/app/models/study_subject_validations.rb +116 -0
  78. data/app/models/subject_language.rb +11 -0
  79. data/app/models/subject_race.rb +11 -0
  80. data/app/models/subject_relationship.rb +21 -0
  81. data/app/models/subject_type.rb +22 -0
  82. data/app/models/tracing_status.rb +20 -0
  83. data/app/models/transfer.rb +40 -0
  84. data/app/models/unit.rb +14 -0
  85. data/app/models/vital_status.rb +19 -0
  86. data/app/models/zip_code.rb +36 -0
  87. data/config/abstract_fields.yml +1038 -0
  88. data/config/abstract_sections.yml +77 -0
  89. data/config/home_exposure_response_fields.yml +583 -0
  90. data/config/icf_master_tracker_update.yml +56 -0
  91. data/config/live_birth_data_update.yml +56 -0
  92. data/config/shared_use_db.yml +4 -0
  93. data/generators/ccls_engine/USAGE +2 -0
  94. data/generators/ccls_engine/ccls_engine_generator.rb +123 -0
  95. data/generators/ccls_engine/templates/autotest_ccls_engine.rb +3 -0
  96. data/generators/ccls_engine/templates/ccls_engine.rake +12 -0
  97. data/generators/ccls_engine/templates/fixtures/address_types.yml +30 -0
  98. data/generators/ccls_engine/templates/fixtures/context_data_sources.yml +54 -0
  99. data/generators/ccls_engine/templates/fixtures/contexts.yml +19 -0
  100. data/generators/ccls_engine/templates/fixtures/data_sources.yml +40 -0
  101. data/generators/ccls_engine/templates/fixtures/diagnoses.yml +40 -0
  102. data/generators/ccls_engine/templates/fixtures/document_types.yml +65 -0
  103. data/generators/ccls_engine/templates/fixtures/document_versions.csv +155 -0
  104. data/generators/ccls_engine/templates/fixtures/follow_up_types.yml +16 -0
  105. data/generators/ccls_engine/templates/fixtures/hospitals.yml +114 -0
  106. data/generators/ccls_engine/templates/fixtures/ineligible_reasons.yml +35 -0
  107. data/generators/ccls_engine/templates/fixtures/instrument_types.yml +26 -0
  108. data/generators/ccls_engine/templates/fixtures/instrument_versions.yml +22 -0
  109. data/generators/ccls_engine/templates/fixtures/instruments.yml +22 -0
  110. data/generators/ccls_engine/templates/fixtures/interview_methods.yml +30 -0
  111. data/generators/ccls_engine/templates/fixtures/interview_outcomes.yml +31 -0
  112. data/generators/ccls_engine/templates/fixtures/languages.yml +34 -0
  113. data/generators/ccls_engine/templates/fixtures/operational_event_types.yml +141 -0
  114. data/generators/ccls_engine/templates/fixtures/organizations.yml +198 -0
  115. data/generators/ccls_engine/templates/fixtures/people.yml +130 -0
  116. data/generators/ccls_engine/templates/fixtures/phone_types.yml +30 -0
  117. data/generators/ccls_engine/templates/fixtures/project_outcomes.yml +25 -0
  118. data/generators/ccls_engine/templates/fixtures/projects.yml +59 -0
  119. data/generators/ccls_engine/templates/fixtures/races.yml +52 -0
  120. data/generators/ccls_engine/templates/fixtures/refusal_reasons.yml +55 -0
  121. data/generators/ccls_engine/templates/fixtures/sample_outcomes.yml +36 -0
  122. data/generators/ccls_engine/templates/fixtures/sample_temperatures.yml +16 -0
  123. data/generators/ccls_engine/templates/fixtures/sample_types.yml +147 -0
  124. data/generators/ccls_engine/templates/fixtures/sections.yml +31 -0
  125. data/generators/ccls_engine/templates/fixtures/states.yml +363 -0
  126. data/generators/ccls_engine/templates/fixtures/subject_relationships.yml +46 -0
  127. data/generators/ccls_engine/templates/fixtures/subject_types.yml +30 -0
  128. data/generators/ccls_engine/templates/fixtures/tracing_statuses.yml +30 -0
  129. data/generators/ccls_engine/templates/fixtures/units.yml +13 -0
  130. data/generators/ccls_engine/templates/fixtures/vital_statuses.yml +28 -0
  131. data/generators/ccls_engine/templates/functional/roles_controller_test.rb +142 -0
  132. data/generators/ccls_engine/templates/functional/sessions_controller_test.rb +19 -0
  133. data/generators/ccls_engine/templates/functional/users_controller_test.rb +94 -0
  134. data/generators/ccls_engine/templates/images/sort_down.png +0 -0
  135. data/generators/ccls_engine/templates/images/sort_up.png +0 -0
  136. data/generators/ccls_engine/templates/initializer.rb +28 -0
  137. data/generators/ccls_engine/templates/javascripts/ccls_engine.js +24 -0
  138. data/generators/ccls_engine/templates/javascripts/jquery-ui.js +763 -0
  139. data/generators/ccls_engine/templates/javascripts/jquery.js +154 -0
  140. data/generators/ccls_engine/templates/javascripts/jrails.js +1 -0
  141. data/generators/ccls_engine/templates/migrations/create_user_invitations.rb +18 -0
  142. data/generators/ccls_engine/templates/migrations/create_users.rb +33 -0
  143. data/generators/ccls_engine/templates/migrations/drop_user_invitations.rb +18 -0
  144. data/generators/ccls_engine/templates/stylesheets/ccls_engine.css +180 -0
  145. data/generators/ccls_engine/templates/stylesheets/user.css +35 -0
  146. data/generators/ccls_engine/templates/stylesheets/users.css +23 -0
  147. data/generators/ccls_engine/templates/unit/core_extension_test.rb +18 -0
  148. data/generators/ccls_engine/templates/unit/role_test.rb +30 -0
  149. data/generators/ccls_engine/templates/unit/user_test.rb +321 -0
  150. data/lib/ccls-ccls_engine.rb +1 -0
  151. data/lib/ccls_engine.rb +135 -0
  152. data/lib/ccls_engine/action_view_extension.rb +3 -0
  153. data/lib/ccls_engine/action_view_extension/base.rb +53 -0
  154. data/lib/ccls_engine/action_view_extension/form_builder.rb +39 -0
  155. data/lib/ccls_engine/active_record_extension.rb +2 -0
  156. data/lib/ccls_engine/active_record_extension/base.rb +70 -0
  157. data/lib/ccls_engine/active_record_shared.rb +8 -0
  158. data/lib/ccls_engine/assertions.rb +69 -0
  159. data/lib/ccls_engine/autotest.rb +54 -0
  160. data/lib/ccls_engine/ccls_user.rb +117 -0
  161. data/lib/ccls_engine/core_extension.rb +14 -0
  162. data/lib/ccls_engine/date_and_time_formats.rb +30 -0
  163. data/lib/ccls_engine/factories.rb +880 -0
  164. data/lib/ccls_engine/factory_test_helper.rb +276 -0
  165. data/lib/ccls_engine/helper.rb +112 -0
  166. data/lib/ccls_engine/icf_master_tracker_update_test_helper.rb +121 -0
  167. data/lib/ccls_engine/live_birth_data_update_test_helper.rb +110 -0
  168. data/lib/ccls_engine/package_test_helper.rb +49 -0
  169. data/lib/ccls_engine/shared_database.rb +20 -0
  170. data/lib/ccls_engine/tasks.rb +1 -0
  171. data/lib/ccls_engine/test_tasks.rb +52 -0
  172. data/lib/ccls_engine/translation_table.rb +86 -0
  173. data/lib/shared_migration.rb +5 -0
  174. data/lib/surveyor/survey_extensions.rb +125 -0
  175. data/lib/tasks/application.rake +286 -0
  176. data/lib/tasks/calnet_authenticated.rake +6 -0
  177. data/lib/tasks/common_lib.rake +7 -0
  178. data/lib/tasks/database.rake +288 -0
  179. data/lib/tasks/documentation.rake +71 -0
  180. data/lib/tasks/homex_import.rake +723 -0
  181. data/lib/tasks/odms_import.rake +1116 -0
  182. data/lib/tasks/simply_authorized.rake +6 -0
  183. data/lib/tasks/ucb_ccls_engine_tasks.rake +4 -0
  184. data/lib/tasks/use_db.rake +4 -0
  185. data/rails/init.rb +4 -0
  186. data/test/unit/ccls/abstract_search_test.rb +150 -0
  187. data/test/unit/ccls/abstract_test.rb +674 -0
  188. data/test/unit/ccls/address_test.rb +155 -0
  189. data/test/unit/ccls/address_type_test.rb +25 -0
  190. data/test/unit/ccls/addressing_test.rb +466 -0
  191. data/test/unit/ccls/aliquot_sample_format_test.rb +20 -0
  192. data/test/unit/ccls/aliquot_test.rb +156 -0
  193. data/test/unit/ccls/analysis_test.rb +31 -0
  194. data/test/unit/ccls/bc_request_test.rb +43 -0
  195. data/test/unit/ccls/candidate_control_test.rb +712 -0
  196. data/test/unit/ccls/context_data_source_test.rb +26 -0
  197. data/test/unit/ccls/context_test.rb +40 -0
  198. data/test/unit/ccls/core_extension_test.rb +17 -0
  199. data/test/unit/ccls/county_test.rb +34 -0
  200. data/test/unit/ccls/data_source_test.rb +41 -0
  201. data/test/unit/ccls/diagnosis_test.rb +51 -0
  202. data/test/unit/ccls/document_type_test.rb +35 -0
  203. data/test/unit/ccls/document_version_test.rb +68 -0
  204. data/test/unit/ccls/enrollment_test.rb +575 -0
  205. data/test/unit/ccls/follow_up_test.rb +23 -0
  206. data/test/unit/ccls/follow_up_type_test.rb +34 -0
  207. data/test/unit/ccls/gift_card_search_test.rb +153 -0
  208. data/test/unit/ccls/gift_card_test.rb +40 -0
  209. data/test/unit/ccls/home_exposure_response_test.rb +83 -0
  210. data/test/unit/ccls/homex_outcome_test.rb +199 -0
  211. data/test/unit/ccls/hospital_test.rb +102 -0
  212. data/test/unit/ccls/icf_master_id_test.rb +30 -0
  213. data/test/unit/ccls/icf_master_tracker_change_test.rb +14 -0
  214. data/test/unit/ccls/icf_master_tracker_test.rb +132 -0
  215. data/test/unit/ccls/icf_master_tracker_update_test.rb +176 -0
  216. data/test/unit/ccls/ineligible_reason_test.rb +48 -0
  217. data/test/unit/ccls/instrument_test.rb +62 -0
  218. data/test/unit/ccls/instrument_type_test.rb +39 -0
  219. data/test/unit/ccls/instrument_version_test.rb +71 -0
  220. data/test/unit/ccls/interview_method_test.rb +44 -0
  221. data/test/unit/ccls/interview_outcome_test.rb +34 -0
  222. data/test/unit/ccls/interview_test.rb +298 -0
  223. data/test/unit/ccls/language_test.rb +47 -0
  224. data/test/unit/ccls/live_birth_data_update_test.rb +358 -0
  225. data/test/unit/ccls/operational_event_test.rb +187 -0
  226. data/test/unit/ccls/operational_event_type_test.rb +51 -0
  227. data/test/unit/ccls/organization_test.rb +64 -0
  228. data/test/unit/ccls/patient_test.rb +538 -0
  229. data/test/unit/ccls/person_test.rb +55 -0
  230. data/test/unit/ccls/phone_number_test.rb +244 -0
  231. data/test/unit/ccls/phone_type_test.rb +32 -0
  232. data/test/unit/ccls/project_outcome_test.rb +34 -0
  233. data/test/unit/ccls/project_test.rb +60 -0
  234. data/test/unit/ccls/race_test.rb +37 -0
  235. data/test/unit/ccls/refusal_reason_test.rb +52 -0
  236. data/test/unit/ccls/role_test.rb +26 -0
  237. data/test/unit/ccls/sample_kit_test.rb +35 -0
  238. data/test/unit/ccls/sample_outcome_test.rb +34 -0
  239. data/test/unit/ccls/sample_temperature_test.rb +25 -0
  240. data/test/unit/ccls/sample_test.rb +363 -0
  241. data/test/unit/ccls/sample_type_test.rb +58 -0
  242. data/test/unit/ccls/section_test.rb +34 -0
  243. data/test/unit/ccls/state_test.rb +31 -0
  244. data/test/unit/ccls/study_subject_abstracts_test.rb +115 -0
  245. data/test/unit/ccls/study_subject_addresses_test.rb +93 -0
  246. data/test/unit/ccls/study_subject_duplicates_test.rb +407 -0
  247. data/test/unit/ccls/study_subject_enrollments_test.rb +65 -0
  248. data/test/unit/ccls/study_subject_homex_outcome_test.rb +64 -0
  249. data/test/unit/ccls/study_subject_identifier_test.rb +439 -0
  250. data/test/unit/ccls/study_subject_interviews_test.rb +26 -0
  251. data/test/unit/ccls/study_subject_languages_test.rb +142 -0
  252. data/test/unit/ccls/study_subject_operational_events_test.rb +53 -0
  253. data/test/unit/ccls/study_subject_patient_test.rb +249 -0
  254. data/test/unit/ccls/study_subject_pii_test.rb +278 -0
  255. data/test/unit/ccls/study_subject_races_test.rb +203 -0
  256. data/test/unit/ccls/study_subject_search_test.rb +704 -0
  257. data/test/unit/ccls/study_subject_test.rb +770 -0
  258. data/test/unit/ccls/subject_language_test.rb +43 -0
  259. data/test/unit/ccls/subject_race_test.rb +35 -0
  260. data/test/unit/ccls/subject_relationship_test.rb +43 -0
  261. data/test/unit/ccls/subject_type_test.rb +40 -0
  262. data/test/unit/ccls/tracing_status_test.rb +32 -0
  263. data/test/unit/ccls/transfer_test.rb +81 -0
  264. data/test/unit/ccls/translation_table_test.rb +40 -0
  265. data/test/unit/ccls/unit_test.rb +21 -0
  266. data/test/unit/ccls/user_test.rb +156 -0
  267. data/test/unit/ccls/vital_status_test.rb +36 -0
  268. data/test/unit/ccls/zip_code_test.rb +55 -0
  269. metadata +633 -0
@@ -0,0 +1,110 @@
1
+ module Ccls::LiveBirthDataUpdateTestHelper
2
+
3
+ def create_test_file_and_live_birth_data_update(options={})
4
+ create_live_birth_data_update_test_file(options)
5
+ live_birth_data_update = create_live_birth_data_update_with_file
6
+ end
7
+
8
+ def create_live_birth_data_update_with_file
9
+ live_birth_data_update = Factory(:live_birth_data_update,
10
+ :csv_file => File.open(csv_test_file_name) )
11
+ assert_not_nil live_birth_data_update.csv_file_file_name
12
+ live_birth_data_update
13
+ end
14
+
15
+ def cleanup_live_birth_data_update_and_test_file(live_birth_data_update=nil)
16
+ if live_birth_data_update
17
+ live_birth_data_update_file = live_birth_data_update.csv_file.path
18
+ # explicit destroy to remove attachment
19
+ live_birth_data_update.destroy
20
+ unless live_birth_data_update_file.blank?
21
+ assert !File.exists?(live_birth_data_update_file)
22
+ end
23
+ if File.exists?("test/live_birth_data_update/#{live_birth_data_update.id}") &&
24
+ File.directory?("test/live_birth_data_update/#{live_birth_data_update.id}")
25
+ Dir.delete("test/live_birth_data_update/#{live_birth_data_update.id}")
26
+ end
27
+ end
28
+ if File.exists?(csv_test_file_name)
29
+ # explicit delete to remove test file
30
+ File.delete(csv_test_file_name)
31
+ end
32
+ assert !File.exists?(csv_test_file_name)
33
+ end
34
+
35
+ def create_case_for_live_birth_data_update
36
+ icf_master_id = Factory(:icf_master_id,:icf_master_id => '1234FAKE')
37
+ study_subject = Factory(:complete_case_study_subject)
38
+ study_subject.assign_icf_master_id
39
+ assert_equal '1234FAKE', study_subject.icf_master_id
40
+ study_subject
41
+ end
42
+
43
+ def csv_file_header_array
44
+ %w{masterid ca_co_status biomom biodad date mother_full_name mother_maiden_name father_full_name child_full_name child_dobm child_dobd child_doby child_gender birthplace_country birthplace_state birthplace_city mother_hispanicity mother_hispanicity_mex mother_race mother_race_other father_hispanicity father_hispanicity_mex father_race father_race_other}
45
+ end
46
+
47
+ def csv_file_header
48
+ csv_file_header_array.collect{|s|"\"#{s}\""}.join(',')
49
+ end
50
+
51
+ def csv_file_unknown
52
+ "1234FAKE,unknown,1,,1/18/2012,Jane Smith,Jones,John Smith,Jimmy Smith,1,6,2009,M,United States,CA,Bakersfield,2,2,1,,2,2,1,"
53
+ end
54
+
55
+ def csv_file_case_study_subject
56
+ "1234FAKE,case,1,,1/18/2012,Jane Smith,Jones,John Smith,Jimmy Smith,1,6,2009,M,United States,CA,Bakersfield,2,2,1,,2,2,1,"
57
+ end
58
+
59
+ def csv_file_control(options={})
60
+ c = control.merge(options)
61
+ csv_file_header_array.collect{|s|"\"#{c[s.to_sym]}\""}.join(',')
62
+ end
63
+
64
+ def create_live_birth_data_update_test_file(options={})
65
+ File.open(csv_test_file_name,'w'){|f|
66
+ f.puts csv_file_header
67
+ f.puts csv_file_case_study_subject
68
+ f.puts csv_file_control(options) }
69
+ end
70
+
71
+ # broke it down like this so that can access and compare the attributes
72
+ def control
73
+ { :masterid => '1234FAKE',
74
+ :ca_co_status => 'control',
75
+ :biomom => 1,
76
+ :biodad => nil,
77
+ :date => nil,
78
+ :mother_full_name => 'Jill Johnson',
79
+ :mother_maiden_name => 'Jackson',
80
+ :father_full_name => 'Jack Johnson',
81
+ :child_full_name => 'Michael Johnson',
82
+ :child_dobm => 1,
83
+ :child_dobd => 6,
84
+ :child_doby => 2009,
85
+ :child_gender => 'M',
86
+ :birthplace_country => 'United States',
87
+ :birthplace_state => 'CA',
88
+ :birthplace_city => 'Oakland',
89
+ :mother_hispanicity => 2,
90
+ :mother_hispanicity_mex => 2,
91
+ :mother_race => 1,
92
+ :mother_race_other => nil,
93
+ :father_hispanicity => 2,
94
+ :father_hispanicity_mex => 2,
95
+ :father_race => 1,
96
+ :father_race_other => nil }
97
+ end
98
+
99
+ def turn_off_paperclip_logging
100
+ # Is there I way to silence the paperclip output? Yes...
101
+ Paperclip.options[:log] = false
102
+ # Is there I way to capture the paperclip output for comparison? Don't know.
103
+ end
104
+
105
+ # shouldn't be called test_... as makes it a test method!
106
+ def csv_test_file_name
107
+ "live_birth_data_update_test_file.csv"
108
+ end
109
+
110
+ end
@@ -0,0 +1,49 @@
1
+ module Ccls::PackageTestHelper
2
+ #
3
+ # def stub_package_for_in_transit(options={})
4
+ # stub_package_for_successful_event(:event => 'Departed')
5
+ # stub_package_tracking_info
6
+ # end
7
+ #
8
+ # def stub_package_for_successful_delivery(options={})
9
+ # stub_package_for_successful_event
10
+ # stub_package_tracking_info
11
+ # end
12
+ #
13
+ # def stub_package_for_failure(options={})
14
+ # ActiveMerchant::Shipping::FedEx.any_instance.stubs(
15
+ # :find_tracking_info).raises(
16
+ # ActiveMerchant::Shipping::ResponseError)
17
+ # end
18
+ #
19
+ #protected
20
+ #
21
+ # def stub_package_for_successful_event(options={})
22
+ # shipment_event = shipment_event(options)
23
+ # ActiveMerchant::Shipping::TrackingResponse.any_instance.stubs(
24
+ # :shipment_events).returns([shipment_event])
25
+ # ActiveMerchant::Shipping::TrackingResponse.any_instance.stubs(
26
+ # :latest_event).returns(shipment_event)
27
+ # end
28
+ #
29
+ # def shipment_event(options={})
30
+ # ActiveMerchant::Shipping::ShipmentEvent.new(
31
+ # options[:event]||'Delivered',
32
+ # Time.now,
33
+ # ActiveMerchant::Shipping::Location.new({
34
+ # :city => 'BERKELEY',
35
+ # :state => 'CA',
36
+ # :zip => '94703'
37
+ # })
38
+ # )
39
+ # end
40
+ #
41
+ # def stub_package_tracking_info
42
+ # ActiveMerchant::Shipping::FedEx.any_instance.stubs(
43
+ # :find_tracking_info).returns(
44
+ # ActiveMerchant::Shipping::TrackingResponse.new(true ,'hello')
45
+ # )
46
+ # end
47
+ #
48
+ end
49
+ #ActiveSupport::TestCase.send(:include, Ccls::PackageTestHelper)
@@ -0,0 +1,20 @@
1
+ require 'active_record'
2
+ require 'use_db'
3
+
4
+ shared_db_file = File.join( Rails.root,'config','shared_database.yml')
5
+ if File.exists?(shared_db_file)
6
+ puts "Loading shared database mods."
7
+ USE_DB_CONFIG = File.join(File.dirname(__FILE__),'..','..','config','shared_use_db.yml')
8
+ OTHER_DB_FILES = [shared_db_file]
9
+
10
+ class ActiveSupport::TestCase
11
+ unless defined?(CLONED_DB_FOR_CCLS_TEST)
12
+ UseDbTest.prepare_test_db
13
+ UseDbTest.prepare_test_db(:prefix => "shared_")
14
+ CLONED_DB_FOR_CCLS_TEST = true
15
+ end
16
+ end if Rails.env == 'test'
17
+ else
18
+ puts "*\n* Expected, but didn't find, #{shared_db_file}"
19
+ puts "* Probably gonna crash now.\n*"
20
+ end
@@ -0,0 +1 @@
1
+ Dir["#{File.dirname(__FILE__)}/../tasks/**/*.rake"].sort.each { |ext| load ext }
@@ -0,0 +1,52 @@
1
+ module Ccls;end
2
+
3
+ namespace :test do
4
+ namespace :units do
5
+ Rake::TestTask.new(:ccls_engine => "db:test:prepare") do |t|
6
+ t.pattern = File.expand_path(File.join(
7
+ File.dirname(__FILE__),'/../../test/unit/ccls/*_test.rb'))
8
+ t.libs << "test"
9
+ t.verbose = true
10
+ end
11
+ end
12
+ # namespace :functionals do
13
+ # Rake::TestTask.new(:ccls_engine => "db:test:prepare") do |t|
14
+ # t.pattern = File.expand_path(File.join(
15
+ # File.dirname(__FILE__),'/../../test/functional/ccls/*_test.rb'))
16
+ # t.libs << "test"
17
+ # t.verbose = true
18
+ # end
19
+ # end
20
+ end
21
+ #Rake::Task['test:functionals'].prerequisites.unshift(
22
+ # "test:functionals:ccls_engine" )
23
+ Rake::Task['test:units'].prerequisites.unshift(
24
+ "test:units:ccls_engine" )
25
+
26
+ # I thought of possibly just including this file
27
+ # but that would make __FILE__ different.
28
+ # Hmmm
29
+
30
+ #
31
+ # used in simply_helpful's rake test:coverage to run gem's
32
+ # tests in the context of the application
33
+ #
34
+ @gem_test_dirs ||= []
35
+ #@gem_test_dirs << File.expand_path(File.join(File.dirname(__FILE__),
36
+ # '/../../test/unit/ccls/'))
37
+ #@gem_test_dirs << File.expand_path(File.join(File.dirname(__FILE__),
38
+ # '/../../test/unit/ccls/helpers/'))
39
+ #@gem_test_dirs << File.expand_path(File.join(File.dirname(__FILE__),
40
+ # '/../../test/functional/ccls/'))
41
+
42
+ #
43
+ # More flexible. Find all test files, pick out their dir, uniq 'em and add.
44
+ #
45
+ Dir.glob(
46
+ File.expand_path(File.join(File.dirname(__FILE__),
47
+ '/../../test/*/ccls/**/*_test.rb'))
48
+ ).collect{|f|
49
+ File.dirname(f)
50
+ }.uniq.each{ |dir|
51
+ @gem_test_dirs << dir
52
+ }
@@ -0,0 +1,86 @@
1
+ class TranslationTable
2
+
3
+ def self.[](key=nil)
4
+ short(key) || value(key) || nil
5
+ end
6
+
7
+ # DO NOT MEMORIZE HERE. IT ENDS UP IN ALL SUBCLASSES
8
+ # Doesn't really seem necessary. It isn't that complicated.
9
+
10
+ # [1,2,999]
11
+ def self.valid_values
12
+ # @@valid_values ||= table.collect{ |x| x[:value] }
13
+ table.collect{ |x| x[:value] }
14
+ end
15
+
16
+ # [['Yes',1],['No',2],["Don't Know",999]]
17
+ def self.selector_options
18
+ # @@selector_options ||= table.collect{|x| [x[:long],x[:value]] }
19
+ table.collect{|x| [x[:long],x[:value]] }
20
+ end
21
+
22
+ protected
23
+
24
+ def self.short(key)
25
+ index = table.find_index{|x| x[:short] == key.to_s }
26
+ ( index.nil? ) ? nil : table[index][:value]
27
+ end
28
+
29
+ def self.value(key)
30
+ index = table.find_index{|x| x[:value] == key.to_i }
31
+ ( index.nil? ) ? nil : table[index][:long]
32
+ end
33
+
34
+ def self.table
35
+ []
36
+ end
37
+ end
38
+
39
+
40
+ class YNDK < TranslationTable
41
+ # unique translation table
42
+ def self.table
43
+ @@table ||= [
44
+ { :value => 1, :short => 'yes', :long => "Yes" },
45
+ { :value => 2, :short => 'no', :long => "No" },
46
+ { :value => 999, :short => 'dk', :long => "Don't Know" }
47
+ ]
48
+ end
49
+ end
50
+ #
51
+ # YNDK[1] => 'Yes'
52
+ # YNDK['1'] => 'Yes'
53
+ # YNDK['yes'] => 1
54
+ # YNDK[:yes] => 1
55
+ # YNDK[:asdf] => nil
56
+ #
57
+ class YNODK < TranslationTable
58
+ def self.table
59
+ @@table ||= [
60
+ { :value => 1, :short => 'yes', :long => "Yes" },
61
+ { :value => 2, :short => 'no', :long => "No" },
62
+ { :value => 3, :short => 'other', :long => "Other" },
63
+ { :value => 999, :short => 'dk', :long => "Don't Know" }
64
+ ]
65
+ end
66
+ end
67
+ class YNRDK < TranslationTable
68
+ def self.table
69
+ @@table ||= [
70
+ { :value => 1, :short => 'yes', :long => "Yes" },
71
+ { :value => 2, :short => 'no', :long => "No" },
72
+ { :value => 999, :short => 'dk', :long => "Don't Know" },
73
+ { :value => 888, :short => 'refused', :long => "Refused" }
74
+ ]
75
+ end
76
+ end
77
+ class ADNA < TranslationTable
78
+ def self.table
79
+ @@table ||= [
80
+ { :value => 1, :short => 'agree', :long => "Agree" },
81
+ { :value => 2, :short => 'disagree', :long => "Do Not Agree" },
82
+ { :value => 555, :short => 'na', :long => "N/A" },
83
+ { :value => 999, :short => 'dk', :long => "Don't Know" }
84
+ ]
85
+ end
86
+ end
@@ -0,0 +1,5 @@
1
+ class SharedMigration < ActiveRecord::Migration
2
+ def self.database_model
3
+ return "ActiveRecordShared"
4
+ end
5
+ end
@@ -0,0 +1,125 @@
1
+ #if surveyor_gem = Gem.searcher.find('surveyor')
2
+ #
3
+ # http://github.com/breakpointer/surveyor/issues/issue/45
4
+ #
5
+ # Survey access_code not guaranteed to be unique
6
+ #
7
+ # As there is no model validation or unique index in the
8
+ # database, there is no guarantee that your survey access_code
9
+ # will be unique. It is just a normalized version of your
10
+ # survey title.
11
+ #
12
+ #Running ...
13
+ #<pre>
14
+ # rake surveyor FILE=surveys/kitchen_sink_survey.rb APPEND=true
15
+ # rake surveyor FILE=surveys/kitchen_sink_survey.rb APPEND=true
16
+ # script/console
17
+ # Survey.all.collect(&:access_code)
18
+ #</pre>
19
+ #should show this to be true.
20
+ #
21
+ #This will show both surveys as able to be taken, but will
22
+ # only allow the first one when the attempt is made as the
23
+ # survey is found by
24
+ #
25
+ #<pre>
26
+ #@survey = Survey.find_by_access_code(params[:survey_code])
27
+ #</pre>
28
+ #
29
+ #In addition, adding a unique index to the db and model will
30
+ # make a mess when running
31
+ #<pre>
32
+ #rake surveyor FILE=surveys/kitchen_sink_survey.rb APPEND=true
33
+ #rake surveyor FILE=surveys/kitchen_sink_survey.rb APPEND=true
34
+ #</pre>
35
+ #as the access_code is not unique and the survey fixtures are
36
+ # loaded last, leaving the associations with an invalid survey_id.
37
+ # To avoid this, the survey fixture should probably be attempted first.
38
+ #
39
+ #
40
+ #Update...
41
+ #
42
+ #Adding something like ...
43
+ #<pre>
44
+ #def access_code=(value)
45
+ # counter = 2
46
+ # original_value = value
47
+ # while( ( survey = Survey.find_by_access_code(value) ) &&
48
+ # ( self.id != survey.id ) )
49
+ # value = [original_value,"_",counter].join
50
+ # counter += 1
51
+ # end
52
+ # super
53
+ #end
54
+ #</pre>
55
+ #... to Survey seems to provide a "fix" for this "problem",
56
+ # although I don't know how kosher it is.
57
+ #
58
+ #It works in my test environment, but does not actually work
59
+ # in the "rake surveyor" task as the survey is built from a
60
+ # different Survey model completely and then loaded into the
61
+ # database and not created though the application.
62
+ #
63
+ #My final "fix" was to add
64
+ #<pre>
65
+ #require 'lib/surveyor/survey_extensions'
66
+ #</pre>
67
+ #to my Rakefile and create the file
68
+ #<pre>
69
+ ## > cat lib/surveyor/survey_extensions.rb
70
+ #if surveyor_gem = Gem.searcher.find('surveyor')
71
+ # require surveyor_gem.full_gem_path + '/script/surveyor/parser'
72
+ # require surveyor_gem.full_gem_path + '/script/surveyor/survey'
73
+ #end
74
+ #
75
+ #module SurveyParser
76
+ #module SurveyExtensions
77
+ # def self.included(base)
78
+ # base.class_eval do
79
+ # def initialize_with_unique_access_code(obj, args, opts)
80
+ # initialize_without_unique_access_code(obj, args, opts)
81
+ # counter = 2
82
+ # ac = self.access_code
83
+ # original_ac = self.access_code
84
+ # while( survey = ::Survey.find_by_access_code(ac) )
85
+ # ac = [original_ac,"_",counter].join
86
+ # counter += 1
87
+ # end
88
+ # self.access_code = ac
89
+ # end
90
+ # alias_method_chain :initialize, :unique_access_code
91
+ # end
92
+ # end
93
+ #end
94
+ #end
95
+ #SurveyParser::Survey.send(:include, SurveyParser::SurveyExtensions)
96
+ #</pre>
97
+ #It is not as clean as I would've liked, but works.
98
+ #
99
+ module SurveyParser
100
+ module SurveyExtensions
101
+ def self.included(base)
102
+ base.class_eval do
103
+ def initialize_with_unique_access_code(obj, args, opts)
104
+ initialize_without_unique_access_code(obj, args, opts)
105
+ counter = 2
106
+ ac = self.access_code
107
+ original_ac = self.access_code
108
+ while( survey = ::Survey.find_by_access_code(ac) )
109
+ ac = [original_ac,"_",counter].join
110
+ counter += 1
111
+ end
112
+ self.access_code = ac
113
+ end
114
+ alias_method_chain :initialize, :unique_access_code
115
+ end
116
+ end
117
+ end
118
+ end
119
+ # need in rvm/jruby
120
+ #require 'vendor/plugins/surveyor/script/surveyor/parser'
121
+ if surveyor_gem = Gem.source_index.find_name('ccls-surveyor').last
122
+ require surveyor_gem.full_gem_path + '/script/surveyor/parser'
123
+ require surveyor_gem.full_gem_path + '/script/surveyor/survey'
124
+ SurveyParser::Survey.send(:include, SurveyParser::SurveyExtensions)
125
+ end