Module: FHIR::STU3::Hashable

Included in:
Account, Account::Coverage, Account::Guarantor, ActivityDefinition, ActivityDefinition::DynamicValue, ActivityDefinition::Participant, Address, AdverseEvent, AdverseEvent::SuspectEntity, AdverseEvent::SuspectEntity::Causality, Age, AllergyIntolerance, AllergyIntolerance::Reaction, Annotation, Appointment, Appointment::Participant, AppointmentResponse, Attachment, AuditEvent, AuditEvent::Agent, AuditEvent::Agent::Network, AuditEvent::Entity, AuditEvent::Entity::Detail, AuditEvent::Source, BackboneElement, Basic, Binary, BodySite, Boot::Template, Bundle, Bundle::Entry, Bundle::Entry::Request, Bundle::Entry::Response, Bundle::Entry::Search, Bundle::Link, CapabilityStatement, CapabilityStatement::Document, CapabilityStatement::Implementation, CapabilityStatement::Messaging, CapabilityStatement::Messaging::Endpoint, CapabilityStatement::Messaging::Event, CapabilityStatement::Messaging::SupportedMessage, CapabilityStatement::Rest, CapabilityStatement::Rest::Interaction, CapabilityStatement::Rest::Operation, CapabilityStatement::Rest::Resource, CapabilityStatement::Rest::Resource::Interaction, CapabilityStatement::Rest::Resource::SearchParam, CapabilityStatement::Rest::Security, CapabilityStatement::Rest::Security::Certificate, CapabilityStatement::Software, CarePlan, CarePlan::Activity, CarePlan::Activity::Detail, CareTeam, CareTeam::Participant, ChargeItem, ChargeItem::Participant, Claim, Claim::Accident, Claim::CareTeam, Claim::Diagnosis, Claim::Information, Claim::Insurance, Claim::Item, Claim::Item::Detail, Claim::Item::Detail::SubDetail, Claim::Payee, Claim::Procedure, Claim::Related, ClaimResponse, ClaimResponse::AddItem, ClaimResponse::AddItem::Detail, ClaimResponse::Error, ClaimResponse::Insurance, ClaimResponse::Item, ClaimResponse::Item::Adjudication, ClaimResponse::Item::Detail, ClaimResponse::Item::Detail::SubDetail, ClaimResponse::Payment, ClaimResponse::ProcessNote, ClinicalImpression, ClinicalImpression::Finding, ClinicalImpression::Investigation, CodeSystem, CodeSystem::Concept, CodeSystem::Concept::Designation, CodeSystem::Concept::Property, CodeSystem::Filter, CodeSystem::Property, CodeableConcept, Coding, Communication, Communication::Payload, CommunicationRequest, CommunicationRequest::Payload, CommunicationRequest::Requester, CompartmentDefinition, CompartmentDefinition::Resource, Composition, Composition::Attester, Composition::Event, Composition::RelatesTo, Composition::Section, ConceptMap, ConceptMap::Group, ConceptMap::Group::Element, ConceptMap::Group::Element::Target, ConceptMap::Group::Element::Target::DependsOn, ConceptMap::Group::Unmapped, Condition, Condition::Evidence, Condition::Stage, Consent, Consent::Actor, Consent::Data, Consent::Except, Consent::Except::Actor, Consent::Except::Data, Consent::Policy, ContactDetail, ContactPoint, Contract, Contract::Agent, Contract::Friendly, Contract::Legal, Contract::Rule, Contract::Signer, Contract::Term, Contract::Term::Agent, Contract::Term::ValuedItem, Contract::ValuedItem, Contributor, Count, Coverage, Coverage::Grouping, DataElement, DataElement::Mapping, DataRequirement, DataRequirement::CodeFilter, DataRequirement::DateFilter, DetectedIssue, DetectedIssue::Mitigation, Device, Device::Udi, DeviceComponent, DeviceComponent::ProductionSpecification, DeviceMetric, DeviceMetric::Calibration, DeviceRequest, DeviceRequest::Requester, DeviceUseStatement, DiagnosticReport, DiagnosticReport::Image, DiagnosticReport::Performer, Distance, DocumentManifest, DocumentManifest::Content, DocumentManifest::Related, DocumentReference, DocumentReference::Content, DocumentReference::Context, DocumentReference::Context::Related, DocumentReference::RelatesTo, DomainResource, Dosage, Duration, Element, ElementDefinition, ElementDefinition::Base, ElementDefinition::Binding, ElementDefinition::Constraint, ElementDefinition::Example, ElementDefinition::Mapping, ElementDefinition::Slicing, ElementDefinition::Slicing::Discriminator, ElementDefinition::Type, EligibilityRequest, EligibilityResponse, EligibilityResponse::Error, EligibilityResponse::Insurance, EligibilityResponse::Insurance::BenefitBalance, EligibilityResponse::Insurance::BenefitBalance::Financial, Encounter, Encounter::ClassHistory, Encounter::Diagnosis, Encounter::Hospitalization, Encounter::Location, Encounter::Participant, Encounter::StatusHistory, Endpoint, EnrollmentRequest, EnrollmentResponse, EpisodeOfCare, EpisodeOfCare::Diagnosis, EpisodeOfCare::StatusHistory, ExpansionProfile, ExpansionProfile::Designation, ExpansionProfile::Designation::Exclude, ExpansionProfile::Designation::Exclude::Designation, ExpansionProfile::Designation::Include, ExpansionProfile::Designation::Include::Designation, ExpansionProfile::ExcludedSystem, ExpansionProfile::FixedVersion, ExplanationOfBenefit, ExplanationOfBenefit::Accident, ExplanationOfBenefit::AddItem, ExplanationOfBenefit::AddItem::Detail, ExplanationOfBenefit::BenefitBalance, ExplanationOfBenefit::BenefitBalance::Financial, ExplanationOfBenefit::CareTeam, ExplanationOfBenefit::Diagnosis, ExplanationOfBenefit::Information, ExplanationOfBenefit::Insurance, ExplanationOfBenefit::Item, ExplanationOfBenefit::Item::Adjudication, ExplanationOfBenefit::Item::Detail, ExplanationOfBenefit::Item::Detail::SubDetail, ExplanationOfBenefit::Payee, ExplanationOfBenefit::Payment, ExplanationOfBenefit::Procedure, ExplanationOfBenefit::ProcessNote, ExplanationOfBenefit::Related, Extension, FamilyMemberHistory, FamilyMemberHistory::Condition, Flag, Goal, Goal::Target, GraphDefinition, GraphDefinition::Link, GraphDefinition::Link::Target, GraphDefinition::Link::Target::Compartment, Group, Group::Characteristic, Group::Member, GuidanceResponse, HealthcareService, FHIR::STU3::HealthcareService::AvailableTime, FHIR::STU3::HealthcareService::NotAvailable, HumanName, Identifier, ImagingManifest, ImagingManifest::Study, ImagingManifest::Study::Series, ImagingManifest::Study::Series::Instance, ImagingStudy, ImagingStudy::Series, ImagingStudy::Series::Instance, Immunization, Immunization::Explanation, Immunization::Practitioner, Immunization::Reaction, Immunization::VaccinationProtocol, ImmunizationRecommendation, ImmunizationRecommendation::Recommendation, ImmunizationRecommendation::Recommendation::DateCriterion, ImmunizationRecommendation::Recommendation::Protocol, ImplementationGuide, ImplementationGuide::Dependency, ImplementationGuide::Global, ImplementationGuide::Package, ImplementationGuide::Package::Resource, ImplementationGuide::Page, Library, Linkage, Linkage::Item, List, List::Entry, Location, Location::Position, Measure, Measure::Group, Measure::Group::Population, Measure::Group::Stratifier, Measure::SupplementalData, MeasureReport, MeasureReport::Group, MeasureReport::Group::Population, MeasureReport::Group::Stratifier, MeasureReport::Group::Stratifier::Stratum, MeasureReport::Group::Stratifier::Stratum::Population, Media, Medication, Medication::Ingredient, Medication::Package, Medication::Package::Batch, Medication::Package::Content, MedicationAdministration, MedicationAdministration::Dosage, MedicationAdministration::Performer, MedicationDispense, MedicationDispense::Performer, MedicationDispense::Substitution, MedicationRequest, MedicationRequest::DispenseRequest, MedicationRequest::Requester, MedicationRequest::Substitution, MedicationStatement, MessageDefinition, MessageDefinition::AllowedResponse, MessageDefinition::Focus, MessageHeader, MessageHeader::Destination, MessageHeader::Response, MessageHeader::Source, Meta, Money, NamingSystem, NamingSystem::UniqueId, Narrative, NutritionOrder, NutritionOrder::EnteralFormula, NutritionOrder::EnteralFormula::Administration, NutritionOrder::OralDiet, NutritionOrder::OralDiet::Nutrient, NutritionOrder::OralDiet::Texture, NutritionOrder::Supplement, Observation, Observation::Component, Observation::ReferenceRange, Observation::Related, OperationDefinition, OperationDefinition::Overload, OperationDefinition::Parameter, OperationDefinition::Parameter::Binding, OperationOutcome, OperationOutcome::Issue, Organization, Organization::Contact, ParameterDefinition, Parameters, Parameters::Parameter, Patient, Patient::Animal, Patient::Communication, Patient::Contact, Patient::Link, PaymentNotice, PaymentReconciliation, PaymentReconciliation::Detail, PaymentReconciliation::ProcessNote, Period, Person, Person::Link, PlanDefinition, PlanDefinition::Action, PlanDefinition::Action::Condition, PlanDefinition::Action::DynamicValue, PlanDefinition::Action::Participant, PlanDefinition::Action::RelatedAction, PlanDefinition::Goal, PlanDefinition::Goal::Target, Practitioner, Practitioner::Qualification, PractitionerRole, PractitionerRole::AvailableTime, PractitionerRole::NotAvailable, Procedure, Procedure::FocalDevice, Procedure::Performer, ProcedureRequest, ProcedureRequest::Requester, ProcessRequest, ProcessRequest::Item, ProcessResponse, ProcessResponse::ProcessNote, Provenance, Provenance::Agent, Provenance::Entity, Quantity, Questionnaire, Questionnaire::Item, Questionnaire::Item::EnableWhen, Questionnaire::Item::Option, QuestionnaireResponse, QuestionnaireResponse::Item, QuestionnaireResponse::Item::Answer, Range, Ratio, Reference, ReferralRequest, ReferralRequest::Requester, RelatedArtifact, RelatedPerson, RequestGroup, RequestGroup::Action, RequestGroup::Action::Condition, RequestGroup::Action::RelatedAction, ResearchStudy, ResearchStudy::Arm, ResearchSubject, Resource, RiskAssessment, RiskAssessment::Prediction, SampledData, Schedule, SearchParameter, SearchParameter::Component, Sequence, Sequence::Quality, Sequence::ReferenceSeq, Sequence::Repository, Sequence::Variant, ServiceDefinition, Signature, Slot, Specimen, Specimen::Collection, Specimen::Container, Specimen::Processing, StructureDefinition, StructureDefinition::Differential, StructureDefinition::Mapping, StructureDefinition::Snapshot, StructureMap, StructureMap::Group, StructureMap::Group::Input, StructureMap::Group::Rule, StructureMap::Group::Rule::Dependent, StructureMap::Group::Rule::Source, StructureMap::Group::Rule::Target, StructureMap::Group::Rule::Target::Parameter, StructureMap::Structure, Subscription, Subscription::Channel, Substance, Substance::Ingredient, Substance::Instance, SupplyDelivery, SupplyDelivery::SuppliedItem, SupplyRequest, SupplyRequest::OrderedItem, SupplyRequest::Requester, Task, Task::Input, Task::Output, Task::Requester, Task::Restriction, TestReport, TestReport::Participant, TestReport::Setup, TestReport::Setup::Action, TestReport::Setup::Action::Assert, TestReport::Setup::Action::Operation, TestReport::Teardown, TestReport::Teardown::Action, TestReport::Test, TestReport::Test::Action, TestScript, TestScript::Destination, TestScript::Fixture, TestScript::Metadata, TestScript::Metadata::Capability, TestScript::Metadata::Link, TestScript::Origin, TestScript::Rule, TestScript::Rule::Param, TestScript::Ruleset, TestScript::Ruleset::Rule, TestScript::Ruleset::Rule::Param, TestScript::Setup, TestScript::Setup::Action, TestScript::Setup::Action::Assert, TestScript::Setup::Action::Assert::Rule, TestScript::Setup::Action::Assert::Rule::Param, TestScript::Setup::Action::Assert::Ruleset, TestScript::Setup::Action::Assert::Ruleset::Rule, TestScript::Setup::Action::Assert::Ruleset::Rule::Param, TestScript::Setup::Action::Operation, TestScript::Setup::Action::Operation::RequestHeader, TestScript::Teardown, TestScript::Teardown::Action, TestScript::Test, TestScript::Test::Action, TestScript::Variable, Timing, Timing::Repeat, TriggerDefinition, UsageContext, ValueSet, ValueSet::Compose, ValueSet::Compose::Include, ValueSet::Compose::Include::Concept, ValueSet::Compose::Include::Concept::Designation, ValueSet::Compose::Include::Filter, ValueSet::Expansion, ValueSet::Expansion::Contains, ValueSet::Expansion::Parameter, VisionPrescription, VisionPrescription::Dispense
Defined in:
lib/fhir_stu3_models/bootstrap/hashable.rb

