ncs_mdes_warehouse 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/.rvmrc +1 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +13 -0
- data/README.md +154 -0
- data/Rakefile +45 -0
- data/bin/mdes-wh +21 -0
- data/ci-exec.sh +45 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/address.rb +101 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit.rb +365 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_2.rb +359 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_baby_name.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_baby_name_2.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_decorate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_decorate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li.rb +374 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li_baby_name.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li_decorate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_li_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_renovate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/birth_visit_renovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/contact.rb +77 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/drf_therm_verification.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/dwelling_unit.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother.rb +347 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_cond.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_detail.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_habits.rb +164 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_lice.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_mold.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_otc.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_pet_type.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_prescr.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_saq.rb +257 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/eighteen_mth_mother_suppl.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/email.rb +74 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment_prob_log.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/event.rb +68 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1.rb +374 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1_cancer.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1_educ.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/father_pv1_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration.rb +239 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration_age_elig.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration_hidden_du.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_enumeration_pregnant.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_inventory.rb +203 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_inventory_age.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_inventory_age_elig.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/household_unit.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/incident.rb +98 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/incident_media.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/incident_unanticipated.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/institution.rb +68 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/instrument.rb +74 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/internet_usage.rb +92 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/internet_usage_participate.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_contact.rb +41 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_household_dwelling.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_household.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_institute.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_participant.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/link_person_provider.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/listing_unit.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/low_high_script.rb +119 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/nine_mth_mother.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/nine_mth_mother_detail.rb +143 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt.rb +128 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_dutype.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_noaccess.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_refusal.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/non_interview_rpt_vacant.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach.rb +98 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_eval.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_lang2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_staff.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/outreach_target.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_auth.rb +44 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_consent.rb +86 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_consent_sample.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_rvis.rb +74 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/participant_vis_consent.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment.rb +275 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_2.rb +275 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_info_source.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_info_source_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_source.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_source_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_svc.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pb_recruitment_prov_svc_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/person.rb +113 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/person_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_cati.rb +95 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_details.rb +41 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_saq.rb +92 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ppg_status_history.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg.rb +422 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_cool.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_heat2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_pdecorate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_prenovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_saq.rb +116 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/pre_preg_sp_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/prec_therm_cert.rb +41 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_2.rb +362 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_know_ncs.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_know_ncs_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_eh_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi.rb +371 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_2.rb +380 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_know_ncs.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_know_ncs_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_hi_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb.rb +371 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_2.rb +380 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_know_ncs.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_know_ncs_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_screen_pb_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1.rb +521 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_2.rb +497 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_commute.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_commute_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_cool.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_cool_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_diagnose_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_diagnose_2_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_heat2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_heat2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_local_trav.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_local_trav_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_nonenglish2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pdecorate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pdecorate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pet_type.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_pet_type_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_prenovate2_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_prenovate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_prenovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_room_mold.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_room_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_saq.rb +188 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_saq_2.rb +233 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_sp_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_1_sp_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2.rb +452 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_2.rb +440 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_cool.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_cool_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_diagnose_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_diagnose_2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_heat2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_heat2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_pdecorate2_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_pdecorate2_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_prenovate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_prenovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_room_mold.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_room_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_saq.rb +116 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_2_saq_2.rb +116 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li_2.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li_cool.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/preg_visit_li_cool_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/provider.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/provider_role.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/psu.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ref_freezer_verification.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_receipt_confirm.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_receipt_store.rb +65 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_shipping.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_mother.rb +278 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_mother_detail.rb +263 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_mother_pet.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq.rb +218 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_2.rb +218 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_formula_type.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_formula_type_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_supp.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_supp_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_water.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/six_mth_saq_water_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood.rb +194 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_draw.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_hemolyze.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_tube.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_blood_tube_comments.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_cord_blood.rb +110 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_cord_blood_specimen.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_equipment.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_pickup.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_receipt.rb +77 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_shipping.rb +56 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_spsc_info.rb +26 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_storage.rb +59 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_urine.rb +110 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/srsc_info.rb +26 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ssu.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff.rb +59 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_cert_training.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_exp_data_cllctn_tasks.rb +44 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_exp_mngmnt_tasks.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_language.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_validation.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/staff_weekly_expense.rb +44 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/study_center.rb +26 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/subsample_doc.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf.rb +152 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_blank_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_dup_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_dup_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_n_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_reason_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_reason_filled2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_sample.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twf_subsamples.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq.rb +143 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_blank_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_dup_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_dup_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_n_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_reason_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_reason_filled2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_sample.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tap_water_twq_subsamples.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/telephone.rb +83 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother.rb +89 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother_child_detail.rb +59 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother_child_habits.rb +185 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/three_mth_mother_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/trh_meter_calibration.rb +77 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/tsu.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother.rb +299 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_detail.rb +302 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_lice.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_mother_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq.rb +293 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_2.rb +293 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_brand.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_brand_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_type.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_formula_type_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_supplement.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_supplement_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_water.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twelve_mth_saq_water_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother.rb +347 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_cond.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_detail.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_habits.rb +194 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_mold.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_otc.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_prescr.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_mother_suppl.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_pet_type.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/twenty_four_mth_saq.rb +242 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/vacuum_bag.rb +131 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/vacuum_bag_outside.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/validation_ins.rb +233 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero.rb +551 -0
- data/init.rakefile +27 -0
- data/lib/ncs_navigator/warehouse/cli.rb +57 -0
- data/lib/ncs_navigator/warehouse/configuration/file_evaluator.rb +60 -0
- data/lib/ncs_navigator/warehouse/configuration.rb +315 -0
- data/lib/ncs_navigator/warehouse/data_mapper.rb +50 -0
- data/lib/ncs_navigator/warehouse/data_mapper_patches.rb +23 -0
- data/lib/ncs_navigator/warehouse/database_initializer.rb +100 -0
- data/lib/ncs_navigator/warehouse/models/mdes_model.rb +76 -0
- data/lib/ncs_navigator/warehouse/models/mdes_model_collection.rb +64 -0
- data/lib/ncs_navigator/warehouse/models.rb +11 -0
- data/lib/ncs_navigator/warehouse/table_modeler/mdes_ext.rb +141 -0
- data/lib/ncs_navigator/warehouse/table_modeler/model_template.rb.erb +31 -0
- data/lib/ncs_navigator/warehouse/table_modeler.rb +128 -0
- data/lib/ncs_navigator/warehouse/transformers/database.rb +236 -0
- data/lib/ncs_navigator/warehouse/transformers/enum_transformer.rb +58 -0
- data/lib/ncs_navigator/warehouse/transformers/transform_status.rb +23 -0
- data/lib/ncs_navigator/warehouse/transformers/vdr_xml/reader.rb +118 -0
- data/lib/ncs_navigator/warehouse/transformers/vdr_xml.rb +26 -0
- data/lib/ncs_navigator/warehouse/transformers.rb +19 -0
- data/lib/ncs_navigator/warehouse/updating_shell.rb +57 -0
- data/lib/ncs_navigator/warehouse/version.rb +5 -0
- data/lib/ncs_navigator/warehouse/xml_emitter.rb +138 -0
- data/lib/ncs_navigator/warehouse.rb +63 -0
- data/ncs_mdes_warehouse.gemspec +39 -0
- data/sample_configuration.rb +48 -0
- data/spec/bcdatabase/local_postgresql.yml +7 -0
- data/spec/bcdatabase/public_ci_postgresql9.yml +7 -0
- data/spec/bcdatabase/test_sqlite.yml +5 -0
- data/spec/global_state_helper.rb +116 -0
- data/spec/navigator.ini +12 -0
- data/spec/ncs_navigator/warehouse/configuration_spec.rb +409 -0
- data/spec/ncs_navigator/warehouse/models/mdes_model_spec.rb +170 -0
- data/spec/ncs_navigator/warehouse/table_modeler_spec.rb +562 -0
- data/spec/ncs_navigator/warehouse/transformers/database_spec.rb +194 -0
- data/spec/ncs_navigator/warehouse/transformers/enum_transformer_spec.rb +94 -0
- data/spec/ncs_navigator/warehouse/transformers/vdr_xml/made_up_vdr_xml.xml +87 -0
- data/spec/ncs_navigator/warehouse/transformers/vdr_xml/reader_spec.rb +43 -0
- data/spec/ncs_navigator/warehouse/transformers/vdr_xml_spec.rb +45 -0
- data/spec/ncs_navigator/warehouse/xml_emitter_spec.rb +108 -0
- data/spec/ncs_navigator/warehouse_spec.rb +35 -0
- data/spec/spec_helper.rb +84 -0
- data/spec/test_samples.csv +2 -0
- 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
|
data/spec/spec_helper.rb
ADDED
@@ -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__))
|