class Opencrx::Model::Record

Attributes

attributes[RW]

Public Class Methods

base_provider() click to toggle source
# File lib/opencrx/model/record/query.rb, line 6
def base_provider
  "provider/CRX/segment/Standard"
end
default_query_options() click to toggle source
# File lib/opencrx/model/record/query.rb, line 33
def default_query_options
  {}
end
get(id, options = {}) click to toggle source
# File lib/opencrx/model/record/query.rb, line 15
def get(id, options = {})
  url = url_from_id(id)
  response = Opencrx::session.get(url, query: merge_options(options))
  Result.parse(response)
end
have_array_attributes(*args) click to toggle source
# File lib/opencrx/model/record/attributes.rb, line 16
def self.have_array_attributes(*args)
  args.each do |arg|
    define_method(arg) do
      Array.wrap(attribute(arg))
    end
    define_method("#{arg}=") do |value|
      write_attribute(arg, Array.wrap(value))
    end
  end
end
have_attributes(*args) click to toggle source
# File lib/opencrx/model/record/attributes.rb, line 5
def self.have_attributes(*args)
  args.each do |arg|
    define_method(arg) do
      attribute(arg)
    end
    define_method("#{arg}=") do |value|
      write_attribute(arg, value)
    end
  end
end
merge_options(options) click to toggle source
# File lib/opencrx/model/record/query.rb, line 29
def merge_options(options)
  default_query_options.merge(options)
end
new(attributes = {}) click to toggle source
# File lib/opencrx/model/record/attributes.rb, line 35
def initialize(attributes = {})
  self.attributes = attributes
end
provider() click to toggle source
# File lib/opencrx/model/record/query.rb, line 25
def provider
  base_provider
end
query(options = {}) click to toggle source
# File lib/opencrx/model/record/query.rb, line 10
def query(options = {})
  response = Opencrx::session.get(query_url, query: merge_options(options))
  ResultSet.new(response)
end
query_type_option() click to toggle source
# File lib/opencrx/model/record/query.rb, line 37
def query_type_option
  @query_type_option ||= {
      queryType: Map.model_to_opencrx_query(self)
  }
end
query_url() click to toggle source
# File lib/opencrx/model/record/query.rb, line 21
def query_url
  "/#{BASE_KEY}/#{provider}"
end
url_from_id(id) click to toggle source
# File lib/opencrx/model/record/query.rb, line 43
def url_from_id(id)
  return id if id.match(/^https?:\/\//)
  "#{query_url}/#{id}"
end

Public Instance Methods

attribute(key) click to toggle source
# File lib/opencrx/model/record/attributes.rb, line 66
def attribute(key)
  attributes[key.to_s]
end
attributes=(hash) click to toggle source
# File lib/opencrx/model/record/attributes.rb, line 39
def attributes=(hash)
  @attributes = {}
  hash.each do |key, value|
    write_attribute(key, value)
  end
end
compact() click to toggle source
# File lib/opencrx/model/record/attributes.rb, line 70
def compact
  attributes.inject({}) do |memo, (key, value)|
    memo[key] = value if value.present? && value != '0'
    memo
  end
end
destroy() click to toggle source
# File lib/opencrx/model/record.rb, line 21
def destroy
  response = Opencrx::session.delete(href)
  response.response.code == '204'
end
query(subtype, options = {}) click to toggle source

children query

# File lib/opencrx/model/record/query.rb, line 50
def query(subtype, options = {})
  response = Opencrx::session.get(subtype_query_url(subtype), query: options)
  ResultSet.new(response)
end
save() click to toggle source
# File lib/opencrx/model/record.rb, line 9
def save
  url = href || self.class.query_url
  action = identity ? :put : :post
  response = Opencrx::session.send(action, url, body: to_xml)
  if (new_record = Result.parse(response)) && new_record.class == self.class
    self.attributes = new_record.attributes
    true
  else
    false
  end
end
subtype_query_url(subtype) click to toggle source
# File lib/opencrx/model/record/query.rb, line 55
def subtype_query_url(subtype)
  "#{attributes['href']}/#{subtype}"
end
to_xml(options = {}) click to toggle source
# File lib/opencrx/model/record/attributes.rb, line 77
def to_xml(options = {})
  attributes.except('href', 'version').to_xml(options.merge(root: Map.model_to_opencrx_key(self.class)))
end
write_attribute(key, value) click to toggle source

store only simple values, or simple arrays. arrays from opencrx are encoded as a hash values under key '_item'

# File lib/opencrx/model/record/attributes.rb, line 48
def write_attribute(key, value)
  key = key.to_s
  case value
    # incoming from opencrx
    when Hash
      items = Array.wrap(value['_item'])
      if items.first.is_a?(String)
        @attributes[key] = ItemList.new(items)
      end
    # incoming from our side
    when Array
      @attributes[key] = ItemList.new(value)
    else
      @attributes[key] = value
  end
  @attributes[key]
end