ncs_mdes_warehouse 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (317) hide show
  1. data/.gitignore +7 -0
  2. data/.rvmrc +1 -0
  3. data/.yardopts +7 -0
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile +13 -0
  6. data/README.md +154 -0
  7. data/Rakefile +45 -0
  8. data/bin/mdes-wh +21 -0
  9. data/ci-exec.sh +45 -0
  10. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/address.rb +101 -0
  11. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit.rb +365 -0
  12. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_2.rb +359 -0
  13. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_baby_name.rb +47 -0
  14. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_baby_name_2.rb +47 -0
  15. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_decorate_room.rb +29 -0
  16. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_decorate_room_2.rb +32 -0
  17. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li.rb +374 -0
  18. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li_baby_name.rb +47 -0
  19. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li_decorate_room.rb +32 -0
  20. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li_renovate_room.rb +32 -0
  21. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_renovate_room.rb +29 -0
  22. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_renovate_room_2.rb +32 -0
  23. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/contact.rb +77 -0
  24. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/drf_therm_verification.rb +50 -0
  25. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/dwelling_unit.rb +53 -0
  26. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother.rb +347 -0
  27. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_cond.rb +29 -0
  28. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_detail.rb +50 -0
  29. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_habits.rb +164 -0
  30. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_lice.rb +29 -0
  31. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_mold.rb +29 -0
  32. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_otc.rb +47 -0
  33. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_pet_type.rb +32 -0
  34. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_prescr.rb +47 -0
  35. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_renovate_room.rb +32 -0
  36. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_room_mold.rb +32 -0
  37. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_saq.rb +257 -0
  38. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_suppl.rb +47 -0
  39. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/email.rb +74 -0
  40. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment.rb +47 -0
  41. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment_prob_log.rb +50 -0
  42. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/event.rb +68 -0
  43. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1.rb +374 -0
  44. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1_cancer.rb +29 -0
  45. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1_educ.rb +29 -0
  46. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1_race.rb +29 -0
  47. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration.rb +239 -0
  48. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration_age_elig.rb +38 -0
  49. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration_hidden_du.rb +50 -0
  50. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration_pregnant.rb +38 -0
  51. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_inventory.rb +203 -0
  52. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_inventory_age.rb +35 -0
  53. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_inventory_age_elig.rb +35 -0
  54. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_unit.rb +53 -0
  55. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/incident.rb +98 -0
  56. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/incident_media.rb +35 -0
  57. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/incident_unanticipated.rb +29 -0
  58. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/institution.rb +68 -0
  59. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/instrument.rb +74 -0
  60. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/internet_usage.rb +92 -0
  61. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/internet_usage_participate.rb +29 -0
  62. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_contact.rb +41 -0
  63. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_household_dwelling.rb +38 -0
  64. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_household.rb +38 -0
  65. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_institute.rb +32 -0
  66. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_participant.rb +38 -0
  67. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_provider.rb +38 -0
  68. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/listing_unit.rb +38 -0
  69. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/low_high_script.rb +119 -0
  70. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/nine_mth_mother.rb +62 -0
  71. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/nine_mth_mother_detail.rb +143 -0
  72. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt.rb +128 -0
  73. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_dutype.rb +32 -0
  74. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_noaccess.rb +32 -0
  75. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_refusal.rb +32 -0
  76. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_vacant.rb +32 -0
  77. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach.rb +98 -0
  78. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_eval.rb +32 -0
  79. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_lang2.rb +29 -0
  80. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_race.rb +32 -0
  81. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_staff.rb +29 -0
  82. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_target.rb +32 -0
  83. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant.rb +62 -0
  84. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_auth.rb +44 -0
  85. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_consent.rb +86 -0
  86. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_consent_sample.rb +35 -0
  87. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_rvis.rb +74 -0
  88. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_vis_consent.rb +53 -0
  89. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment.rb +275 -0
  90. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_2.rb +275 -0
  91. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_info_source.rb +32 -0
  92. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_info_source_2.rb +29 -0
  93. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_source.rb +32 -0
  94. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_source_2.rb +29 -0
  95. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_svc.rb +32 -0
  96. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_svc_2.rb +32 -0
  97. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/person.rb +113 -0
  98. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/person_race.rb +32 -0
  99. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_cati.rb +95 -0
  100. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_details.rb +41 -0
  101. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_saq.rb +92 -0
  102. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_status_history.rb +47 -0
  103. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg.rb +422 -0
  104. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_cool.rb +32 -0
  105. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_heat2.rb +32 -0
  106. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_pdecorate_room.rb +32 -0
  107. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_prenovate_room.rb +32 -0
  108. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_room_mold.rb +32 -0
  109. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_saq.rb +116 -0
  110. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_sp_race.rb +32 -0
  111. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/prec_therm_cert.rb +41 -0
  112. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh.rb +350 -0
  113. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_2.rb +362 -0
  114. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_know_ncs.rb +29 -0
  115. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_know_ncs_2.rb +32 -0
  116. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_race.rb +29 -0
  117. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_race_2.rb +32 -0
  118. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi.rb +371 -0
  119. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_2.rb +380 -0
  120. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_know_ncs.rb +29 -0
  121. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_know_ncs_2.rb +32 -0
  122. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_race.rb +29 -0
  123. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_race_2.rb +32 -0
  124. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb.rb +371 -0
  125. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_2.rb +380 -0
  126. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_know_ncs.rb +29 -0
  127. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_know_ncs_2.rb +32 -0
  128. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_race.rb +29 -0
  129. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_race_2.rb +32 -0
  130. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1.rb +521 -0
  131. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_2.rb +497 -0
  132. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_commute.rb +29 -0
  133. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_commute_2.rb +32 -0
  134. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_cool.rb +29 -0
  135. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_cool_2.rb +32 -0
  136. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_diagnose_2.rb +29 -0
  137. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_diagnose_2_2.rb +29 -0
  138. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_heat2.rb +29 -0
  139. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_heat2_2.rb +32 -0
  140. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_local_trav.rb +29 -0
  141. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_local_trav_2.rb +32 -0
  142. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_nonenglish2_2.rb +32 -0
  143. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pdecorate_room.rb +29 -0
  144. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pdecorate_room_2.rb +32 -0
  145. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pet_type.rb +29 -0
  146. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pet_type_2.rb +32 -0
  147. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_prenovate2_room.rb +29 -0
  148. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_prenovate_room.rb +29 -0
  149. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_prenovate_room_2.rb +32 -0
  150. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_room_mold.rb +29 -0
  151. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_room_mold_2.rb +32 -0
  152. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_saq.rb +188 -0
  153. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_saq_2.rb +233 -0
  154. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_sp_race.rb +29 -0
  155. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_sp_race_2.rb +32 -0
  156. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2.rb +452 -0
  157. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_2.rb +440 -0
  158. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_cool.rb +29 -0
  159. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_cool_2.rb +32 -0
  160. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_diagnose_2.rb +29 -0
  161. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_diagnose_2_2.rb +32 -0
  162. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_heat2.rb +29 -0
  163. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_heat2_2.rb +32 -0
  164. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_pdecorate2_room.rb +29 -0
  165. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_pdecorate2_room_2.rb +32 -0
  166. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_prenovate_room.rb +29 -0
  167. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_prenovate_room_2.rb +32 -0
  168. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_room_mold.rb +29 -0
  169. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_room_mold_2.rb +32 -0
  170. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_saq.rb +116 -0
  171. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_saq_2.rb +116 -0
  172. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li.rb +350 -0
  173. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li_2.rb +350 -0
  174. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li_cool.rb +29 -0
  175. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li_cool_2.rb +32 -0
  176. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/provider.rb +62 -0
  177. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/provider_role.rb +32 -0
  178. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/psu.rb +29 -0
  179. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ref_freezer_verification.rb +50 -0
  180. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_receipt_confirm.rb +53 -0
  181. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_receipt_store.rb +65 -0
  182. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_shipping.rb +53 -0
  183. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_mother.rb +278 -0
  184. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_mother_detail.rb +263 -0
  185. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_mother_pet.rb +32 -0
  186. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq.rb +218 -0
  187. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_2.rb +218 -0
  188. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_formula_type.rb +29 -0
  189. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_formula_type_2.rb +29 -0
  190. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_supp.rb +32 -0
  191. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_supp_2.rb +32 -0
  192. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_water.rb +29 -0
  193. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_water_2.rb +29 -0
  194. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood.rb +194 -0
  195. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_draw.rb +29 -0
  196. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_hemolyze.rb +29 -0
  197. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_tube.rb +38 -0
  198. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_tube_comments.rb +29 -0
  199. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_cord_blood.rb +110 -0
  200. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_cord_blood_specimen.rb +29 -0
  201. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_equipment.rb +38 -0
  202. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_pickup.rb +47 -0
  203. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_receipt.rb +77 -0
  204. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_shipping.rb +56 -0
  205. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_spsc_info.rb +26 -0
  206. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_storage.rb +59 -0
  207. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_urine.rb +110 -0
  208. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/srsc_info.rb +26 -0
  209. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ssu.rb +29 -0
  210. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff.rb +59 -0
  211. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_cert_training.rb +47 -0
  212. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_exp_data_cllctn_tasks.rb +44 -0
  213. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_exp_mngmnt_tasks.rb +38 -0
  214. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_language.rb +32 -0
  215. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_validation.rb +38 -0
  216. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_weekly_expense.rb +44 -0
  217. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/study_center.rb +26 -0
  218. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/subsample_doc.rb +29 -0
  219. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf.rb +152 -0
  220. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_blank_collected.rb +29 -0
  221. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_dup_collected.rb +29 -0
  222. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_dup_filled.rb +29 -0
  223. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_n_collected.rb +29 -0
  224. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_reason_filled.rb +29 -0
  225. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_reason_filled2.rb +29 -0
  226. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_sample.rb +32 -0
  227. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_subsamples.rb +29 -0
  228. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq.rb +143 -0
  229. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_blank_collected.rb +29 -0
  230. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_dup_collected.rb +29 -0
  231. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_dup_filled.rb +29 -0
  232. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_n_collected.rb +29 -0
  233. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_reason_filled.rb +29 -0
  234. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_reason_filled2.rb +29 -0
  235. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_sample.rb +32 -0
  236. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_subsamples.rb +29 -0
  237. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/telephone.rb +83 -0
  238. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother.rb +89 -0
  239. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother_child_detail.rb +59 -0
  240. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother_child_habits.rb +185 -0
  241. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother_race.rb +32 -0
  242. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/trh_meter_calibration.rb +77 -0
  243. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tsu.rb +29 -0
  244. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother.rb +299 -0
  245. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_detail.rb +302 -0
  246. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_lice.rb +29 -0
  247. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_renovate_room.rb +32 -0
  248. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_room_mold.rb +32 -0
  249. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq.rb +293 -0
  250. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_2.rb +293 -0
  251. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_brand.rb +32 -0
  252. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_brand_2.rb +32 -0
  253. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_type.rb +29 -0
  254. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_type_2.rb +29 -0
  255. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_supplement.rb +32 -0
  256. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_supplement_2.rb +32 -0
  257. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_water.rb +29 -0
  258. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_water_2.rb +32 -0
  259. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother.rb +347 -0
  260. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_cond.rb +29 -0
  261. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_detail.rb +50 -0
  262. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_habits.rb +194 -0
  263. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_mold.rb +29 -0
  264. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_otc.rb +47 -0
  265. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_prescr.rb +47 -0
  266. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_suppl.rb +47 -0
  267. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_pet_type.rb +32 -0
  268. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_renovate_room.rb +32 -0
  269. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_room_mold.rb +32 -0
  270. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_saq.rb +242 -0
  271. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/vacuum_bag.rb +131 -0
  272. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/vacuum_bag_outside.rb +32 -0
  273. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/validation_ins.rb +233 -0
  274. data/generated_models/ncs_navigator/warehouse/models/two_point_zero.rb +551 -0
  275. data/init.rakefile +27 -0
  276. data/lib/ncs_navigator/warehouse/cli.rb +57 -0
  277. data/lib/ncs_navigator/warehouse/configuration/file_evaluator.rb +60 -0
  278. data/lib/ncs_navigator/warehouse/configuration.rb +315 -0
  279. data/lib/ncs_navigator/warehouse/data_mapper.rb +50 -0
  280. data/lib/ncs_navigator/warehouse/data_mapper_patches.rb +23 -0
  281. data/lib/ncs_navigator/warehouse/database_initializer.rb +100 -0
  282. data/lib/ncs_navigator/warehouse/models/mdes_model.rb +76 -0
  283. data/lib/ncs_navigator/warehouse/models/mdes_model_collection.rb +64 -0
  284. data/lib/ncs_navigator/warehouse/models.rb +11 -0
  285. data/lib/ncs_navigator/warehouse/table_modeler/mdes_ext.rb +141 -0
  286. data/lib/ncs_navigator/warehouse/table_modeler/model_template.rb.erb +31 -0
  287. data/lib/ncs_navigator/warehouse/table_modeler.rb +128 -0
  288. data/lib/ncs_navigator/warehouse/transformers/database.rb +236 -0
  289. data/lib/ncs_navigator/warehouse/transformers/enum_transformer.rb +58 -0
  290. data/lib/ncs_navigator/warehouse/transformers/transform_status.rb +23 -0
  291. data/lib/ncs_navigator/warehouse/transformers/vdr_xml/reader.rb +118 -0
  292. data/lib/ncs_navigator/warehouse/transformers/vdr_xml.rb +26 -0
  293. data/lib/ncs_navigator/warehouse/transformers.rb +19 -0
  294. data/lib/ncs_navigator/warehouse/updating_shell.rb +57 -0
  295. data/lib/ncs_navigator/warehouse/version.rb +5 -0
  296. data/lib/ncs_navigator/warehouse/xml_emitter.rb +138 -0
  297. data/lib/ncs_navigator/warehouse.rb +63 -0
  298. data/ncs_mdes_warehouse.gemspec +39 -0
  299. data/sample_configuration.rb +48 -0
  300. data/spec/bcdatabase/local_postgresql.yml +7 -0
  301. data/spec/bcdatabase/public_ci_postgresql9.yml +7 -0
  302. data/spec/bcdatabase/test_sqlite.yml +5 -0
  303. data/spec/global_state_helper.rb +116 -0
  304. data/spec/navigator.ini +12 -0
  305. data/spec/ncs_navigator/warehouse/configuration_spec.rb +409 -0
  306. data/spec/ncs_navigator/warehouse/models/mdes_model_spec.rb +170 -0
  307. data/spec/ncs_navigator/warehouse/table_modeler_spec.rb +562 -0
  308. data/spec/ncs_navigator/warehouse/transformers/database_spec.rb +194 -0
  309. data/spec/ncs_navigator/warehouse/transformers/enum_transformer_spec.rb +94 -0
  310. data/spec/ncs_navigator/warehouse/transformers/vdr_xml/made_up_vdr_xml.xml +87 -0
  311. data/spec/ncs_navigator/warehouse/transformers/vdr_xml/reader_spec.rb +43 -0
  312. data/spec/ncs_navigator/warehouse/transformers/vdr_xml_spec.rb +45 -0
  313. data/spec/ncs_navigator/warehouse/xml_emitter_spec.rb +108 -0
  314. data/spec/ncs_navigator/warehouse_spec.rb +35 -0
  315. data/spec/spec_helper.rb +84 -0
  316. data/spec/test_samples.csv +2 -0
  317. metadata +567 -0
