Class: ONIX::ONIXMessage
- Extended by:
- Forwardable
- Defined in:
- lib/onix/onix_message.rb
Instance Attribute Summary collapse
-
#release ⇒ Object
Returns the value of attribute release.
Attributes included from Attributes
High level collapse
-
#addressee ⇒ Addressee
Forwarded to Header#addressee.
-
#default_currency_code ⇒ String
Forwarded to Header#default_currency_code.
-
#default_language_of_text ⇒ DefaultLanguageOfText
Forwarded to Header#default_language_of_text.
-
#sender ⇒ Sender
Forwarded to Header#sender.
-
#sent_date_time ⇒ Object
Forwarded to Header#sent_date_time.
Low level collapse
Instance Method Summary collapse
-
#detect_release(element) ⇒ String
detect ONIX version from XML tags.
- #get_class(name) ⇒ Object
-
#init_vault ⇒ Object
initialize hash between ID and product object.
-
#initialize ⇒ ONIXMessage
constructor
A new instance of ONIXMessage.
-
#merge!(other) ⇒ Object
merge another message in this one current object erase other values.
-
#open(arg, force_encoding = nil) ⇒ Object
open with arg detection.
-
#parse(arg, force_encoding = nil, force_release = nil) ⇒ Object
parse filename or file.
- #product_klass ⇒ Object
-
#select!(&block) ⇒ Object
keep products for which block return true.
- #set_release_from_xml(node, force_release) ⇒ Object
- #vault ⇒ Object
- #vault=(v) ⇒ Object
-
#version ⇒ Number
release as an integer eg: 210, 300, 301.
Methods inherited from SubsetDSL
element, elements, get_class, inherited, n, ref_to_short, register_elements, register_scopes, #register_subset_array, registered_elements, #registered_elements, registered_scopes, scope, short_to_ref
Methods inherited from Subset
parse, #tag_match, #unsupported
Methods included from Attributes
attribute_class, #parse_attributes, #serialized_attributes
Constructor Details
#initialize ⇒ ONIXMessage
Returns a new instance of ONIXMessage.
32 33 34 35 |
# File 'lib/onix/onix_message.rb', line 32 def initialize @products = [] @vault = {} end |
Instance Attribute Details
#release ⇒ Object
Returns the value of attribute release.
17 18 19 |
# File 'lib/onix/onix_message.rb', line 17 def release @release end |
Instance Method Details
#addressee ⇒ Addressee
Forwarded to Header#addressee
23 |
# File 'lib/onix/onix_message.rb', line 23 def_delegator :header, :addressee |
#default_currency_code ⇒ String
Forwarded to Header#default_currency_code
25 |
# File 'lib/onix/onix_message.rb', line 25 def_delegator :header, :default_currency_code |
#default_language_of_text ⇒ DefaultLanguageOfText
Forwarded to Header#default_language_of_text
24 |
# File 'lib/onix/onix_message.rb', line 24 def_delegator :header, :default_language_of_text |
#detect_release(element) ⇒ String
detect ONIX version from XML tags
117 118 119 120 121 122 123 124 125 |
# 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) ⇒ Object
141 142 143 144 145 146 147 |
# File 'lib/onix/onix_message.rb', line 141 def get_class(name) if name == "Product" self.product_klass else super(name) end end |
#header ⇒ Header
19 |
# File 'lib/onix/onix_message.rb', line 19 element "Header", :subset, :cardinality => 1 |
#init_vault ⇒ Object
initialize hash between ID and product object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# 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..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) ⇒ Object
merge another message in this one current object erase other values
47 48 49 50 51 52 |
# 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) ⇒ Object
open with arg detection
93 94 95 96 97 98 99 100 101 102 103 104 105 |
# 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) ⇒ Object
parse filename or file
151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# 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 ⇒ Object
137 138 139 |
# File 'lib/onix/onix_message.rb', line 137 def product_klass self.version >= 300 ? Product : ONIX21::Product end |
#products ⇒ Array<Product>
20 |
# File 'lib/onix/onix_message.rb', line 20 elements "Product", :subset, :cardinality => 0..n |
#select!(&block) ⇒ Object
keep products for which block return true
55 56 57 58 59 |
# File 'lib/onix/onix_message.rb', line 55 def select! &block @products.select! { |p| block.call(p) } init_vault self end |
#sender ⇒ Sender
Forwarded to Header#sender
22 |
# File 'lib/onix/onix_message.rb', line 22 def_delegator :header, :sender |
#sent_date_time ⇒ Object
Forwarded to Header#sent_date_time
26 |
# File 'lib/onix/onix_message.rb', line 26 def_delegator :header, :sent_date_time |
#set_release_from_xml(node, force_release) ⇒ Object
127 128 129 130 131 132 133 134 135 |
# 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 ⇒ Object
37 38 39 |
# File 'lib/onix/onix_message.rb', line 37 def vault @vault end |
#vault=(v) ⇒ Object
41 42 43 |
# File 'lib/onix/onix_message.rb', line 41 def vault= v @vault = v end |
#version ⇒ Number
release as an integer eg: 210, 300, 301
109 110 111 112 113 |
# File 'lib/onix/onix_message.rb', line 109 def version if @release @release.gsub(/\./, "").to_i * 10 ** (3 - @release.scan(".").length - 1) end end |