class ONIX::ONIXMessage
Attributes
release[RW]
Public Class Methods
new()
click to toggle source
# File lib/onix/onix_message.rb, line 32 def initialize @products = [] @vault = {} end
Public Instance Methods
detect_release(element)
click to toggle source
detect ONIX
version from XML tags @return [String]
# File lib/onix/onix_message.rb, line 117 def detect_release(element) if element return "3.0" if element.search("//DescriptiveDetail").length > 0 return "3.0" if element.search("//CollateralDetail").length > 0 return "3.0" if element.search("//ContentDetail").length > 0 return "3.0" if element.search("//PublishingDetail").length > 0 end "2.1" end
get_class(name)
click to toggle source
Calls superclass method
# File lib/onix/onix_message.rb, line 141 def get_class(name) if name == "Product" self.product_klass else super(name) end end
header()
click to toggle source
# File lib/onix/onix_message.rb, line 28 def header @header || Header.new end
init_vault()
click to toggle source
initialize hash between ID and product object
# File lib/onix/onix_message.rb, line 62 def init_vault @vault = {} @products.each do |product| product.identifiers.each do |ident| @vault[ident.uniq_id] = product end product.default_language_of_text = self.default_language_of_text if @header product.default_currency_code = self.default_currency_code if @header end @products.each do |product| product.related.each do |rel| rel.identifiers.each do |ident| if @vault[ident.uniq_id] rel.product = @vault[ident.uniq_id] end end end product.parts.each do |prt| prt.identifiers.each do |ident| if @vault[ident.uniq_id] prt.product = @vault[ident.uniq_id] end end end end end
merge!(other)
click to toggle source
merge another message in this one current object erase other values
# File lib/onix/onix_message.rb, line 47 def merge!(other) @products += other.products @products = @products.uniq { |p| p.ean } init_vault self end
open(arg, force_encoding = nil)
click to toggle source
open with arg detection @param [String, File] arg
# File lib/onix/onix_message.rb, line 93 def open(arg, force_encoding = nil) data = ONIX::Helper.arg_to_data(arg) xml = nil if force_encoding xml = Nokogiri::XML.parse(data, nil, force_encoding) else xml = Nokogiri::XML.parse(data) end xml.remove_namespaces! xml end
parse(arg, force_encoding = nil, force_release = nil)
click to toggle source
parse filename or file @param [String, File] arg
Calls superclass method
# File lib/onix/onix_message.rb, line 151 def parse(arg, force_encoding = nil, force_release = nil) @products = [] xml = open(arg, force_encoding) root = xml.root set_release_from_xml(root, force_release) case root when tag_match("Product") @products << self.product_klass.parse(root) else # ONIXMessage super(root) end init_vault end
product_klass()
click to toggle source
# File lib/onix/onix_message.rb, line 137 def product_klass self.version >= 300 ? Product : ONIX21::Product end
select!(&block)
click to toggle source
keep products for which block return true
# File lib/onix/onix_message.rb, line 55 def select! &block @products.select! { |p| block.call(p) } init_vault self end
set_release_from_xml(node, force_release)
click to toggle source
# File lib/onix/onix_message.rb, line 127 def set_release_from_xml(node, force_release) @release = node["release"] unless @release @release = detect_release(node) end if force_release @release = force_release.to_s end end
vault()
click to toggle source
# File lib/onix/onix_message.rb, line 37 def vault @vault end
vault=(v)
click to toggle source
# File lib/onix/onix_message.rb, line 41 def vault= v @vault = v end
version()
click to toggle source
release as an integer eg: 210, 300, 301 @return [Number]
# File lib/onix/onix_message.rb, line 109 def version if @release @release.gsub(/\./, "").to_i * 10 ** (3 - @release.scan(".").length - 1) end end