@@ -0,0 +1,194 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ module NcsNavigator::Warehouse::Transformers
4
+ describe Database do
5
+ def sample_class(&contents)
6
+ Class.new do
7
+ include Database
8
+
9
+ class_eval(&contents) if contents
10
+ end
11
+ end
12
+
13
+ let(:configuration) {
14
+ NcsNavigator::Warehouse::Configuration.new.tap do |c|
15
+ c.log_file = tmpdir + 'test.log'
16
+ c.output_level = :quiet
17
+ end
18
+ }
19
+ let(:options) { {} }
20
+ let(:instance) { cls.new(configuration, options) }
21
+ let(:cls) { @cls }
22
+
23
+ describe '#repository_name' do
24
+ it 'defaults to the class name, underscored' do
25
+ @cls = (FooBaz = sample_class)
26
+ instance.repository_name.should == :foo_baz
27
+ end
28
+
29
+ it 'can be overridden at the class level' do
30
+ @cls = sample_class do
31
+ repository :data_goes_here
32
+ end
33
+
34
+ instance.repository_name.should == :data_goes_here
35
+ end
36
+
37
+ it 'can be overridden at the instance level with the :repository key' do
38
+ @cls = sample_class
39
+ options[:repository] = :bazQuux
40
+ instance.repository_name.should == :bazQuux
41
+ end
42
+
43
+ it 'can be overridden at the instance level with the :repository_name key' do
44
+ @cls = sample_class
45
+ options[:repository_name] = :bazQuux
46
+ instance.repository_name.should == :bazQuux
47
+ end
48
+ end
49
+
50
+ describe '#connection_parameters' do
51
+ describe 'from bcdatabase', :modifies_warehouse_state do
52
+ let(:cls) {
53
+ sample_class do
54
+ bcdatabase :name => 'ncs_staff_portal'
55
+ end
56
+ }
57
+
58
+ it 'uses the values set in the class' do
59
+ instance.connection_parameters['database'].should == 'ncs_sp'
60
+ end
61
+
62
+ it 'can be overridden at the instance level' do
63
+ options[:bcdatabase] = { :name => 'ncs_staff_portal_test' }
64
+ instance.connection_parameters['database'].should == 'ncs_sp_test'
65
+ end
66
+
67
+ it 'defaults the group from the environment' do
68
+ NcsNavigator::Warehouse.env = 'staging'
69
+ instance.bcdatabase[:group].should == :ncsdb_staging
70
+ end
71
+ end
72
+ end
73
+
74
+ shared_context 'people_pro' do
75
+ let(:database_file) { 'people_pro.sqlite3' }
76
+
77
+ after(:all) do
78
+ FileUtils.rm_rf database_file
79
+ end
80
+ end
81
+
82
+ describe '#repository' do
83
+ include_context 'people_pro'
84
+
85
+ let(:cls) do
86
+ sample_class do
87
+ repository :people_pro
88
+
89
+ bcdatabase :group => 'test_sqlite', :name => 'people_pro'
90
+ end
91
+ end
92
+
93
+ it 'sets up the repository' do
94
+ lambda {
95
+ instance.repository.adapter.options['path'].should == 'people_pro.sqlite3'
96
+ }.should_not raise_error
97
+ end
98
+ end
99
+
100
+ describe '#each' do
101
+ include_context 'people_pro'
102
+
103
+ describe 'of .produce_records' do
104
+ let(:cls) do
105
+ sample_class do
106
+ bcdatabase :group => 'test_sqlite', :name => 'people_pro'
107
+ repository :people_pro
108
+
109
+ produce_records :people do |row|
110
+ row.id
111
+ end
112
+
113
+ produce_records :other_persons, :query => 'SELECT * FROM more_people' do |row|
114
+ [
115
+ row.id + 'X',
116
+ row.id + 'Y'
117
+ ]
118
+ end
119
+ end
120
+ end
121
+
122
+ let(:enumerator_def) { cls }
123
+ let(:enumerator) { instance }
124
+
125
+ before do
126
+ execute_sql(
127
+ "CREATE TABLE people (id VARCHAR(24), name VARCHAR(255))",
128
+ "CREATE TABLE more_people (id VARCHAR(24), name VARCHAR(255))"
129
+ )
130
+ end
131
+
132
+ after do
133
+ execute_sql("DROP TABLE people", "DROP TABLE more_people")
134
+ end
135
+
136
+ def execute_sql(*stmts)
137
+ stmts.each { |stmt| enumerator.repository.adapter.execute stmt }
138
+ end
139
+
140
+ it 'uses the production name as a table name by default' do
141
+ enumerator_def.record_producers[0].query.should == 'SELECT * FROM people'
142
+ end
143
+
144
+ it 'uses an explicit query if given' do
145
+ enumerator_def.record_producers[1].query.should == 'SELECT * FROM more_people'
146
+ end
147
+
148
+ it 'can return multiple results per row' do
149
+ execute_sql(
150
+ "INSERT INTO people (id) VALUES ('A')",
151
+ "INSERT INTO more_people (id) VALUES ('S')"
152
+ )
153
+
154
+ enumerator.to_a.should == %w(A SX SY)
155
+ end
156
+
157
+ it 'can execute just one producer' do
158
+ execute_sql(
159
+ "INSERT INTO people (id) VALUES ('A')",
160
+ "INSERT INTO more_people (id) VALUES ('S')"
161
+ )
162
+
163
+ acc = []
164
+ enumerator.each(:people) do |r|
165
+ acc << r
166
+ end
167
+
168
+ acc.should == %w(A)
169
+ end
170
+ end
171
+ end
172
+
173
+ describe '.create_transformer' do
174
+ let(:enumerator_def) { sample_class }
175
+ subject { enumerator_def.create_transformer(configuration) }
176
+
177
+ it 'creates an EnumTransformer' do
178
+ subject.should be_an EnumTransformer
179
+ end
180
+
181
+ it 'creates an enumerator from the source class' do
182
+ subject.enum.should be_an enumerator_def
183
+ end
184
+
185
+ describe 'with options' do
186
+ subject { enumerator_def.create_transformer(configuration, :repository => :alpha) }
187
+
188
+ it 'passes the options to the enumerable constructor' do
189
+ subject.enum.repository_name.should == :alpha
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,94 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ module NcsNavigator::Warehouse::Transformers
4
+ describe EnumTransformer, :modifies_warehouse_state do
5
+ class Sample
6
+ include ::DataMapper::Resource
7
+
8
+ property :id, Integer, :key => true
9
+ property :name, String, :required => true
10
+ end
11
+
12
+ describe '#transform' do
13
+ let(:records) { [
14
+ Sample.new(:id => 1, :name => 'One'),
15
+ Sample.new(:id => 2, :name => 'Two'),
16
+ Sample.new(:id => 3, :name => 'Three')
17
+ ] }
18
+ let(:transform_status) { TransformStatus.new('test') }
19
+ subject { EnumTransformer.new(records) }
20
+
21
+ it 'saves valid records when all are valid' do
22
+ records.each do |m|
23
+ m.should_receive(:valid?).and_return(true)
24
+ m.should_receive(:save).and_return(true)
25
+ end
26
+
27
+ subject.transform(transform_status)
28
+ transform_status.errors.should be_empty
29
+ end
30
+
31
+ it 'automatically sets the PSU ID if the object accepts it'
32
+
33
+ describe 'with an invalid instance' do
34
+ before do
35
+ records[0].should_receive(:save).and_return(true)
36
+ records[1].should_receive(:save).and_return(true)
37
+ records[2].name = nil
38
+
39
+ subject.transform(transform_status)
40
+ end
41
+
42
+ it 'records the invalid instance' do
43
+ err = transform_status.errors.first
44
+ err.model_class.should == Sample
45
+ err.message.should == 'Invalid record. Name must not be blank (name=nil). Sample id=3.'
46
+ end
47
+
48
+ it 'saves the other instances' do
49
+ # in `before`
50
+ end
51
+ end
52
+
53
+ describe 'with an unsaveable instance' do
54
+ before do
55
+ records[0].should_receive(:save).and_return(true)
56
+ records[1].should_receive(:save).and_return(false)
57
+ records[2].should_receive(:save).and_return(true)
58
+
59
+ subject.transform(transform_status)
60
+ end
61
+
62
+ it 'records the unsaveable instance' do
63
+ err = transform_status.errors.first
64
+ err.model_class.should == Sample
65
+ err.message.should == 'Could not save. Sample id=2.'
66
+ end
67
+
68
+ it 'saves the saveable instances' do
69
+ # in `before`
70
+ end
71
+ end
72
+
73
+ describe 'with an instance that errors on save' do
74
+ before do
75
+ records[0].should_receive(:save).and_raise("No database around these parts")
76
+ records[1].should_receive(:save).and_return(true)
77
+ records[2].should_receive(:save).and_return(true)
78
+
79
+ subject.transform(transform_status)
80
+ end
81
+
82
+ it 'records the failing instance' do
83
+ err = transform_status.errors.first
84
+ err.model_class.should == Sample
85
+ err.message.should == 'Error on save. RuntimeError: No database around these parts. Sample id=1.'
86
+ end
87
+
88
+ it 'saves the saveable instances' do
89
+ # in `before`
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,87 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <ncs:recruitment_substudy_transmission_envelope xmlns:ncs="http://www.nationalchildrensstudy.gov">
3
+ <ncs:transmission_header>
4
+ <sc_id>20000029</sc_id>
5
+ <psu_id>20000030</psu_id>
6
+ <specification_version>2.0.01.02</specification_version>
7
+ <is_snapshot>true</is_snapshot>
8
+ </ncs:transmission_header>
9
+ <ncs:transmission_tables>
10
+ <study_center>
11
+ <sc_id>20000029</sc_id>
12
+ <sc_name>Northwestern University</sc_name>
13
+ <comments>NA</comments>
14
+ <transaction_type>NA</transaction_type>
15
+ </study_center>
16
+ <psu>
17
+ <sc_id>20000029</sc_id>
18
+ <psu_id>20000030</psu_id>
19
+ <psu_name>Cook County, IL</psu_name>
20
+ <recruit_type>3</recruit_type>
21
+ <transaction_type>NA</transaction_type>
22
+ </psu>
23
+ <ssu>
24
+ <sc_id>20000029</sc_id>
25
+ <psu_id>20000030</psu_id>
26
+ <ssu_id>13</ssu_id>
27
+ <ssu_name>The unluckiest SSU</ssu_name>
28
+ <transaction_type>NA</transaction_type>
29
+ </ssu>
30
+ <listing_unit>
31
+ <psu_id>20000030</psu_id>
32
+ <list_id>100</list_id>
33
+ <ssu_id>13.1</ssu_id>
34
+ <tsu_id>-7</tsu_id>
35
+ <list_line>-7</list_line>
36
+ <list_source>3</list_source>
37
+ <list_comment>NA</list_comment>
38
+ <transaction_type>NA</transaction_type>
39
+ </listing_unit>
40
+ <person>
41
+ <psu_id>20000030</psu_id>
42
+ <person_id>74</person_id>
43
+ <prefix>-7</prefix>
44
+ <first_name></first_name>
45
+ <last_name></last_name>
46
+ <middle_name></middle_name>
47
+ <maiden_name></maiden_name>
48
+ <suffix>-7</suffix>
49
+ <title>-7</title>
50
+ <sex>2</sex>
51
+ <age>49</age>
52
+ <age_range>5</age_range>
53
+ <person_dob>1962-01-01</person_dob>
54
+ <deceased>2</deceased>
55
+ <ethnic_group>2</ethnic_group>
56
+ <person_lang>1</person_lang>
57
+ <person_lang_oth>-7</person_lang_oth>
58
+ <maristat>1</maristat>
59
+ <maristat_oth>-7</maristat_oth>
60
+ <pref_contact>-4</pref_contact>
61
+ <pref_contact_oth>-7</pref_contact_oth>
62
+ <plan_move>2</plan_move>
63
+ <move_info>-7</move_info>
64
+ <new_address_id>-3</new_address_id>
65
+ <when_move>-7</when_move>
66
+ <date_move>9777-97</date_move>
67
+ <p_tracing>2</p_tracing>
68
+ <p_info_source>1</p_info_source>
69
+ <p_info_source_oth>-7</p_info_source_oth>
70
+ <p_info_date>2011-03-31</p_info_date>
71
+ <p_info_update>2011-03-31</p_info_update>
72
+ <person_comment>NA</person_comment>
73
+ <transaction_type>NA</transaction_type>
74
+ </person>
75
+ <link_contact>
76
+ <psu_id>20000030</psu_id>
77
+ <contact_link_id>36</contact_link_id>
78
+ <contact_id>36</contact_id>
79
+ <event_id>14</event_id>
80
+ <instrument_id></instrument_id>
81
+ <staff_id>staff_portal-frd567</staff_id>
82
+ <person_id>74</person_id>
83
+ <provider_id>-7</provider_id>
84
+ <transaction_type>NA</transaction_type>
85
+ </link_contact>
86
+ </ncs:transmission_tables>
87
+ </ncs:recruitment_substudy_transmission_envelope>
@@ -0,0 +1,43 @@
1
+ require File.expand_path('../../../../../spec_helper', __FILE__)
2
+
3
+ class NcsNavigator::Warehouse::Transformers::VdrXml
4
+ describe Reader, :use_mdes do
5
+ describe '#each', :slow do
6
+ let(:filename) { File.expand_path('../made_up_vdr_xml.xml', __FILE__) }
7
+ let(:reader) { Reader.new(spec_config, filename) }
8
+ let(:ssu) { reader.detect { |rec| rec.class.name =~ /Ssu$/ } }
9
+ let(:person) { reader.detect { |rec| rec.class.name =~ /Person$/ } }
10
+ let(:link_contact) { reader.detect { |rec| rec.class.name =~ /LinkContact$/ } }
11
+
12
+ it 'verifies the PSU matches the configuration'
13
+ it 'verifies the specification version matches the runtime MDES version'
14
+
15
+ it 'yields all records' do
16
+ reader.to_a.size.should == 6
17
+ end
18
+
19
+ it 'yields the records using their model classes' do
20
+ reader.collect { |rec| rec.class.name.demodulize }.should ==
21
+ %w(StudyCenter Psu Ssu ListingUnit Person LinkContact)
22
+ end
23
+
24
+ it 'reads attribute values' do
25
+ ssu.ssu_name.should == 'The unluckiest SSU'
26
+ end
27
+
28
+ it 'converts a -3 FK to no assocation' do
29
+ person.new_address_id.should be_nil
30
+ end
31
+
32
+ describe 'with a blank variable value' do
33
+ it 'converts a blank FK to no association' do
34
+ link_contact.instrument_id.should be_nil
35
+ end
36
+
37
+ it 'leaves another blank value as blank' do
38
+ person.first_name.should == ''
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,45 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ module NcsNavigator::Warehouse::Transformers
4
+ describe VdrXml do
5
+ let(:config) { NcsNavigator::Warehouse::Configuration.new }
6
+
7
+ shared_examples 'a VDR transformer' do
8
+ it 'returns a transformer' do
9
+ subject.should respond_to(:transform)
10
+ end
11
+
12
+ it 'uses a VDR reader as the enumerable' do
13
+ subject.enum.should be_a VdrXml::Reader
14
+ end
15
+ end
16
+
17
+ describe '.from_file' do
18
+ let(:path) { File.expand_path('../vdr_xml/made_up_vdr_xml.xml', __FILE__) }
19
+ subject { VdrXml.from_file(config, path) }
20
+
21
+ it 'uses the given filename' do
22
+ subject.enum.filename.should == path
23
+ end
24
+
25
+ include_examples 'a VDR transformer'
26
+ end
27
+
28
+ describe '.from_most_recent_file' do
29
+ let(:path) { tmpdir('contractor-files') }
30
+ subject { VdrXml.from_most_recent_file(config, Dir[File.join(path, '*')]) }
31
+
32
+ before do
33
+ system("touch -t 02030405 '#{path}/a'")
34
+ system("touch -t 02040405 '#{path}/b'")
35
+ system("touch -t 02020405 '#{path}/c'")
36
+ end
37
+
38
+ it 'uses the most recent filename from the list' do
39
+ subject.enum.filename.should == File.join(path, 'b')
40
+ end
41
+
42
+ include_examples 'a VDR transformer'
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,108 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ require 'zip/zip'
4
+
5
+ module NcsNavigator::Warehouse
6
+ describe XmlEmitter, :use_mdes do
7
+ let(:filename) { tmpdir + 'export.xml' }
8
+ let(:xml) {
9
+ XmlEmitter.new(spec_config, filename).emit_xml
10
+ Nokogiri::XML(File.read(filename))
11
+ }
12
+
13
+ def person_model
14
+ spec_config.models_module.const_get(:Person)
15
+ end
16
+
17
+ before do
18
+ spec_config.models_module.mdes_order.each do |model|
19
+ model.stub!(:all).and_return([])
20
+ end
21
+ end
22
+
23
+ # Most of the details of the XML are tested on the MdesModel mixin
24
+ describe 'the generated XML', :slow do
25
+ it 'includes the SC from the configuration' do
26
+ xml.xpath('//sc_id').text.should == '2000042'
27
+ end
28
+
29
+ it 'includes the PSU from the configuration' do
30
+ xml.xpath('//psu_id').text.should == '2000423'
31
+ end
32
+
33
+ it 'includes the appropriate specification version' do
34
+ xml.xpath('//specification_version').text.
35
+ should == spec_config.mdes.specification_version
36
+ end
37
+
38
+ describe 'with actual data' do
39
+ before do
40
+ person_model.should_receive(:all).and_return([
41
+ person_model.new(:person_id => 'XQ4'),
42
+ person_model.new(:person_id => 'QX9')
43
+ ])
44
+ end
45
+
46
+ it 'contains records for all models' do
47
+ xml.xpath('//person').size.should == 2
48
+ end
49
+
50
+ it 'contains the right records' do
51
+ xml.xpath('//person/person_id').collect { |e| e.text.strip }.should == %w(XQ4 QX9)
52
+ end
53
+ end
54
+ end
55
+
56
+ describe 'the generated ZIP file', :slow do
57
+ let(:expected_zipfile) { Pathname.new(filename.to_s + '.zip') }
58
+
59
+ before do
60
+ xml # for side effects
61
+ end
62
+
63
+ it 'exists' do
64
+ expected_zipfile.should be_readable
65
+ end
66
+
67
+ it 'contains just the XML file' do
68
+ contents = []
69
+ Zip::ZipFile.foreach(expected_zipfile) do |entry|
70
+ contents << entry.name
71
+ end
72
+ contents.should == [ filename.basename.to_s ]
73
+ end
74
+
75
+ it 'can be opened by something other than rubyzip' do
76
+ `which unzip`
77
+ pending "unzip is not available" unless $? == 0
78
+
79
+ `unzip -l '#{expected_zipfile}' 2>&1`.should =~ /#{filename.basename}\s/
80
+ $?.should == 0
81
+ end
82
+ end
83
+
84
+ describe 'the default filename', :slow, :use_mdes do
85
+ subject { XmlEmitter.new(spec_config, nil).filename }
86
+
87
+ before do
88
+ pending "ncs_mdes doesn't work on JRuby" if RUBY_PLATFORM == 'java'
89
+
90
+ # Need an actual PSU ID for the default filename code to work
91
+ NcsNavigator.configuration.psus.first.id = '20000216'
92
+
93
+ # Time.parse uses Time.now internally, so this needs to be
94
+ # defined before starting to register the mock.
95
+ t = Time.parse('2011-07-28')
96
+ Time.should_receive(:now).and_return(t)
97
+ end
98
+
99
+ it 'is county_name-DATE.xml' do
100
+ subject.to_s.should == 'bear_lake-20110728.xml'
101
+ end
102
+
103
+ it 'is a Pathname' do
104
+ subject.should be_a Pathname
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ module NcsNavigator
4
+ describe Warehouse, :modifies_warehouse_state do
5
+ describe '.env' do
6
+ before do
7
+ clear_warehouse_state
8
+ end
9
+
10
+ it 'defaults to "development"' do
11
+ Warehouse.env.should == 'development'
12
+ end
13
+
14
+ it 'can be specified in the runtime environment' do
15
+ ENV['NCS_NAVIGATOR_ENV'] = 'staging'
16
+ Warehouse.env.should == 'staging'
17
+ end
18
+
19
+ it 'can be set explicitly' do
20
+ Warehouse.env = 'prod'
21
+ Warehouse.env.should == 'prod'
22
+ end
23
+ end
24
+
25
+ describe '.bcdatabase' do
26
+ before do
27
+ clear_warehouse_state
28
+ end
29
+
30
+ it 'has a default value' do
31
+ Warehouse.bcdatabase.should be_a Bcdatabase::DatabaseConfigurations
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,84 @@
1
+ require 'rspec'
2
+ require 'fakefs/spec_helpers'
3
+
4
+ $LOAD_PATH.push File.expand_path('../../lib', __FILE__)
5
+
6
+ require 'ncs_navigator/warehouse'
7
+ require 'ncs_navigator/configuration'
8
+
9
+ $LOAD_PATH.push File.expand_path('..', __FILE__)
10
+
11
+ require 'global_state_helper'
12
+
13
+ require 'data_mapper'
14
+
15
+ RSpec.configure do |config|
16
+ config.treat_symbols_as_metadata_keys_with_true_values = true
17
+
18
+ ###### bcdatabase
19
+
20
+ config.before(:all) do
21
+ NcsNavigator::Warehouse.bcdatabase =
22
+ Bcdatabase.load(File.expand_path('../bcdatabase', __FILE__), :transforms => [:datamapper])
23
+ end
24
+
25
+ ###### MDES model loading
26
+
27
+ # Each test run can only operate against one version of the MDES at
28
+ # a time. When the system supports more than one version, the CI
29
+ # build should be set up to run with this environment variable set
30
+ # with each supported version.
31
+ def spec_mdes_version
32
+ ENV['SPEC_MDES_VERSION'] || NcsNavigator::Warehouse::DEFAULT_MDES_VERSION
33
+ end
34
+
35
+ ##
36
+ # A mostly-default configuration to use in tests of objects that
37
+ # rely on the MDES specification so as to avoid initializing it
38
+ # multiple times.
39
+ def spec_config
40
+ @spec_config || fail("Flag specs that use spec_config with :use_mdes")
41
+ end
42
+
43
+ config.before(:each, :use_mdes) do
44
+ @spec_config ||= NcsNavigator::Warehouse::Configuration.new.tap do |c|
45
+ c.mdes_version = spec_mdes_version
46
+ c.output_level = :quiet
47
+ c.log_file = tmpdir + 'spec.log'
48
+ end
49
+ end
50
+
51
+ ###### modifies_warehouse_state
52
+
53
+ config.before(:each, :modifies_warehouse_state) do
54
+ @global_state_preserver = NcsNavigator::Warehouse::Spec::GlobalStatePreserver.new.save
55
+ end
56
+
57
+ def clear_warehouse_state
58
+ @global_state_preserver.clear
59
+ end
60
+
61
+ config.after(:each, :modifies_warehouse_state) do
62
+ @global_state_preserver.restore
63
+ end
64
+
65
+ ###### tmpdir
66
+
67
+ config.after do
68
+ @tmpdir.rmtree if @tmpdir && !ENV['KEEP_TMP']
69
+ end
70
+
71
+ # @return [Pathname] the path to an existing temporary director
72
+ def tmpdir(*path)
73
+ @tmpdir ||= Pathname.new(File.expand_path('../../tmp', __FILE__)).
74
+ tap { |p| p.mkpath }
75
+ if path.empty?
76
+ @tmpdir
77
+ else
78
+ @tmpdir.join(*path).tap { |p| p.mkpath }
79
+ end
80
+ end
81
+ end
82
+
83
+ NcsNavigator.configuration =
84
+ NcsNavigator::Configuration.new(File.expand_path('../navigator.ini', __FILE__))
@@ -0,0 +1,2 @@
1
+ PSU_ID, AREA, SSU_ID, SSU_NAME, TSU_ID, TSU_NAME
2
+ 2000423, Uptown, 42, UPT-42, 42-3, UPT-42X