im_onix 1.2.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/onix/onix21.rb CHANGED
@@ -2,26 +2,28 @@ module ONIX
2
2
  module ONIX21
3
3
  class ShortToRef
4
4
  def self.names
5
- @shortnames ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/shortnames.yml"))
5
+ @shortnames ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/shortnames.yml")).freeze
6
6
  end
7
7
  end
8
8
 
9
9
  class RefToShort
10
10
  def self.names
11
- @refnames ||= ShortToRef.names.invert
11
+ @refnames ||= ShortToRef.names.invert.freeze
12
12
  end
13
13
  end
14
14
 
15
15
  class SubsetDSL < ONIX::SubsetDSL
16
- def self.short_to_ref(name)
17
- ONIX::ONIX21::ShortToRef.names[name]
18
- end
16
+ class << self
17
+ def short_to_ref(name)
18
+ ONIX::ONIX21::ShortToRef.names[name]
19
+ end
19
20
 
20
- def self.ref_to_short(name)
21
- ONIX::ONIX21::RefToShort.names[name]
21
+ def ref_to_short(name)
22
+ ONIX::ONIX21::RefToShort.names[name]
23
+ end
22
24
  end
23
25
 
24
- def self.get_class(name)
26
+ def get_class(name)
25
27
  if ONIX::ONIX21.const_defined?(name, false)
26
28
  ONIX::ONIX21.const_get(name)
27
29
  else
@@ -34,11 +36,11 @@ module ONIX
34
36
 
35
37
  class CodeFromYaml < Code
36
38
  def self.hash
37
- @hash ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/codelists/codelist-#{self.code_ident}.yml"))[:codelist]
39
+ @hash ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/codelists/codelist-#{self.code_ident}.yml"))[:codelist].freeze
38
40
  end
39
41
 
40
42
  def self.list
41
- self.hash.to_a.map { |h| h.first }
43
+ self.hash.keys
42
44
  end
43
45
 
44
46
  def self.code_ident
@@ -131,8 +133,8 @@ module ONIX
131
133
  class Price < SubsetDSL
132
134
  element "PriceTypeCode", :subset, :klass => "PriceType"
133
135
  element "PriceAmount", :float, {
134
- :shortcut => :amount,
135
- :parse_lambda => lambda { |v| (v * 100).round }
136
+ :shortcut => :amount,
137
+ :parse_lambda => lambda { |v| (v * 100).round }
136
138
  }
137
139
  element "PriceQualifier", :subset, :shortcut => :qualifier
138
140
  element "DiscountCoded", :subset
@@ -196,8 +198,8 @@ module ONIX
196
198
  element "AvailabilityCode", :text
197
199
  element "ProductAvailability", :text
198
200
  element "OnSaleDate", :text, {
199
- :shortcut => :availability_date,
200
- :parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") }
201
+ :shortcut => :availability_date,
202
+ :parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") }
201
203
  }
202
204
  elements "Price", :subset
203
205
 
@@ -232,8 +234,8 @@ module ONIX
232
234
  end
233
235
 
234
236
  class RelatedProduct < SubsetDSL
235
- include EanMethods
236
- include ProprietaryIdMethods
237
+ include IdentifiersMethods::Ean
238
+ include IdentifiersMethods::ProprietaryId
237
239
 
238
240
  element "RelationCode", :text, :shortcut => :code
239
241
  elements "ProductIdentifier", :subset, :shortcut => :identifiers
@@ -246,17 +248,17 @@ module ONIX
246
248
  element "SubjectCode", :text, :shortcut => :code
247
249
  element "SubjectHeadingText", :text, :shortcut => :heading_text
248
250
  element "MainSubjectSchemeIdentifier", :subset, {
249
- :shortcut => :scheme_identifier,
250
- :klass => "SubjectSchemeIdentifier"
251
+ :shortcut => :scheme_identifier,
252
+ :klass => "SubjectSchemeIdentifier"
251
253
  }
252
254
  element "SubjectSchemeName", :text, :shortcut => :scheme_name
253
255
  element "SubjectSchemeVersion", :text, :shortcut => :scheme_version
254
256
  end
255
257
 
256
258
  class Product < SubsetDSL
