rubyhealthvault 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +52 -0
- data/README +19 -0
- data/Rakefile +149 -0
- data/bin/certs/HelloWorld-SDK_ID-05a059c9-c309-46af-9b86-b06d42510550.pfx +0 -0
- data/bin/certs/helloWorld.pem +52 -0
- data/bin/example.rb +80 -0
- data/bin/hv.log +118 -0
- data/lib/application.rb +37 -0
- data/lib/code_generation/xsd_parser.rb +376 -0
- data/lib/config.rb +28 -0
- data/lib/connection.rb +61 -0
- data/lib/healthvault.rb +2 -0
- data/lib/request.rb +113 -0
- data/lib/response.rb +50 -0
- data/lib/templates/complex_type_template.erb +64 -0
- data/lib/templates/simple_type_template.erb +65 -0
- data/lib/templates/thing_class_extension_template.erb +22 -0
- data/lib/utils/crypto_utils.rb +69 -0
- data/lib/utils/string_utils.rb +35 -0
- data/lib/wc_data/complex_type.rb +249 -0
- data/lib/wc_data/generated/application/app.rb +217 -0
- data/lib/wc_data/generated/application/app_id_and_incr_auth.rb +118 -0
- data/lib/wc_data/generated/application/app_large_logo.rb +56 -0
- data/lib/wc_data/generated/application/app_large_logo_info.rb +66 -0
- data/lib/wc_data/generated/application/app_persistent_tokens.rb +64 -0
- data/lib/wc_data/generated/application/app_small_logo.rb +56 -0
- data/lib/wc_data/generated/application/app_small_logo_info.rb +66 -0
- data/lib/wc_data/generated/application/app_with_logos.rb +291 -0
- data/lib/wc_data/generated/application/public_key.rb +43 -0
- data/lib/wc_data/generated/application/public_keys.rb +48 -0
- data/lib/wc_data/generated/application/statement.rb +30 -0
- data/lib/wc_data/generated/application/statement_info.rb +66 -0
- data/lib/wc_data/generated/auth/app_record_auth_action.rb +61 -0
- data/lib/wc_data/generated/auth/associated_cred_info.rb +70 -0
- data/lib/wc_data/generated/auth/auth.rb +44 -0
- data/lib/wc_data/generated/auth/auth_session_credential.rb +68 -0
- data/lib/wc_data/generated/auth/auth_session_sub_credential.rb +45 -0
- data/lib/wc_data/generated/auth/auth_xml.rb +44 -0
- data/lib/wc_data/generated/auth/federating_cred.rb +48 -0
- data/lib/wc_data/generated/auth/rule.rb +187 -0
- data/lib/wc_data/generated/auth/rules.rb +48 -0
- data/lib/wc_data/generated/auth/set.rb +70 -0
- data/lib/wc_data/generated/auth/simple_card_space_credential.rb +48 -0
- data/lib/wc_data/generated/auth/simple_passport_credential.rb +47 -0
- data/lib/wc_data/generated/auth/simple_user_pass_credential.rb +48 -0
- data/lib/wc_data/generated/auth/textual_permissions.rb +66 -0
- data/lib/wc_data/generated/auth/textual_permissions_type.rb +81 -0
- data/lib/wc_data/generated/auth/textual_rule.rb +154 -0
- data/lib/wc_data/generated/auth/token.rb +90 -0
- data/lib/wc_data/generated/auth/user_pass_auth_session_cred.rb +92 -0
- data/lib/wc_data/generated/auth/user_pass_cred.rb +70 -0
- data/lib/wc_data/generated/dates/approx_date.rb +82 -0
- data/lib/wc_data/generated/dates/approx_date_time.rb +62 -0
- data/lib/wc_data/generated/dates/date.rb +86 -0
- data/lib/wc_data/generated/dates/date_time.rb +82 -0
- data/lib/wc_data/generated/dates/day.rb +56 -0
- data/lib/wc_data/generated/dates/hour.rb +56 -0
- data/lib/wc_data/generated/dates/millisecond.rb +56 -0
- data/lib/wc_data/generated/dates/minute.rb +56 -0
- data/lib/wc_data/generated/dates/month.rb +56 -0
- data/lib/wc_data/generated/dates/second.rb +56 -0
- data/lib/wc_data/generated/dates/structured_approx_date.rb +82 -0
- data/lib/wc_data/generated/dates/time.rb +102 -0
- data/lib/wc_data/generated/dates/year.rb +56 -0
- data/lib/wc_data/generated/methods/add_application/info.rb +375 -0
- data/lib/wc_data/generated/methods/create_authenticated_session_token/auth_token_info.rb +72 -0
- data/lib/wc_data/generated/methods/create_authenticated_session_token/credential.rb +88 -0
- data/lib/wc_data/generated/methods/create_authenticated_session_token/info.rb +50 -0
- data/lib/wc_data/generated/methods/create_connect_request/info.rb +136 -0
- data/lib/wc_data/generated/methods/delete_open_query/info.rb +50 -0
- data/lib/wc_data/generated/methods/delete_pending_connect_request/info.rb +49 -0
- data/lib/wc_data/generated/methods/get_authorized_connect_requests/info.rb +48 -0
- data/lib/wc_data/generated/methods/get_authorized_records/info.rb +52 -0
- data/lib/wc_data/generated/methods/get_open_query_info/info.rb +50 -0
- data/lib/wc_data/generated/methods/get_person_info/info.rb +48 -0
- data/lib/wc_data/generated/methods/get_thing_type/info.rb +118 -0
- data/lib/wc_data/generated/methods/get_thing_type/thing_type_section_spec.rb +63 -0
- data/lib/wc_data/generated/methods/get_things/info.rb +51 -0
- data/lib/wc_data/generated/methods/get_things/thing_filter_spec.rb +296 -0
- data/lib/wc_data/generated/methods/get_things/thing_format_spec.rb +75 -0
- data/lib/wc_data/generated/methods/get_things/thing_request_group.rb +197 -0
- data/lib/wc_data/generated/methods/get_things/thing_section_spec.rb +67 -0
- data/lib/wc_data/generated/methods/get_vocabulary/info.rb +48 -0
- data/lib/wc_data/generated/methods/get_vocabulary/vocabulary_parameters.rb +73 -0
- data/lib/wc_data/generated/methods/put_things/info.rb +51 -0
- data/lib/wc_data/generated/methods/query_permissions/info.rb +51 -0
- data/lib/wc_data/generated/methods/remove_things/info.rb +52 -0
- data/lib/wc_data/generated/methods/response/add_application/info.rb +51 -0
- data/lib/wc_data/generated/methods/response/any/info.rb +52 -0
- data/lib/wc_data/generated/methods/response/create_authenticated_session_token/app_auth_token_absence_reason.rb +72 -0
- data/lib/wc_data/generated/methods/response/create_authenticated_session_token/auth_token_absence_reason.rb +49 -0
- data/lib/wc_data/generated/methods/response/create_authenticated_session_token/info.rb +78 -0
- data/lib/wc_data/generated/methods/response/create_connect_request/info.rb +52 -0
- data/lib/wc_data/generated/methods/response/delete_open_query/info.rb +52 -0
- data/lib/wc_data/generated/methods/response/get_application_settings/app_settings.rb +54 -0
- data/lib/wc_data/generated/methods/response/get_application_settings/info.rb +70 -0
- data/lib/wc_data/generated/methods/response/get_authorized_connect_requests/connect_request.rb +114 -0
- data/lib/wc_data/generated/methods/response/get_authorized_connect_requests/info.rb +72 -0
- data/lib/wc_data/generated/methods/response/get_authorized_records/info.rb +53 -0
- data/lib/wc_data/generated/methods/response/get_people_for_record/info.rb +76 -0
- data/lib/wc_data/generated/methods/response/get_person_info/info.rb +52 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/configuration_entry.rb +71 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/info.rb +141 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/platform.rb +98 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/sdk_assembly.rb +94 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/shell.rb +95 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/shell_redirect_token.rb +93 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/xml_method.rb +75 -0
- data/lib/wc_data/generated/methods/response/get_service_definition/xml_method_version.rb +92 -0
- data/lib/wc_data/generated/methods/response/get_thing_type/column.rb +130 -0
- data/lib/wc_data/generated/methods/response/get_thing_type/columns.rb +52 -0
- data/lib/wc_data/generated/methods/response/get_thing_type/image.rb +71 -0
- data/lib/wc_data/generated/methods/response/get_thing_type/info.rb +53 -0
- data/lib/wc_data/generated/methods/response/get_thing_type/thing_type_info.rb +232 -0
- data/lib/wc_data/generated/methods/response/get_thing_type/transform_source.rb +72 -0
- data/lib/wc_data/generated/methods/response/get_thing_type/transforms.rb +52 -0
- data/lib/wc_data/generated/methods/response/get_things/info.rb +54 -0
- data/lib/wc_data/generated/methods/response/get_things/thing_response_group.rb +118 -0
- data/lib/wc_data/generated/methods/response/get_things/unprocessed_thing_key_info.rb +95 -0
- data/lib/wc_data/generated/methods/response/get_vocabulary/info.rb +76 -0
- data/lib/wc_data/generated/methods/response/put_things/info.rb +53 -0
- data/lib/wc_data/generated/methods/response/query_permissions/info.rb +54 -0
- data/lib/wc_data/generated/methods/response/query_permissions/permissions.rb +53 -0
- data/lib/wc_data/generated/methods/response/query_permissions/thing_type_permission.rb +89 -0
- data/lib/wc_data/generated/methods/response/search_vocabulary/info.rb +74 -0
- data/lib/wc_data/generated/methods/save_open_query/info.rb +227 -0
- data/lib/wc_data/generated/methods/search_vocabulary/info.rb +70 -0
- data/lib/wc_data/generated/methods/search_vocabulary/vocabulary_search_params.rb +69 -0
- data/lib/wc_data/generated/methods/search_vocabulary/vocabulary_search_string.rb +68 -0
- data/lib/wc_data/generated/methods/send_insecure_message/info.rb +155 -0
- data/lib/wc_data/generated/methods/send_insecure_message_from_application/from_mailbox.rb +71 -0
- data/lib/wc_data/generated/methods/send_insecure_message_from_application/info.rb +178 -0
- data/lib/wc_data/generated/methods/set_application_settings/app_settings.rb +52 -0
- data/lib/wc_data/generated/methods/set_application_settings/info.rb +48 -0
- data/lib/wc_data/generated/methods/update_application/info.rb +384 -0
- data/lib/wc_data/generated/methods/update_external_id/info.rb +70 -0
- data/lib/wc_data/generated/record/active_app_authorization.rb +196 -0
- data/lib/wc_data/generated/record/active_person_authorization.rb +290 -0
- data/lib/wc_data/generated/record/active_person_authorization_no_ids.rb +250 -0
- data/lib/wc_data/generated/record/authorized_record_state.rb +53 -0
- data/lib/wc_data/generated/record/non_active_authorization.rb +340 -0
- data/lib/wc_data/generated/record/non_active_authorization_no_ids.rb +300 -0
- data/lib/wc_data/generated/request/authenticated_session_info.rb +88 -0
- data/lib/wc_data/generated/request/header.rb +274 -0
- data/lib/wc_data/generated/request/info.rb +48 -0
- data/lib/wc_data/generated/request/offline_person_info.rb +46 -0
- data/lib/wc_data/generated/request/request.rb +86 -0
- data/lib/wc_data/generated/request/xsl.rb +64 -0
- data/lib/wc_data/generated/thing/access_avenue.rb +49 -0
- data/lib/wc_data/generated/thing/aerobic/aerobic_session.rb +112 -0
- data/lib/wc_data/generated/thing/aerobic_profile/aerobic_profile.rb +153 -0
- data/lib/wc_data/generated/thing/aerobic_profile/heartrate_zone.rb +90 -0
- data/lib/wc_data/generated/thing/aerobic_profile/heartrate_zone_group.rb +72 -0
- data/lib/wc_data/generated/thing/aerobic_profile/max_vo2.rb +68 -0
- data/lib/wc_data/generated/thing/aerobic_profile/zone_boundary.rb +68 -0
- data/lib/wc_data/generated/thing/aerobic_weekly/aerobic_weekly.rb +72 -0
- data/lib/wc_data/generated/thing/allergic_episode/allergic_episode.rb +108 -0
- data/lib/wc_data/generated/thing/allergy/allergy.rb +186 -0
- data/lib/wc_data/generated/thing/annotation/annotation.rb +144 -0
- data/lib/wc_data/generated/thing/application/app_specific.rb +137 -0
- data/lib/wc_data/generated/thing/appointment/appointment.rb +166 -0
- data/lib/wc_data/generated/thing/audit.rb +150 -0
- data/lib/wc_data/generated/thing/audit_action.rb +53 -0
- data/lib/wc_data/generated/thing/basic/basic.rb +180 -0
- data/lib/wc_data/generated/thing/basic/birthyear.rb +58 -0
- data/lib/wc_data/generated/thing/basic/country.rb +45 -0
- data/lib/wc_data/generated/thing/basic/firstdow.rb +58 -0
- data/lib/wc_data/generated/thing/basic/gender.rb +51 -0
- data/lib/wc_data/generated/thing/blood_glucose/blood_glucose.rb +172 -0
- data/lib/wc_data/generated/thing/blood_pressure/blood_pressure.rb +133 -0
- data/lib/wc_data/generated/thing/cardiac_profile/cardiac_profile.rb +209 -0
- data/lib/wc_data/generated/thing/cholesterol_profile/cholesterol_profile.rb +129 -0
- data/lib/wc_data/generated/thing/common.rb +126 -0
- data/lib/wc_data/generated/thing/concern/concern.rb +71 -0
- data/lib/wc_data/generated/thing/condition/condition.rb +127 -0
- data/lib/wc_data/generated/thing/contact/contact.rb +49 -0
- data/lib/wc_data/generated/thing/contraindication/contraindication.rb +129 -0
- data/lib/wc_data/generated/thing/daily_medication_usage/daily_medication_usage.rb +218 -0
- data/lib/wc_data/generated/thing/data_other.rb +82 -0
- data/lib/wc_data/generated/thing/data_xml.rb +80 -0
- data/lib/wc_data/generated/thing/diabetic_profile/diabetic_profile.rb +92 -0
- data/lib/wc_data/generated/thing/diabetic_profile/target_glucose_zone.rb +90 -0
- data/lib/wc_data/generated/thing/diabetic_profile/target_glucose_zone_group.rb +72 -0
- data/lib/wc_data/generated/thing/diabetic_profile/zone_boundary.rb +68 -0
- data/lib/wc_data/generated/thing/dietary_intake_daily/dietary_intake_daily.rb +249 -0
- data/lib/wc_data/generated/thing/directive/directive.rb +343 -0
- data/lib/wc_data/generated/thing/discharge_summary/discharge_summary.rb +366 -0
- data/lib/wc_data/generated/thing/effective_permissions.rb +66 -0
- data/lib/wc_data/generated/thing/emotion/emotion.rb +109 -0
- data/lib/wc_data/generated/thing/encounter/encounter.rb +143 -0
- data/lib/wc_data/generated/thing/equipment/device.rb +163 -0
- data/lib/wc_data/generated/thing/extension.rb +123 -0
- data/lib/wc_data/generated/thing/family_history/family_history.rb +203 -0
- data/lib/wc_data/generated/thing/family_history_condition/family_history_condition.rb +49 -0
- data/lib/wc_data/generated/thing/family_history_person/family_history_person.rb +107 -0
- data/lib/wc_data/generated/thing/file/file.rb +90 -0
- data/lib/wc_data/generated/thing/guid_and_name.rb +66 -0
- data/lib/wc_data/generated/thing/hb_a1_c/hb_a1_c.rb +111 -0
- data/lib/wc_data/generated/thing/healthcare_proxy/healthcare_proxy.rb +144 -0
- data/lib/wc_data/generated/thing/height/height.rb +71 -0
- data/lib/wc_data/generated/thing/immunization/immunization.rb +244 -0
- data/lib/wc_data/generated/thing/inhaler/alert.rb +74 -0
- data/lib/wc_data/generated/thing/inhaler/asthma_inhaler.rb +272 -0
- data/lib/wc_data/generated/thing/inhaler/dow.rb +58 -0
- data/lib/wc_data/generated/thing/inhaler/purpose.rb +55 -0
- data/lib/wc_data/generated/thing/inhaler_use/asthma_inhaler_use.rb +152 -0
- data/lib/wc_data/generated/thing/insulin/insulin_injection.rb +93 -0
- data/lib/wc_data/generated/thing/insulin_injection_use/diabetes_insulin_injection_use.rb +114 -0
- data/lib/wc_data/generated/thing/lab_test_results/lab_test_results.rb +89 -0
- data/lib/wc_data/generated/thing/life_goal/life_goal.rb +68 -0
- data/lib/wc_data/generated/thing/link/link.rb +68 -0
- data/lib/wc_data/generated/thing/medication/dose_value.rb +107 -0
- data/lib/wc_data/generated/thing/medication/medication.rb +491 -0
- data/lib/wc_data/generated/thing/microbiology/microbiology_lab_results.rb +186 -0
- data/lib/wc_data/generated/thing/password/protected/package/algorithm_name.rb +59 -0
- data/lib/wc_data/generated/thing/password/protected/package/package_encryption_type.rb +71 -0
- data/lib/wc_data/generated/thing/password/protected/package/password_protected_package.rb +53 -0
- data/lib/wc_data/generated/thing/password/protected/package/pbe_parameters_type.rb +97 -0
- data/lib/wc_data/generated/thing/payer/payer.rb +265 -0
- data/lib/wc_data/generated/thing/personal/personal.rb +303 -0
- data/lib/wc_data/generated/thing/personal_image/personal_image.rb +28 -0
- data/lib/wc_data/generated/thing/problem/importance.rb +45 -0
- data/lib/wc_data/generated/thing/problem/problem.rb +114 -0
- data/lib/wc_data/generated/thing/procedure/procedure.rb +125 -0
- data/lib/wc_data/generated/thing/radiology_lab_results/radiology_lab_results.rb +106 -0
- data/lib/wc_data/generated/thing/related_thing.rb +88 -0
- data/lib/wc_data/generated/thing/respiratory_profile/respiratory_profile.rb +109 -0
- data/lib/wc_data/generated/thing/sjam/awakening.rb +70 -0
- data/lib/wc_data/generated/thing/sjam/sleep_am.rb +195 -0
- data/lib/wc_data/generated/thing/sjam/wake_state.rb +58 -0
- data/lib/wc_data/generated/thing/sjpm/activity.rb +70 -0
- data/lib/wc_data/generated/thing/sjpm/sleep_pm.rb +162 -0
- data/lib/wc_data/generated/thing/sjpm/sleepiness.rb +58 -0
- data/lib/wc_data/generated/thing/spirometer/spirometer.rb +317 -0
- data/lib/wc_data/generated/thing/spirometer/volume_value.rb +69 -0
- data/lib/wc_data/generated/thing/thing.rb +213 -0
- data/lib/wc_data/generated/thing/thing_key.rb +66 -0
- data/lib/wc_data/generated/thing/thing_state.rb +49 -0
- data/lib/wc_data/generated/thing/thing_type.rb +64 -0
- data/lib/wc_data/generated/thing/types/address.rb +176 -0
- data/lib/wc_data/generated/thing/types/aerobic_lap_session.rb +86 -0
- data/lib/wc_data/generated/thing/types/aerobic_session.rb +745 -0
- data/lib/wc_data/generated/thing/types/aerobic_session_samples.rb +310 -0
- data/lib/wc_data/generated/thing/types/altitude_value.rb +70 -0
- data/lib/wc_data/generated/thing/types/blood_glucose_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/codable_value.rb +74 -0
- data/lib/wc_data/generated/thing/types/coded_value.rb +112 -0
- data/lib/wc_data/generated/thing/types/communication_type.rb +112 -0
- data/lib/wc_data/generated/thing/types/condition.rb +148 -0
- data/lib/wc_data/generated/thing/types/contact.rb +97 -0
- data/lib/wc_data/generated/thing/types/display_value.rb +90 -0
- data/lib/wc_data/generated/thing/types/document_reference_type.rb +112 -0
- data/lib/wc_data/generated/thing/types/double_range.rb +70 -0
- data/lib/wc_data/generated/thing/types/dow.rb +58 -0
- data/lib/wc_data/generated/thing/types/duration_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/email.rb +89 -0
- data/lib/wc_data/generated/thing/types/flow_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/general_measurement.rb +74 -0
- data/lib/wc_data/generated/thing/types/goal.rb +86 -0
- data/lib/wc_data/generated/thing/types/goal_status.rb +55 -0
- data/lib/wc_data/generated/thing/types/insulin_injection_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/lab_result_type.rb +149 -0
- data/lib/wc_data/generated/thing/types/lab_test_result_type.rb +167 -0
- data/lib/wc_data/generated/thing/types/lab_test_result_value_type.rb +99 -0
- data/lib/wc_data/generated/thing/types/lab_test_results_group_type.rb +138 -0
- data/lib/wc_data/generated/thing/types/lab_test_type.rb +209 -0
- data/lib/wc_data/generated/thing/types/language.rb +69 -0
- data/lib/wc_data/generated/thing/types/length_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/name.rb +148 -0
- data/lib/wc_data/generated/thing/types/non_negative_double.rb +45 -0
- data/lib/wc_data/generated/thing/types/one_to_five.rb +58 -0
- data/lib/wc_data/generated/thing/types/organization.rb +106 -0
- data/lib/wc_data/generated/thing/types/pace_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/percentage.rb +58 -0
- data/lib/wc_data/generated/thing/types/person.rb +146 -0
- data/lib/wc_data/generated/thing/types/phone.rb +89 -0
- data/lib/wc_data/generated/thing/types/positive_double.rb +45 -0
- data/lib/wc_data/generated/thing/types/power_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/sample.rb +88 -0
- data/lib/wc_data/generated/thing/types/sample_set.rb +116 -0
- data/lib/wc_data/generated/thing/types/speed_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/structured_measurement.rb +71 -0
- data/lib/wc_data/generated/thing/types/temperature_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/test_result_range.rb +71 -0
- data/lib/wc_data/generated/thing/types/torque_value.rb +69 -0
- data/lib/wc_data/generated/thing/types/weight_value.rb +69 -0
- data/lib/wc_data/generated/thing/vital_signs/vital_sign_result_type.rb +166 -0
- data/lib/wc_data/generated/thing/vital_signs/vital_signs.rb +110 -0
- data/lib/wc_data/generated/thing/weight/weight.rb +70 -0
- data/lib/wc_data/generated/thing/weight_goal/weight_goal.rb +106 -0
- data/lib/wc_data/generated/types/address.rb +162 -0
- data/lib/wc_data/generated/types/app_info.rb +66 -0
- data/lib/wc_data/generated/types/app_server_cred.rb +70 -0
- data/lib/wc_data/generated/types/app_server_cred_info.rb +70 -0
- data/lib/wc_data/generated/types/app_settings.rb +50 -0
- data/lib/wc_data/generated/types/base64_sha1.rb +56 -0
- data/lib/wc_data/generated/types/card_space_cred.rb +50 -0
- data/lib/wc_data/generated/types/char2.rb +56 -0
- data/lib/wc_data/generated/types/codable_value.rb +72 -0
- data/lib/wc_data/generated/types/coded_value.rb +110 -0
- data/lib/wc_data/generated/types/culture.rb +64 -0
- data/lib/wc_data/generated/types/date_range.rb +62 -0
- data/lib/wc_data/generated/types/email.rb +82 -0
- data/lib/wc_data/generated/types/email_address.rb +56 -0
- data/lib/wc_data/generated/types/gender.rb +49 -0
- data/lib/wc_data/generated/types/group.rb +91 -0
- data/lib/wc_data/generated/types/groups.rb +50 -0
- data/lib/wc_data/generated/types/guid.rb +43 -0
- data/lib/wc_data/generated/types/hash_finalized.rb +48 -0
- data/lib/wc_data/generated/types/hash_finalized_data.rb +68 -0
- data/lib/wc_data/generated/types/hmac_algorithm.rb +48 -0
- data/lib/wc_data/generated/types/hmac_algorithm_data.rb +68 -0
- data/lib/wc_data/generated/types/hmac_finalized.rb +48 -0
- data/lib/wc_data/generated/types/hmac_finalized_data.rb +68 -0
- data/lib/wc_data/generated/types/iso3166.rb +1001 -0
- data/lib/wc_data/generated/types/iso4217.rb +733 -0
- data/lib/wc_data/generated/types/iso639_1.rb +585 -0
- data/lib/wc_data/generated/types/language_competency.rb +64 -0
- data/lib/wc_data/generated/types/localized_string.rb +64 -0
- data/lib/wc_data/generated/types/login_name.rb +56 -0
- data/lib/wc_data/generated/types/name_match_type.rb +53 -0
- data/lib/wc_data/generated/types/omb_ethnicity.rb +65 -0
- data/lib/wc_data/generated/types/open_query_info.rb +149 -0
- data/lib/wc_data/generated/types/permission.rb +61 -0
- data/lib/wc_data/generated/types/person_info.rb +214 -0
- data/lib/wc_data/generated/types/phone.rb +82 -0
- data/lib/wc_data/generated/types/positive_long.rb +43 -0
- data/lib/wc_data/generated/types/puid.rb +43 -0
- data/lib/wc_data/generated/types/rcpt_address.rb +69 -0
- data/lib/wc_data/generated/types/rcpt_person.rb +68 -0
- data/lib/wc_data/generated/types/rcpt_record.rb +48 -0
- data/lib/wc_data/generated/types/record.rb +264 -0
- data/lib/wc_data/generated/types/record_state.rb +57 -0
- data/lib/wc_data/generated/types/sig.rb +112 -0
- data/lib/wc_data/generated/types/string1024.rb +56 -0
- data/lib/wc_data/generated/types/string128.rb +56 -0
- data/lib/wc_data/generated/types/string16.rb +56 -0
- data/lib/wc_data/generated/types/string255.rb +56 -0
- data/lib/wc_data/generated/types/string32.rb +56 -0
- data/lib/wc_data/generated/types/string512.rb +56 -0
- data/lib/wc_data/generated/types/string64.rb +56 -0
- data/lib/wc_data/generated/types/stringnz.rb +43 -0
- data/lib/wc_data/generated/types/stringz1024.rb +56 -0
- data/lib/wc_data/generated/types/stringz128.rb +56 -0
- data/lib/wc_data/generated/types/stringz16.rb +56 -0
- data/lib/wc_data/generated/types/stringz255.rb +56 -0
- data/lib/wc_data/generated/types/stringz32.rb +56 -0
- data/lib/wc_data/generated/types/stringz512.rb +56 -0
- data/lib/wc_data/generated/types/stringz64.rb +56 -0
- data/lib/wc_data/generated/types/url.rb +56 -0
- data/lib/wc_data/generated/types/version.rb +56 -0
- data/lib/wc_data/generated/vocab/info_xml.rb +46 -0
- data/lib/wc_data/generated/vocab/vocabulary_code_item.rb +104 -0
- data/lib/wc_data/generated/vocab/vocabulary_code_set.rb +133 -0
- data/lib/wc_data/generated/vocab/vocabulary_key.rb +106 -0
- data/lib/wc_data/generated/vocab/vocabulary_key_info.rb +26 -0
- data/lib/wc_data/init.rb +27 -0
- data/lib/wc_data/raw_info_xml.rb +12 -0
- data/lib/wc_data/simple_type.rb +16 -0
- data/lib/wc_data/thing.rb +78 -0
- data/lib/xsd/bootstrap/request.xsd +107 -0
- data/lib/xsd/bootstrap/response-getservicedefinition.xsd +119 -0
- data/lib/xsd/bootstrap/types.xsd +1117 -0
- data/lib/xsd/common/application.xsd +766 -0
- data/lib/xsd/common/auth.xsd +1093 -0
- data/lib/xsd/common/dates.xsd +510 -0
- data/lib/xsd/common/record.xsd +1160 -0
- data/lib/xsd/common/request.xsd +524 -0
- data/lib/xsd/common/thing.xsd +881 -0
- data/lib/xsd/common/types.xsd +3131 -0
- data/lib/xsd/common/vocab.xsd +359 -0
- data/lib/xsd/requests/method-addapplication.xsd +349 -0
- data/lib/xsd/requests/method-createauthenticatedsessiontoken.xsd +216 -0
- data/lib/xsd/requests/method-createconnectrequest.xsd +143 -0
- data/lib/xsd/requests/method-deleteopenquery.xsd +75 -0
- data/lib/xsd/requests/method-deletependingconnectrequest.xsd +77 -0
- data/lib/xsd/requests/method-getauthorizedconnectrequests.xsd +78 -0
- data/lib/xsd/requests/method-getauthorizedrecords.xsd +82 -0
- data/lib/xsd/requests/method-getopenqueryinfo.xsd +74 -0
- data/lib/xsd/requests/method-getpersoninfo.xsd +80 -0
- data/lib/xsd/requests/method-getthings.xsd +516 -0
- data/lib/xsd/requests/method-getthingtype.xsd +201 -0
- data/lib/xsd/requests/method-getvocabulary.xsd +135 -0
- data/lib/xsd/requests/method-putthings.xsd +80 -0
- data/lib/xsd/requests/method-querypermissions.xsd +79 -0
- data/lib/xsd/requests/method-removethings.xsd +78 -0
- data/lib/xsd/requests/method-saveopenquery.xsd +219 -0
- data/lib/xsd/requests/method-searchvocabulary.xsd +222 -0
- data/lib/xsd/requests/method-sendinsecuremessage.xsd +185 -0
- data/lib/xsd/requests/method-sendinsecuremessagefromapplication.xsd +274 -0
- data/lib/xsd/requests/method-setapplicationsettings.xsd +166 -0
- data/lib/xsd/requests/method-updateapplication.xsd +357 -0
- data/lib/xsd/requests/method-updateexternalid.xsd +84 -0
- data/lib/xsd/responses/response-addapplication.xsd +79 -0
- data/lib/xsd/responses/response-any.xsd +59 -0
- data/lib/xsd/responses/response-createauthenticatedsessiontoken.xsd +167 -0
- data/lib/xsd/responses/response-createconnectrequest.xsd +88 -0
- data/lib/xsd/responses/response-deleteopenquery.xsd +87 -0
- data/lib/xsd/responses/response-getapplicationsettings.xsd +192 -0
- data/lib/xsd/responses/response-getauthorizedconnectrequests.xsd +135 -0
- data/lib/xsd/responses/response-getauthorizedrecords.xsd +76 -0
- data/lib/xsd/responses/response-getopenqueryinfo.xsd +64 -0
- data/lib/xsd/responses/response-getpeopleforrecord.xsd +95 -0
- data/lib/xsd/responses/response-getpersoninfo.xsd +87 -0
- data/lib/xsd/responses/response-getservicedefinition.xsd +515 -0
- data/lib/xsd/responses/response-getthings.xsd +198 -0
- data/lib/xsd/responses/response-getthingtype.xsd +457 -0
- data/lib/xsd/responses/response-getvocabulary.xsd +93 -0
- data/lib/xsd/responses/response-putthings.xsd +63 -0
- data/lib/xsd/responses/response-querypermissions.xsd +182 -0
- data/lib/xsd/responses/response-saveopenquery.xsd +62 -0
- data/lib/xsd/responses/response-searchvocabulary.xsd +90 -0
- data/lib/xsd/things/Advance Directive.xsd +60 -0
- data/lib/xsd/things/Aerobic Exercise Session.xsd +19 -0
- data/lib/xsd/things/Aerobic Profile.xsd +143 -0
- data/lib/xsd/things/Allergic Episode.xsd +17 -0
- data/lib/xsd/things/Allergy.xsd +39 -0
- data/lib/xsd/things/Application-Specific Information.xsd +42 -0
- data/lib/xsd/things/Appointment.xsd +24 -0
- data/lib/xsd/things/Asthma Inhaler Usage.xsd +44 -0
- data/lib/xsd/things/Asthma Inhaler.xsd +99 -0
- data/lib/xsd/things/Base Thing Type.xsd +1000 -0
- data/lib/xsd/things/Basic Demographic Information.xsd +49 -0
- data/lib/xsd/things/Blood Glucose Measurement.xsd +28 -0
- data/lib/xsd/things/Blood Pressure Measurement.xsd +30 -0
- data/lib/xsd/things/Cardiac Profile.xsd +80 -0
- data/lib/xsd/things/Cholesterol Profile (Lipid Profile).xsd +38 -0
- data/lib/xsd/things/Concern.xsd +17 -0
- data/lib/xsd/things/Condition.xsd +28 -0
- data/lib/xsd/things/Continuity of Care Record.xsd +3 -0
- data/lib/xsd/things/Contraindication.xsd +27 -0
- data/lib/xsd/things/Daily Dietary Intake.xsd +51 -0
- data/lib/xsd/things/Daily Medication Usage.xsd +41 -0
- data/lib/xsd/things/Device.xsd +24 -0
- data/lib/xsd/things/Diabetes Insulin Injection Use.xsd +26 -0
- data/lib/xsd/things/Diabetic Profile.xsd +92 -0
- data/lib/xsd/things/Discharge Summary.xsd +43 -0
- data/lib/xsd/things/Emergency or Provider Contact.xsd +11 -0
- data/lib/xsd/things/Emotional State.xsd +24 -0
- data/lib/xsd/things/Encounter (old).xsd +21 -0
- data/lib/xsd/things/Encounter.xsd +19 -0
- data/lib/xsd/things/Family History Condition.xsd +12 -0
- data/lib/xsd/things/Family History Person.xsd +18 -0
- data/lib/xsd/things/Family History.xsd +27 -0
- data/lib/xsd/things/File.xsd +28 -0
- data/lib/xsd/things/HL7 Continuity of Care Document.xsd +33 -0
- data/lib/xsd/things/HbA1C Measurement.xsd +23 -0
- data/lib/xsd/things/Healthcare Proxy.xsd +21 -0
- data/lib/xsd/things/Height Measurement.xsd +13 -0
- data/lib/xsd/things/Immunization.xsd +32 -0
- data/lib/xsd/things/Insulin Injection.xsd +30 -0
- data/lib/xsd/things/Insurance Plan.xsd +46 -0
- data/lib/xsd/things/Lab Test Result.xsd +11 -0
- data/lib/xsd/things/Life Goal.xsd +19 -0
- data/lib/xsd/things/Link.xsd +12 -0
- data/lib/xsd/things/Medical Annotation.xsd +21 -0
- data/lib/xsd/things/Medical Problem.xsd +15 -0
- data/lib/xsd/things/Medication.xsd +82 -0
- data/lib/xsd/things/Microbiology Lab Test Result.xsd +25 -0
- data/lib/xsd/things/Password Protected Package.xsd +23 -0
- data/lib/xsd/things/Personal Contact Information.xsd +18 -0
- data/lib/xsd/things/Personal Demographic Information.xsd +63 -0
- data/lib/xsd/things/Personal Image.xsd +13 -0
- data/lib/xsd/things/Procedure.xsd +19 -0
- data/lib/xsd/things/Radiology Lab Result.xsd +19 -0
- data/lib/xsd/things/Respiratory Profile.xsd +33 -0
- data/lib/xsd/things/Sleep Related Activity.xsd +45 -0
- data/lib/xsd/things/Sleep Session.xsd +51 -0
- data/lib/xsd/things/Spirometer Measurement.xsd +113 -0
- data/lib/xsd/things/Vital Signs.xsd +31 -0
- data/lib/xsd/things/Weekly Aerobic Exercise Goal.xsd +25 -0
- data/lib/xsd/things/Weight Goal.xsd +33 -0
- data/lib/xsd/things/Weight Measurement.xsd +10 -0
- data/spec/connection_spec.rb +17 -0
- data/spec/request_spec.rb +42 -0
- data/spec/support/test_server.rb +42 -0
- metadata +646 -0
data/lib/application.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
#--
|
3
|
+
# Copyright 2008 Danny Coates, Ashkan Farhadtouski
|
4
|
+
# All rights reserved.
|
5
|
+
# See LICENSE for permissions.
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'uri'
|
9
|
+
require File.dirname(__FILE__) + '/config'
|
10
|
+
require File.dirname(__FILE__) + '/connection'
|
11
|
+
require File.dirname(__FILE__) + '/utils/crypto_utils'
|
12
|
+
|
13
|
+
module HealthVault
|
14
|
+
class Application
|
15
|
+
attr_reader :id, :uri
|
16
|
+
|
17
|
+
def initialize(id, hv_uri, certificate_location, certificate_password)
|
18
|
+
@id = id
|
19
|
+
@uri = URI.parse(hv_uri)
|
20
|
+
@cert_file = certificate_location
|
21
|
+
@cert_pass = certificate_password
|
22
|
+
end
|
23
|
+
|
24
|
+
def key
|
25
|
+
return CryptoKey.new(@cert_file, @cert_pass)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.default
|
29
|
+
config = Configuration.instance
|
30
|
+
return Application.new(config.app_id, config.hv_url, config.cert_file, config.cert_pass)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_connection
|
34
|
+
return Connection.new(self)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,376 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
#--
|
3
|
+
# Copyright 2008 Danny Coates, Ashkan Farhadtouski
|
4
|
+
# All rights reserved.
|
5
|
+
# See LICENSE for permissions.
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'rexml/document'
|
9
|
+
require 'erb'
|
10
|
+
require File.dirname(__FILE__) + "/../wc_data/complex_type"
|
11
|
+
require File.dirname(__FILE__) + "/../config"
|
12
|
+
require File.dirname(__FILE__) + "/../utils/string_utils"
|
13
|
+
|
14
|
+
module HealthVault
|
15
|
+
module CodeGeneration
|
16
|
+
class XSDParser
|
17
|
+
include StringUtils
|
18
|
+
include REXML
|
19
|
+
|
20
|
+
def initialize(filename)
|
21
|
+
cdir = File.dirname(__FILE__)
|
22
|
+
@filename = filename
|
23
|
+
@simple_template = cdir + "/../templates/simple_type_template.erb"
|
24
|
+
@complex_template = cdir + "/../templates/complex_type_template.erb"
|
25
|
+
@thing_ex_template = cdir + "/../templates/thing_class_extension_template.erb"
|
26
|
+
@file_path = cdir + "/../wc_data/generated"
|
27
|
+
@logger = Configuration.instance.logger
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_thing(filename)
|
31
|
+
file = File.open(filename)
|
32
|
+
@xml = Document.new(file)
|
33
|
+
tgt_namespace = @xml.root.attribute('targetNamespace').to_s
|
34
|
+
mods = Array.new
|
35
|
+
begin
|
36
|
+
mods = (tgt_namespace.match(/urn\:com\.microsoft\.wc\.(.*)/)[1]).split('.')
|
37
|
+
guid = XPath.first(@xml.root, "//type-id").text.to_s#@xml.root.get_elements('annotation/documentation/type-id')[0].text.to_s
|
38
|
+
el = @xml.root.get_elements('element')[0]
|
39
|
+
cname = el.attribute('name').to_s
|
40
|
+
type = el.attribute('type').to_s
|
41
|
+
class_path = "HealthVault::WCData::"
|
42
|
+
if type.empty?
|
43
|
+
class_path += (mods.collect {|s| classify(s)}).join('::') + "::" + classify(cname)
|
44
|
+
else
|
45
|
+
namespaces = get_namespaces
|
46
|
+
class_path = get_class_path(type)
|
47
|
+
end
|
48
|
+
@thing_hash ||= Hash.new
|
49
|
+
@thing_hash[guid] = class_path
|
50
|
+
rescue
|
51
|
+
@logger.error "Not a HealthVault targetNamespace, can't parse #{@filename}"
|
52
|
+
return
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_things
|
57
|
+
class_hash = @thing_hash
|
58
|
+
result = ""
|
59
|
+
File.open(File.dirname(__FILE__) + "/../wc_data/thing.rb", 'w') do |f|
|
60
|
+
e = ERB.new(File.read(@thing_ex_template), 0, '<>', 'result')
|
61
|
+
e.result(binding)
|
62
|
+
f << result
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# creates ruby class files for the types defined in the xsd
|
67
|
+
def run(test = :no)
|
68
|
+
@test = test
|
69
|
+
file = File.open(@filename)
|
70
|
+
@xml = Document.new(file)
|
71
|
+
@namespaces = get_namespaces
|
72
|
+
@namespace = @xml.root.attribute('targetNamespace').to_s
|
73
|
+
begin
|
74
|
+
@modules = (@namespace.match(/urn\:com\.microsoft\.wc\.(.*)/)[1]).split('.')
|
75
|
+
rescue
|
76
|
+
@logger.error "Not a HealthVault targetNamespace, can't parse #{@filename}"
|
77
|
+
return
|
78
|
+
end
|
79
|
+
create_directories
|
80
|
+
root = @xml.root
|
81
|
+
root.elements.each do |e|
|
82
|
+
@element_order = 0
|
83
|
+
case e.name
|
84
|
+
when 'simpleType'
|
85
|
+
create_simple_type(e)
|
86
|
+
when 'complexType'
|
87
|
+
create_complex_type(e)
|
88
|
+
when 'element'
|
89
|
+
#root elements
|
90
|
+
parse_element(e)
|
91
|
+
# type = e.attribute('type').to_s
|
92
|
+
# #if the element has a type we can skip it
|
93
|
+
# #since we are only looking for new types
|
94
|
+
# next unless type.empty?
|
95
|
+
# #this element defines an anonymous type
|
96
|
+
# cname = e.attribute('name').to_s
|
97
|
+
# e.elements.each do |child|
|
98
|
+
# case child.name
|
99
|
+
# when 'simpleType'
|
100
|
+
# create_simple_type(child, cname)
|
101
|
+
# when 'complexType'
|
102
|
+
# create_complex_type(child, cname)
|
103
|
+
# end
|
104
|
+
# end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
# get the wc namespaces used in this document
|
112
|
+
def get_namespaces
|
113
|
+
namespaces = Hash.new
|
114
|
+
root = @xml.root
|
115
|
+
root_attributes = root.attributes
|
116
|
+
root_attributes.each do |name, value|
|
117
|
+
if name.include?('xmlns:')
|
118
|
+
m = value.match(/urn\:com\.microsoft\.wc\.(.*)/)
|
119
|
+
unless m.nil?
|
120
|
+
mod = (m[1].split('.').collect {|s| classify(s)}).join('::')
|
121
|
+
namespaces[name.split(':')[-1]]= mod
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
return namespaces
|
126
|
+
end
|
127
|
+
|
128
|
+
# create the directory structure from the xsd namespace
|
129
|
+
def create_directories
|
130
|
+
unless File.exists?(@file_path)
|
131
|
+
Dir.mkdir(@file_path)
|
132
|
+
end
|
133
|
+
@modules.each do |m|
|
134
|
+
@file_path << "/#{underscore(m)}"
|
135
|
+
unless File.exists?(@file_path)
|
136
|
+
Dir.mkdir(@file_path)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# creates a ruby class file that extends SimpleType
|
142
|
+
def create_simple_type(e, cname = '')
|
143
|
+
cname = e.attribute('name').to_s if cname.empty?
|
144
|
+
cname = 'info' if cname.empty?
|
145
|
+
file_name = underscore(cname)
|
146
|
+
class_name = classify(cname)
|
147
|
+
restrictions = Hash.new
|
148
|
+
e.get_elements('restriction').each do |r|
|
149
|
+
restrictions = restrictions.merge(parse_restriction(r))
|
150
|
+
end
|
151
|
+
create_class_from_template(@simple_template, file_name, class_name, cname.downcase, "", restrictions)
|
152
|
+
end
|
153
|
+
|
154
|
+
# creates a ruby class file that extends ComplexType
|
155
|
+
def create_complex_type(e, cname = '')
|
156
|
+
cname = e.attribute('name').to_s if cname.empty?
|
157
|
+
children = Array.new
|
158
|
+
file_name = underscore(cname)
|
159
|
+
class_name = classify(cname)
|
160
|
+
cdoc = doc(e)
|
161
|
+
e.elements.each do |child|
|
162
|
+
case child.name
|
163
|
+
when 'sequence'
|
164
|
+
children += parse_sequence(child)
|
165
|
+
when 'simpleContent'
|
166
|
+
children += parse_simple_content(child)
|
167
|
+
when 'attribute'
|
168
|
+
n = parse_attribute(child)
|
169
|
+
children << n unless n.nil?
|
170
|
+
when 'choice'
|
171
|
+
children += parse_choice(child)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
create_class_from_template(@complex_template, file_name, class_name, cname.downcase, cdoc, children)
|
175
|
+
end
|
176
|
+
|
177
|
+
#returns an Array of child node Hashes
|
178
|
+
def parse_sequence(e)
|
179
|
+
children = Array.new
|
180
|
+
e.elements.each do |child|
|
181
|
+
case child.name
|
182
|
+
when 'element'
|
183
|
+
n = parse_element(child)
|
184
|
+
children << n unless n.nil?
|
185
|
+
when 'choice'
|
186
|
+
children += parse_choice(child)
|
187
|
+
#TODO parse 'any' nodes
|
188
|
+
when 'any'
|
189
|
+
children << parse_any(child)
|
190
|
+
next
|
191
|
+
end
|
192
|
+
end
|
193
|
+
return children
|
194
|
+
end
|
195
|
+
|
196
|
+
#returns an Array of child node Hashes
|
197
|
+
def parse_simple_content(e)
|
198
|
+
children = Array.new
|
199
|
+
e.elements.each do |child|
|
200
|
+
case child.name
|
201
|
+
when 'extension'
|
202
|
+
children += parse_extension(child)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
return children
|
206
|
+
end
|
207
|
+
|
208
|
+
#returns an Array of child node Hashes
|
209
|
+
def parse_extension(e)
|
210
|
+
children = Array.new
|
211
|
+
class_path = get_class_path(e.attribute('base').to_s)
|
212
|
+
children << {:name => 'data',
|
213
|
+
:class => class_path,
|
214
|
+
:min => '1',
|
215
|
+
:max => '1',
|
216
|
+
:order => 0,
|
217
|
+
:doc => doc(e),
|
218
|
+
:type => :extension
|
219
|
+
}
|
220
|
+
e.elements.each do |child|
|
221
|
+
case child.name
|
222
|
+
when 'attribute'
|
223
|
+
a = parse_attribute(child)
|
224
|
+
children << a unless a.nil?
|
225
|
+
end
|
226
|
+
end
|
227
|
+
return children
|
228
|
+
end
|
229
|
+
|
230
|
+
def parse_any(e)
|
231
|
+
min = e.attribute('minOccurs').to_s
|
232
|
+
max = e.attribute('maxOccurs').to_s
|
233
|
+
max = '1' if max.empty?
|
234
|
+
#TODO: make unbounded really unbounded
|
235
|
+
max = '999999' if max == 'unbounded'
|
236
|
+
min = '1' if min.empty?
|
237
|
+
@element_order += 1
|
238
|
+
return {:name => 'anything',
|
239
|
+
:class => HealthVault::WCData::ComplexType,
|
240
|
+
:min => min,
|
241
|
+
:max => max,
|
242
|
+
:order => @element_order,
|
243
|
+
:doc => doc(e),
|
244
|
+
:type => :extension,
|
245
|
+
:choice => 0
|
246
|
+
}
|
247
|
+
end
|
248
|
+
|
249
|
+
#returns a Hash of attribute properties for the template
|
250
|
+
def parse_attribute(e)
|
251
|
+
return {:name => e.attribute('name').to_s,
|
252
|
+
:class => get_class_path(e.attribute('type').to_s),
|
253
|
+
:min => e.attribute('use').to_s == 'required' ? '1' : '0',
|
254
|
+
:max => '1',
|
255
|
+
:order => 0,
|
256
|
+
:doc => doc(e),
|
257
|
+
:type => :attribute
|
258
|
+
}
|
259
|
+
end
|
260
|
+
|
261
|
+
#returns an Array of parsed elements (parse_element)
|
262
|
+
def parse_choice(e)
|
263
|
+
children = Array.new
|
264
|
+
min = e.attribute('minOccurs').to_s
|
265
|
+
max = e.attribute('maxOccurs').to_s
|
266
|
+
choice_id = rand(1 << 29).to_s
|
267
|
+
e.elements.each do |child|
|
268
|
+
case child.name
|
269
|
+
when 'element'
|
270
|
+
n = parse_element(child, choice_id, min, max)
|
271
|
+
children << n unless n.nil?
|
272
|
+
end
|
273
|
+
end
|
274
|
+
return children
|
275
|
+
end
|
276
|
+
|
277
|
+
#returns a Hash of element properties for the template
|
278
|
+
def parse_element(e, choice = nil, min = '', max = '')
|
279
|
+
type = e.attribute('type').to_s
|
280
|
+
cname = e.attribute('name').to_s
|
281
|
+
#TODO decide what to do with ref elements
|
282
|
+
return nil if cname.empty?
|
283
|
+
if type.empty?
|
284
|
+
#this element defines an anonymous type
|
285
|
+
e.elements.each do |child|
|
286
|
+
case child.name
|
287
|
+
when 'simpleType'
|
288
|
+
create_simple_type(child, cname)
|
289
|
+
when 'complexType'
|
290
|
+
create_complex_type(child, cname)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
class_path = get_class_path(type)
|
295
|
+
max = e.attribute('maxOccurs').to_s if max.empty?
|
296
|
+
min = e.attribute('minOccurs').to_s if min.empty?
|
297
|
+
max = '1' if max.empty?
|
298
|
+
#TODO: make unbounded really unbounded
|
299
|
+
max = '999999' if max == 'unbounded'
|
300
|
+
min = '1' if min.empty?
|
301
|
+
@element_order += 1
|
302
|
+
return {:name => cname,
|
303
|
+
:class => class_path,
|
304
|
+
:min => min,
|
305
|
+
:max => max,
|
306
|
+
:doc => doc(e),
|
307
|
+
:choice => choice,
|
308
|
+
:type => :element,
|
309
|
+
:order => @element_order
|
310
|
+
}
|
311
|
+
end
|
312
|
+
|
313
|
+
def parse_restriction(e)
|
314
|
+
restrictions = Hash.new
|
315
|
+
restrictions['base'] = e.attribute('base').to_s
|
316
|
+
e.elements.each do |child|
|
317
|
+
name = child.name
|
318
|
+
case name
|
319
|
+
when 'enumeration'
|
320
|
+
restrictions[name] ||= Array.new
|
321
|
+
restrictions[name] << child.attribute('value').to_s
|
322
|
+
when 'annotation'
|
323
|
+
#noop
|
324
|
+
else
|
325
|
+
restrictions[name] = child.attribute('value').to_s
|
326
|
+
end
|
327
|
+
end
|
328
|
+
return restrictions
|
329
|
+
end
|
330
|
+
|
331
|
+
# returns a string from parsing the annotation/documentation of the given node
|
332
|
+
def doc(node)
|
333
|
+
result = ""
|
334
|
+
node.get_elements('annotation/documentation').each do |d|
|
335
|
+
d.elements.each do |e|
|
336
|
+
t = e.text.to_s.gsub(/\r|\n/, '').squeeze(' ').strip
|
337
|
+
unless t.empty?
|
338
|
+
result << "#<b>#{e.name}</b>: #{t}\n"
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
return result
|
343
|
+
end
|
344
|
+
|
345
|
+
# get the full classpath for the given type attribute
|
346
|
+
def get_class_path(type)
|
347
|
+
base = "HealthVault::WCData::"
|
348
|
+
comp = type.split(':')
|
349
|
+
@namespaces.each do |k,v|
|
350
|
+
if comp[0] == k
|
351
|
+
return base + v + "::#{classify(type.gsub(/.*:/, ''))}"
|
352
|
+
end
|
353
|
+
end
|
354
|
+
#TODO: parse xsd primatives
|
355
|
+
return "String"#base + classify(type.gsub(/wc-.*:/, ''))
|
356
|
+
end
|
357
|
+
|
358
|
+
# generate the .rb file with the given template
|
359
|
+
def create_class_from_template(template, file_name, class_name, tag_name, cdoc, children = [])
|
360
|
+
result = ''
|
361
|
+
modules = @modules
|
362
|
+
if @test == :yes
|
363
|
+
e = ERB.new(File.read(template), 0, '<>', 'result')
|
364
|
+
e.run(binding)
|
365
|
+
else
|
366
|
+
File.open(@file_path + "/#{file_name}.rb", 'w') do |f|
|
367
|
+
e = ERB.new(File.read(template), 0, '<>', 'result')
|
368
|
+
e.result(binding)
|
369
|
+
f << result
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
end
|
375
|
+
end
|
376
|
+
end
|
data/lib/config.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
#--
|
3
|
+
# Copyright 2008 Danny Coates, Ashkan Farhadtouski
|
4
|
+
# All rights reserved.
|
5
|
+
# See LICENSE for permissions.
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'logger'
|
9
|
+
require 'singleton'
|
10
|
+
|
11
|
+
module HealthVault
|
12
|
+
class Configuration
|
13
|
+
include Singleton
|
14
|
+
attr_accessor :app_id, :cert_file, :cert_pass, :shell_url, :hv_url, :logger
|
15
|
+
|
16
|
+
#default values to the HelloWorld sample.
|
17
|
+
#theses should be set by your application
|
18
|
+
#using HealthVault::Configuration.instance accessor methods
|
19
|
+
def initialize
|
20
|
+
@app_id = "05a059c9-c309-46af-9b86-b06d42510550"
|
21
|
+
@cert_file = File.dirname(__FILE__) + "/../bin/certs/helloWorld.pem"
|
22
|
+
@cert_pass = ""
|
23
|
+
@shell_url = "https://account.healthvault-ppe.com"
|
24
|
+
@hv_url = "https://platform.healthvault-ppe.com/platform/wildcat.ashx"
|
25
|
+
@logger = Logger.new("hv.log")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/connection.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
#--
|
3
|
+
# Copyright 2008 Danny Coates, Ashkan Farhadtouski
|
4
|
+
# All rights reserved.
|
5
|
+
# See LICENSE for permissions.
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'net/https'
|
9
|
+
require File.dirname(__FILE__) + '/request'
|
10
|
+
require File.dirname(__FILE__) + '/response'
|
11
|
+
require File.dirname(__FILE__) + '/utils/crypto_utils'
|
12
|
+
|
13
|
+
module HealthVault
|
14
|
+
class Connection
|
15
|
+
include WCData
|
16
|
+
attr_accessor :user_auth_token
|
17
|
+
attr_reader :session_token, :shared_secret, :application
|
18
|
+
|
19
|
+
def initialize(application)
|
20
|
+
@application = application
|
21
|
+
end
|
22
|
+
|
23
|
+
def authenticate
|
24
|
+
@shared_secret = CryptoUtils.create_shared_secret
|
25
|
+
@session_token = nil
|
26
|
+
request = Request.create("CreateAuthenticatedSessionToken", self)
|
27
|
+
request.info.auth_info.app_id.data = application.id
|
28
|
+
request.info.auth_info.credential.appserver = Types::AppServerCred.new
|
29
|
+
request.info.auth_info.credential.appserver.content.app_id = application.id
|
30
|
+
request.info.auth_info.credential.appserver.content.shared_secret.hmac_alg.alg_name = "HMACSHA1"
|
31
|
+
request.info.auth_info.credential.appserver.content.shared_secret.hmac_alg.data = CryptoUtils.encode64(shared_secret)
|
32
|
+
request.info.auth_info.credential.appserver.sig.digest_method = "SHA1"
|
33
|
+
request.info.auth_info.credential.appserver.sig.sig_method = "RSA-SHA1"
|
34
|
+
request.info.auth_info.credential.appserver.sig.thumbprint = application.key.fingerprint
|
35
|
+
request.info.auth_info.credential.appserver.sig.data =
|
36
|
+
CryptoUtils.encode64(application.key.sign(
|
37
|
+
request.info.auth_info.credential.appserver.content.element('content').to_s))
|
38
|
+
|
39
|
+
response = request.send
|
40
|
+
@session_token = response.info.token[0].data
|
41
|
+
end
|
42
|
+
|
43
|
+
def authenticated?(user_or_app = :app)
|
44
|
+
if user_or_app == :app
|
45
|
+
return !session_token.nil?
|
46
|
+
else
|
47
|
+
return !user_auth_token.nil?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def send(request)
|
52
|
+
http_endpoint = Net::HTTP.new(application.uri.host, application.uri.port)
|
53
|
+
http_endpoint.use_ssl = true
|
54
|
+
#http_endpoint.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
55
|
+
content = request.to_s
|
56
|
+
Configuration.instance.logger.debug content
|
57
|
+
http_header = {'Content-Type' => 'text/xml'}
|
58
|
+
return Response.new(http_endpoint.post(application.uri.path, content, http_header))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|