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