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