Instance Method Summary collapse

Instance Method Details

#from_hash(hash) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/fhir_stu3_models/bootstrap/hashable.rb', line 30

def from_hash(hash)
  # clear the existing variables
  self.class::METADATA.each do |key, value|
    local_name = key
    local_name = value['local_name'] if value['local_name']
    instance_variable_set("@#{local_name}", nil)
  end
  # set the variables to the hash values
  hash.each do |key, value|
    key = key.to_s
    meta = self.class::METADATA[key]
    next if meta.nil?
    local_name = key
    local_name = meta['local_name'] if meta['local_name']
    begin
      instance_variable_set("@#{local_name}", value)
    rescue
      # TODO: this appears to be a dead code branch
      nil
    end
    # inflate the value if it isn't a primitive
    klass = FHIR::STU3::PRIMITIVES.key?(meta['type']) ? nil : FHIR::STU3.const_get(meta['type'])
    if !klass.nil? && !value.nil?
      # handle array of objects
      if value.is_a?(Array)
        value = value.map do |child|
          obj = child
          unless [FHIR::STU3::RESOURCES, FHIR::STU3::TYPES].flatten.include? child.class.name.gsub('FHIR::STU3::', '')
            obj = make_child(child, klass)
          end
          obj
        end
      else # handle single object
        value = make_child(value, klass)
        # if there is only one of these, but cardinality allows more, we need to wrap it in an array.
        value = [value] if value && (meta['max'] > 1)
      end
      instance_variable_set("@#{local_name}", value)
    elsif !FHIR::STU3::PRIMITIVES.include?(meta['type']) && meta['type'] != 'xhtml'
      FHIR::STU3.logger.error("Unhandled and unrecognized class/type: #{meta['type']}")
    elsif value.is_a?(Array)
      # array of primitives
      value = value.map { |child| convert_primitive(child, meta) }
      instance_variable_set("@#{local_name}", value)
    else
      # single primitive
      value = convert_primitive(value, meta)
      # if there is only one of these, but cardinality allows more, we need to wrap it in an array.
      value = [value] if value && (meta['max'] > 1)
      instance_variable_set("@#{local_name}", value)
    end # !klass && !nil?
  end # hash loop
  self
end

#to_hashObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/fhir_stu3_models/bootstrap/hashable.rb', line 5

def to_hash
  hash = {}
  self.class::METADATA.each do |key, value|
    local_name = key
    local_name = value['local_name'] if value['local_name']
    hash[key] = instance_variable_get("@#{local_name}")
    if hash[key].respond_to?(:to_hash)
      hash[key] = hash[key].to_hash
    elsif hash[key].is_a? Array
      hash[key] = Array.new(hash[key]) # copy the array
      hash[key].each_with_index do |item, index|
        hash[key][index] = item.to_hash if item.respond_to?(:to_hash)
      end
    end
  end
  hash.keep_if do |_key, value|
    !value.nil? && ((value.is_a?(Hash) && !value.empty?) ||
                      (value.is_a?(Array) && !value.empty?) ||
                      (!value.is_a?(Hash) && !value.is_a?(Array))
                   )
  end
  hash['resourceType'] = resourceType if respond_to?(:resourceType)
  hash
end