lib/amee/item_value_definition.rb in amee-2.2.1 vs lib/amee/item_value_definition.rb in amee-2.3.0

- old
+ new

@@ -28,59 +28,67 @@ data[:name] = p['name'] data[:path] = p['path'] data[:unit] = p['unit'] data[:perunit] = p['perunit'] data[:valuetype] = p['valueDefinition']['valueType'] - data=ItemValueDefinition.parsetype(data,p['drillDown'],p['fromProfile'],p['fromData']) - + data[:drill]=p['drillDown'] + data[:from_profile]=p['fromProfile'] + data[:from_data]=p['fromData'] + data end def parse_xml(p) data = {} data[:itemdefuid] = @uid data[:uid] = x '@uid',:doc => p data[:name] = x 'Name',:doc => p || data[:uid] data[:path] = x 'Path',:doc => p data[:unit] = x 'Unit',:doc => p data[:perunit] = x 'PerUnit',:doc => p data[:valuetype] =x 'ValueDefinition/ValueType',:doc => p - drill=(x('DrillDown',:doc => p)=='true') - profile=(x('FromProfile',:doc => p)=='true') - ldata=(x('FromData',:doc => p)=='true') - data=ItemValueDefinition.parsetype(data,drill,profile,ldata) - + data[:drill]=(x('DrillDown',:doc => p)=='true') + data[:from_profile]=(x('FromProfile',:doc => p)=='true') + data[:from_data]=(x('FromData',:doc => p)=='true') + data end end class ItemValueDefinition < AMEE::Object def initialize(data = {}) @itemdefuid=data[:itemdefuid] @name = data[:name] @uid = data[:uid] @path = data[:path] - @type = data[:type] @unit = data[:unit] @perunit = data[:perunit] @valuetype = data[:valuetype] @default = data[:default] == "" ? nil : data[:default] @choices = data[:choices] || [] @versions = data[:versions] || [] + @drill = data[:drill] + @from_data = @drill ? false : data[:from_data] # Drills are also data, but we don't want them to show as such for clarity + @from_profile = data[:from_profile] super end - attr_reader :name,:uid,:path,:itemdefuid, :type, :valuetype, :unit, :perunit, :type, :default, :choices, :versions + attr_reader :name,:uid,:path,:itemdefuid, :type, :valuetype, :unit, :perunit, :default, :choices, :versions + # This function has bee deprecated in favour of the separate profile? data? and drill? functions + def type + raise AMEE::Deprecated + end + def profile? - type=='profile' + @from_profile end def data? - type=='data' + @from_data end def drill? - type=='drill' + @drill end def self.list(connection) ItemValueDefinitionList.new(connection) end @@ -113,23 +121,21 @@ data[:perunit] = p['perUnit'] data[:valuetype] = p['valueDefinition']['valueType'] data[:default] = p['value'] data[:choices] = p['choices'].split(',') data[:versions] = p['apiVersions'].map{|v| v['apiVersion']} - data=ItemValueDefinition.parsetype(data,p['drillDown'],p['fromProfile'],p['fromData']) + data[:drill]=p['drillDown'] + data[:from_profile]=p['fromProfile'] + data[:from_data]=p['fromData'] # Create object ItemValueDefinition.new(data) rescue raise AMEE::BadData.new("Couldn't load ItemValueDefinition from JSON. Check that your URL is correct.\n#{json}") end - def self.parsetype(data,drill,profile,ldata) - ( (profile && !(drill||ldata) ) || ldata) or raise 'inconsistent type' - data[:type]='profile' if profile - data[:type]='data' if ldata - data[:type]='drill' if drill - data + def self.xmlpathpreamble + "/Resources//ItemValueDefinition/" end def self.from_xml(xml, is_list = true) prefix = is_list ? "/Resources/ItemValueDefinitionsResource/" : "/Resources/ItemValueDefinitionResource/" # Parse data from response into hash @@ -147,13 +153,12 @@ data[:perunit] = puxml ? puxml.text : nil data[:valuetype] = REXML::XPath.first(doc, prefix + "ItemValueDefinition/ValueDefinition/ValueType").text data[:default] = REXML::XPath.first(doc, prefix + "ItemValueDefinition/Value").text data[:choices] = REXML::XPath.first(doc, prefix + "ItemValueDefinition/Choices").text.split(',') rescue nil data[:versions] = REXML::XPath.each(doc, prefix + "ItemValueDefinition/APIVersions/APIVersion").map{|v| v.text} - drill=(REXML::XPath.first(doc, prefix + "ItemValueDefinition/DrillDown").text=='true') - profile=(REXML::XPath.first(doc, prefix + "ItemValueDefinition/FromProfile").text=='true') - ldata=(REXML::XPath.first(doc, prefix + "ItemValueDefinition/FromData").text=='true') - data=parsetype(data,drill,profile,ldata) + data[:drill]=(x('DrillDown',:doc => doc)=='true') + data[:from_profile]=(x('FromProfile',:doc => doc)=='true') + data[:from_data]=(x('FromData',:doc => doc)=='true') # Create object ItemValueDefinition.new(data) rescue raise AMEE::BadData.new("Couldn't load ItemValueDefinition from XML. Check that your URL is correct.\n#{xml}") end