257
- include EanMethods
258
- include IsbnMethods
259
- include ProprietaryIdMethods
259
+ include IdentifiersMethods::Ean
260
+ include IdentifiersMethods::Isbn
261
+ include IdentifiersMethods::ProprietaryId
260
262
 
261
263
  element "RecordReference", :text
262
264
  elements "ProductIdentifier", :subset, :shortcut => :identifiers
@@ -281,7 +283,7 @@ module ONIX
281
283
 
282
284
  elements "OtherText", :subset
283
285
 
284
- elements "SalesRights", :subset, {:pluralize => false}
286
+ elements "SalesRights", :subset, { :pluralize => false }
285
287
  elements "NotForSale", :subset
286
288
 
287
289
  element "BASICMainSubject", :text
@@ -289,7 +291,7 @@ module ONIX
289
291
  elements "Subject", :subset
290
292
 
291
293
  element "PublishingStatus", :text
292
- element "PublicationDate", :text, {:parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") }}
294
+ element "PublicationDate", :text, { :parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") } }
293
295
 
294
296
  elements "RelatedProduct", :subset, :shortcut => :related
295
297
 
@@ -440,7 +442,7 @@ module ONIX
440
442
  nil
441
443
  end
442
444
 
443
- include ProductSuppliesExtractor
445
+ include ProductSuppliesMethods
444
446
 
445
447
  # doesn't apply
446
448
  def parts
data/lib/onix/product.rb CHANGED
@@ -3,6 +3,7 @@ require 'onix/helper'
3
3
  require 'onix/code'
4
4
  require 'onix/entity'
5
5
  require 'onix/identifier'
6
+ require 'onix/barcode'
6
7
  require 'onix/descriptive_detail'
7
8
  require 'onix/publishing_detail'
8
9
  require 'onix/collateral_detail'
@@ -12,15 +13,15 @@ require 'onix/product_supply'
12
13
  require 'onix/content_detail'
13
14
  require 'onix/territory'
14
15
  require 'onix/error'
15
- require 'onix/product_supplies_extractor'
16
+ require 'onix/product_supplies_methods'
16
17
 
17
18
  module ONIX
18
19
  class Product < SubsetDSL
19
20
  extend Forwardable
20
- include EanMethods
21
- include IsbnMethods
22
- include ProprietaryIdMethods
23
- include ProductSuppliesExtractor
21
+ include IdentifiersMethods::Ean
22
+ include IdentifiersMethods::Isbn
23
+ include IdentifiersMethods::ProprietaryId
24
+ include ProductSuppliesMethods
24
25
 
25
26
  element "RecordReference", :text, :cardinality => 1
26
27
  element "NotificationType", :subset, :cardinality => 1
@@ -29,10 +30,7 @@ module ONIX
29
30
  elements "RecordSourceIdentifier", :subset, :cardinality => 0..n
30
31
  element "RecordSourceName", :text, :cardinality => 0..1
31
32
  elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
32
-
33
- # elements "Barcode", :subset, :cardinality => 0..n
34
-
35
-
33
+ elements "Barcode", :subset, :cardinality => 0..n
36
34
  element "DescriptiveDetail", :subset, :cardinality => 0..1
37
35
  element "CollateralDetail", :subset, :cardinality => 0..1
38
36
 
@@ -1,8 +1,8 @@
1
1
  module ONIX
2
2
  # product part use full Product to provide file protection and file size
3
3
  class ProductPart < SubsetDSL
4
- include EanMethods
5
- include ProprietaryIdMethods
4
+ include IdentifiersMethods::Ean
5
+ include IdentifiersMethods::ProprietaryId
6
6
 
7
7
  element "PrimaryPart", :bool, :cardinality => 0..1
8
8
  elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
@@ -1,6 +1,6 @@
1
1
  module ONIX
2
2
  # flattened supplies extractor
3
- module ProductSuppliesExtractor
3
+ module ProductSuppliesMethods
4
4
  # class must define a product_supplies returning an Array of objects responding to :
5
5
  # - availability_date (Date)
6
6
  # - countries (country code Array)
@@ -112,7 +112,7 @@ module ONIX
112
112
 
113
113
  # merge by territories
114
114
  grouped_territories_supplies = {}
115
- grouped_supplies.each do |ksup, supply|
115
+ grouped_supplies.values.each do |supply|
116
116
  fsupply = supply.first
117
117
  pr_key = "#{fsupply[:available]}_#{fsupply[:including_tax]}_#{fsupply[:currency]}"
118
118
  supply.each do |s|
@@ -124,7 +124,7 @@ module ONIX
124
124
 
125
125
  supplies = []
126
126
 
127
- grouped_territories_supplies.each do |ksup, supply|
127
+ grouped_territories_supplies.values.each do |supply|
128
128
  fsupply = supply.first.first
129
129
  supplies << {:including_tax => fsupply[:including_tax], :currency => fsupply[:currency],
130
130
  :territory => supply.map { |fs| fs.map { |s| s[:territory] } }.flatten.uniq,
@@ -0,0 +1,11 @@
1
+ module ONIX
2
+ class PublisherRepresentative < SubsetDSL
3
+ element "AgentRole", :subset, :cardinality => 1
4
+ elements "AgentIdentifier", :subset, :cardinality => 0..n
5
+ element "AgentName", :text, :cardinality => 0..1
6
+ elements "TelephoneNumber", :text, :cardinality => 0..n
7
+ elements "FaxNumber", :text, :cardinality => 0..n
8
+ elements "EmailAddress", :text, :cardinality => 0..n
9
+ elements "Website", :subset, :cardinality => 0..n
10
+ end
11
+ end
@@ -1,7 +1,7 @@
1
1
  module ONIX
2
2
  class RelatedProduct < SubsetDSL
3
- include EanMethods
4
- include ProprietaryIdMethods
3
+ include IdentifiersMethods::Ean
4
+ include IdentifiersMethods::ProprietaryId
5
5
 
6
6
  elements "ProductRelationCode", :subset, :shortcut => :codes, :cardinality => 1..n
7
7
  elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 1..n
@@ -1,6 +1,7 @@
1
1
  module ONIX
2
2
  class RelatedWork < SubsetDSL
3
- include EanMethods
3
+ include IdentifiersMethods::Ean
4
+
4
5
  element "WorkRelationCode", :subset, :shortcut => :code, :cardinality => 0..n
5
6
  elements "WorkIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
6
7
 
data/lib/onix/sender.rb CHANGED
@@ -2,7 +2,7 @@ require 'onix/identifier'
2
2
 
3
3
  module ONIX
4
4
  class Sender < SubsetDSL
5
- include GlnMethods
5
+ include IdentifiersMethods::Gln
6
6
 
7
7
  elements "SenderIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
8
8
  element "SenderName", :text, :shortcut => :name, :cardinality => 0..1
@@ -18,10 +18,10 @@ module ONIX
18
18
  if subset.is_a?(ONIX::ONIXMessage)
19
19
  mod.const_get("Root").serialize(data, subset, "ONIXMessage", level)
20
20
  else
21
- if subset.class.included_modules.include?(DateHelper)
21
+ if subset.class.included_modules.include?(DateMethods)
22
22
  mod.const_get("Date").serialize(data, subset, parent_tag, level)
23
23
  else
24
- if subset.class.included_modules.include?(CodeHelper)
24
+ if subset.class.included_modules.include?(CodeMethods)
25
25
  mod.const_get("Code").serialize(data, subset, parent_tag, level)
26
26
  else
27
27
  mod.const_get("Subset").serialize(data, subset, parent_tag, level)
@@ -47,8 +47,8 @@ module ONIX
47
47
  end
48
48
 
49
49
  def self.recursive_serialize(mod, data, subset, parent_tag = nil, level = 0)
50
- if subset.class.respond_to?(:ancestors_registered_elements)
51
- subset.class.ancestors_registered_elements.each do |tag, element|
50
+ if subset.respond_to?(:registered_elements)
51
+ subset.registered_elements.each do |tag, element|
52
52
  next if element.short
53
53
  val = subset.instance_variable_get(element.to_instance)
54
54
  if val
@@ -112,7 +112,7 @@ module ONIX
112
112
  code_format = date.format_from_code(date_format.code)
113
113
 
114
114
  xml.send(parent_tag, nil) {
115
- date.class.ancestors_registered_elements.each do |tag, element|
115
+ date.registered_elements.each do |tag, element|
116
116
  next if element.short
117
117
  val = date.instance_variable_get(element.to_instance)
118
118
  if val