Sha256: 10bc7bd5cc8e5ca8cf74a4a4ff130ce4ddac14220cce0cc91dc199b26537de2f

Contents?: true

Size: 1.78 KB

Versions: 4

Compression:

Stored size: 1.78 KB

Contents

module QDM
  # Represents QDM attribute
  class Attribute
    include Mongoid::Document

    def initialize(options = {})
      super(options)
    end

    # Returns the attribute requested on the datatype.
    def get(attribute)
      send(attribute) if has_attribute?(attribute)
    end

    def mongoize
      json_representation = {}
      attribute_names.each do |field|
        json_representation[field] = send(field).mongoize
      end
      json_representation
    end

    # Include '_type' in any JSON output. This is necessary for deserialization.
    def to_json(options = nil)
      serializable_hash(methods: :_type).to_json(options)
    end

    class << self
      # Get the object as it was stored in the database, and instantiate
      # this custom class from it.
      def demongoize(object)
        return nil unless object
        object = object.symbolize_keys
        if object.is_a?(Hash)
          # This will turn the object into the concrete type eg: facilityLocation
          data_element = QDM.const_get(object[:_type]).new
          data_element.attribute_names.each do |field|
            data_element.send(field + '=', object[field.to_sym])
          end
          data_element
        else object
        end
      end

      # Takes any possible object and converts it to how it would be
      # stored in the database.
      def mongoize(object)
        case object
        when nil then nil
        when QDM::Attribute then object.mongoize
        when Hash
          object = object.symbolize_keys
          data_element = QDM.const_get(object[:_type]).new
          data_element.attribute_names.each do |field|
            data_element.send(field + '=', object[field.to_sym])
          end
          data_element.mongoize
        else object
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
cqm-models-2.0.1 app/models/qdm/attributes/attribute.rb
cqm-models-3.0.0 app/models/qdm/attributes/attribute.rb
cqm-models-2.0.0 app/models/qdm/attributes/attribute.rb
cqm-models-1.1.1.0 app/models/qdm/attributes/attribute.rb