im_onix 1.2.2 → 1.2.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f4feeceb8c2275507ee70aac9c2eb2cf8cc335d14ae60fb480b8493b539ecd9
4
- data.tar.gz: ead4f5e2dfb4e4a5cbcd14c14a5a3f8efe0004aac253c9c26aab3a91500d689a
3
+ metadata.gz: 956b2f80b2309dd983629d3e3ec2e14f854c8514ae5fe0cf2030c6929c6db371
4
+ data.tar.gz: 60b6cfbd37b72e1ee40db946dfff209b18479c1a360fbb7123c4e91da87734f7
5
5
  SHA512:
6
- metadata.gz: 8a4c862b06d7613c47a9395737227d0f212f76a7780cba9832060a613e2fc0f0a1ee445e937d08e59921a788c93fc60ff38a3d571a1e8cbc4c46864b1b046215
7
- data.tar.gz: f0c1496ae0a1b33d8b10a2e8403383e6918f51982bfe946eceac4111aac12ee543454a68d74211102f2193b73043c036425b3b3ac7890d279b0f995097115c4a
6
+ metadata.gz: 898d6346b0e55f4c1b7521e7f3a91d3c03565503833b3acd481fa964ce31b18d8c44df63cbf6eb9848bce854390464f4c2979fff55421d7f48ad9078517fbc56
7
+ data.tar.gz: 55b9ace6c959c0d6397d42c1ae01d4bef0c8aba84d073258a7fe8855b1c08ef3697cc1a65a53c307de3895ca319f2ca0a6cfb840a33322f318aae646da768e32
data/doc-src/handlers.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'yaml'
1
2
  class DSLHelpers
2
3
  def self.inflectors
3
4
  [['ox', 'oxes'],
@@ -47,6 +48,10 @@ class ElementDSLAttributeHandler < YARD::Handlers::Ruby::Base
47
48
  handles method_call(:element)
48
49
  namespace_only
49
50
 
51
+ def n
52
+ Float::INFINITY
53
+ end
54
+
50
55
  process do
51
56
  name = statement.parameters[0].jump(:tstring_content, :ident).source
52
57
  type = statement.parameters[1].jump(:tstring_content, :ident).source
@@ -93,6 +98,10 @@ class ElementsDSLAttributeHandler < YARD::Handlers::Ruby::Base
93
98
  handles method_call(:elements)
94
99
  namespace_only
95
100
 
101
+ def n
102
+ Float::INFINITY
103
+ end
104
+
96
105
  process do
97
106
  name = statement.parameters[0].jump(:tstring_content, :ident).source
98
107
  type = statement.parameters[1].jump(:tstring_content, :ident).source
@@ -133,10 +142,8 @@ class ElementsDSLAttributeHandler < YARD::Handlers::Ruby::Base
133
142
  register(object)
134
143
  end
135
144
  end
136
-
137
145
  end
138
146
 
139
-
140
147
  class DefDelegatorAttributeHandler < YARD::Handlers::Ruby::Base
141
148
  handles method_call(:def_delegator)
142
149
  namespace_only
@@ -152,3 +159,26 @@ class DefDelegatorAttributeHandler < YARD::Handlers::Ruby::Base
152
159
  register(object)
153
160
  end
154
161
  end
162
+
163
+ class CodeAttributeHandler < YARD::Handlers::Ruby::Base
164
+ handles method_call(:code_identifier)
165
+ namespace_only
166
+
167
+ process do
168
+ name = statement.parameters[0].jump(:tstring_content, :ident).source
169
+ codelist_filename = File.dirname(__FILE__) + "/../data/codelists/codelist-#{name}.yml"
170
+ if File.exist?(codelist_filename)
171
+ codelist = YAML.load(File.read(codelist_filename))[:codelist]
172
+ humanized = []
173
+ codelist.each do |k,v|
174
+ humanized << "#{v} (#{k})"
175
+ end
176
+ returns = YARD::DocstringParser.new.parse("@return [String] humanized name (from code): "+humanized.join(", ")).to_docstring.tags.first
177
+ object = YARD::CodeObjects::MethodObject.new(namespace, "human", :instance)
178
+ object.dynamic = true
179
+ object.add_tag(returns) if returns
180
+ object[:group] = 'Low level'
181
+ register(object)
182
+ end
183
+ end
184
+ end
data/im_onix.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "im_onix"
7
- spec.version = "1.2.2"
7
+ spec.version = "1.2.3"
8
8
  spec.authors = ["Julien Boulnois"]
9
9
  spec.email = ["jboulnois@immateriel.fr"]
10
10
 
@@ -3,6 +3,7 @@ module ONIX
3
3
  element "AudienceRangeQualifier", :subset, :cardinality => 1
4
4
  element "AudienceRangePrecision", :subset, :cardinality => 1
5
5
  element "AudienceRangeValue", :integer, :cardinality => 1
6
+
6
7
  # element "AudienceRangePrecision", :subset, :cardinality => 0..1
7
8
  # element "AudienceRangeValue", :integer, :cardinality => 0..1
8
9
  end
data/lib/onix/code.rb CHANGED
@@ -13,11 +13,13 @@ module ONIX
13
13
  end
14
14
 
15
15
  # Humanized string code
16
+ # @return [String]
16
17
  def human
17
18
  @human
18
19
  end
19
20
 
20
21
  # ONIX code
22
+ # @return [String]
21
23
  def onix
22
24
  @code
23
25
  end
@@ -89,6 +91,7 @@ module ONIX
89
91
 
90
92
  class CodeFromYamlWithMime < CodeFromYaml
91
93
  # main formats
94
+ # @return [String]
92
95
  def mimetype
93
96
  case self.human
94
97
  when "Epub"
@@ -17,6 +17,7 @@ module ONIX
17
17
  # @!group High level
18
18
 
19
19
  # collection title string
20
+ # @return [String]
20
21
  def title
21
22
  if collection_title_element
22
23
  collection_title_element.title
@@ -24,12 +25,14 @@ module ONIX
24
25
  end
25
26
 
26
27
  # collection subtitle string
28
+ # @return [String]
27
29
  def subtitle
28
30
  if collection_title_element
29
31
  collection_title_element.subtitle
30
32
  end
31
33
  end
32
34
 
35
+ # @return [TitleElement]
33
36
  def collection_title_element
34
37
  distinctive_title = @title_details.distinctive_title.first
35
38
  #select { |td| td.type.human=~/DistinctiveTitle/}.first
@@ -13,7 +13,10 @@ module ONIX
13
13
  class ContentItem < SubsetDSL
14
14
  element "LevelSequenceNumber", :integer, :cardinality => 0..1
15
15
  element "TextItem", :subset, :cardinality => 0..1
16
+
16
17
  # element "AVItem", :subset, :cardinality => 0..1
18
+
19
+
17
20
  element "ComponentTypeName", :text, :cardinality => 0..1
18
21
  element "ComponentNumber", :text, :cardinality => 0..1
19
22
  elements "TitleDetail", :subset, :cardinality => 0..n
@@ -22,7 +25,10 @@ module ONIX
22
25
  element "NoContributor", :bool, :cardinality => 0..1
23
26
  elements "Language", :subset, :cardinality => 0..n
24
27
  elements "Subject", :subset, :cardinality => 0..n
28
+
25
29
  # elements "NameAsSubject", :subset, :cardinality => 0..n
30
+
31
+
26
32
  elements "TextContent", :subset, :cardinality => 0..n
27
33
  elements "CitedContent", :subset, :cardinality => 0..n
28
34
  elements "SupportingResource", :subset, :cardinality => 0..n
@@ -9,7 +9,10 @@ module ONIX
9
9
  element "ContributorRole", :subset, :shortcut => :role, :cardinality => 1..n
10
10
  elements "FromLanguage", :subset, :klass => "LanguageCode", :cardinality => 0..n
11
11
  elements "ToLanguage", :subset, :klass => "LanguageCode", :cardinality => 0..n
12
+
12
13
  # element "NameType", :subset, :cardinality => 0..1
14
+
15
+
13
16
  elements "NameIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
14
17
  element "PersonName", :text, :cardinality => 0..1
15
18
  element "PersonNameInverted", :text, :cardinality => 0..1
@@ -21,11 +24,17 @@ module ONIX
21
24
  element "SuffixToKey", :text, :cardinality => 0..1
22
25
  element "LettersAfterNames", :text, :cardinality => 0..1
23
26
  element "TitlesAfterNames", :text, :cardinality => 0..1
27
+
24
28
  # element "Gender", :subset, :cardinality => 0..1
29
+
30
+
25
31
  element "CorporateName", :text, :cardinality => 0..1
26
32
  element "CorporateNameInverted", :text, :cardinality => 0..1
33
+
27
34
  # element "UnnamedPersons", :subset, :cardinality => 0..1
28
35
  # elements "AlternativeName", :subset, :cardinality => 0..n
36
+
37
+
29
38
  elements "ContributorDate", :subset, :shortcut => :dates, :cardinality => 0..n
30
39
  elements "ProfessionalAffiliation", :subset, :cardinality => 0..n
31
40
  elements "Prize", :subset, :cardinality => 0..n
@@ -34,6 +43,15 @@ module ONIX
34
43
  elements "ContributorDescription", :text, :cardinality => 0..n
35
44
  elements "ContributorPlace", :subset, :shortcut => :places, :cardinality => 0..n
36
45
 
46
+ # @!group Shortcuts
47
+
48
+ # @return [ContributorPlace]
49
+ def place
50
+ self.places.first
51
+ end
52
+
53
+ # !@endgroup
54
+
37
55
  # @!group High level
38
56
  # flatten person name (firstname lastname)
39
57
  # @return [String]
@@ -63,10 +81,6 @@ module ONIX
63
81
  self.biographies.first
64
82
  end
65
83
 
66
- def place
67
- self.places.first
68
- end
69
-
70
84
  # raw biography string without HTML
71
85
  # @return [String]
72
86
  def raw_biography
@@ -2,6 +2,7 @@ module ONIX
2
2
  class CopyrightStatement < SubsetDSL
3
3
  element "CopyrightType", :subset, :cardinality => 0..1
4
4
  elements "CopyrightYear", :text, :cardinality => 0..n
5
+
5
6
  # elements "CopyrightOwner", :subset, :cardinality => 0..n
6
7
  end
7
8
  end
data/lib/onix/date.rb CHANGED
@@ -1,6 +1,11 @@
1
1
  module ONIX
2
2
  module DateHelper
3
- attr_accessor :date_format, :date, :datetime
3
+ # @return [DateFormat]
4
+ attr_accessor :date_format
5
+ # @return [Date]
6
+ attr_accessor :date
7
+ # @return [Time]
8
+ attr_accessor :datetime
4
9
 
5
10
  def parse_date
6
11
  if @date_format
@@ -15,6 +20,9 @@ module ONIX
15
20
  @date = @datetime ? @datetime.to_date : nil
16
21
  end
17
22
 
23
+ # @param [String] date_txt
24
+ # @param [DateFormat] date_format
25
+ # @return [Time]
18
26
  def strpdate!(date_txt, date_format)
19
27
  date_format ||= DateFormat.from_code("00")
20
28
  code_format = format_from_code(date_format.code)
@@ -36,6 +44,8 @@ module ONIX
36
44
  datetime
37
45
  end
38
46
 
47
+ # @param [String] code
48
+ # @return [String]
39
49
  def format_from_code(code)
40
50
  case code
41
51
  when "00"
@@ -55,6 +65,7 @@ module ONIX
55
65
  end
56
66
  end
57
67
 
68
+ # @param [String] str
58
69
  def format_from_string(str)
59
70
  case str
60
71
  when /^\d{4}\d{2}\d{2}T\d{2}\d{2}\d{2}/
@@ -72,6 +83,7 @@ module ONIX
72
83
  end
73
84
  end
74
85
 
86
+ # @return [Time]
75
87
  def time
76
88
  @datetime
77
89
  end
@@ -124,6 +136,9 @@ module ONIX
124
136
  include DateHelper
125
137
  element "DateFormat", :subset
126
138
  element "Date", :text
139
+
140
+ # use former date representation
141
+ # @return [Boolean]
127
142
  attr_accessor :deprecated_date_format
128
143
 
129
144
  def initialize
@@ -43,14 +43,20 @@ module ONIX
43
43
  elements "Contributor", :subset, :cardinality => 0..n
44
44
  elements "ContributorStatement", :text, :cardinality => 0..n
45
45
  element "NoContributor", :bool, :cardinality => 0..1
46
+
46
47
  # elements "Conference", :subset, :cardinality => 0..n
47
48
  # elements "Event", :subset, :cardinality => 0..n
49
+
50
+
48
51
  element "EditionType", :subset, :cardinality => 0..n
49
52
  element "EditionNumber", :integer, :cardinality => 0..1
50
53
  element "EditionVersionNumber", :text, :cardinality => 0..1
51
54
  elements "EditionStatement", :text, :cardinality => 0..n
52
55
  element "NoEdition", :bool, :cardinality => 0..1
56
+
53
57
  # element "ReligiousText", :subset, :cardinality => 0..1
58
+
59
+
54
60
  elements "Language", :subset, :cardinality => 0..1
55
61
  elements "Extent", :subset, :cardinality => 0..n
56
62
  element "Illustrated", :subset, :cardinality => 0..1
@@ -58,7 +64,10 @@ module ONIX
58
64
  elements "IllustrationsNote", :text, :cardinality => 0..n
59
65
  elements "AncillaryContent", :subset, :cardinality => 0..n
60
66
  elements "Subject", :subset, :cardinality => 0..n
67
+
61
68
  # elements "NameAsSubject", :subset, :cardinality => 0..n
69
+
70
+
62
71
  elements "AudienceCode", :subset, :cardinality => 0..n
63
72
  elements "Audience", :subset, :cardinality => 0..n
64
73
  elements "AudienceRange", :subset, :cardinality => 0..n
@@ -67,18 +76,48 @@ module ONIX
67
76
 
68
77
  # @!group Shortcuts
69
78
 
79
+ # @return [Extent]
70
80
  def pages_extent
71
81
  @extents.page.first
72
82
  end
73
83
 
84
+ # @return [TitleElement]
74
85
  def product_title_element
75
86
  @title_details.distinctive_title.first.title_elements.product_level.first if @title_details.distinctive_title.first
76
87
  end
77
88
 
89
+ # @return [Array<ProductFormDetail>]
78
90
  def file_formats
79
91
  @product_form_details.select { |fd| fd.code =~ /^E1.*/ }
80
92
  end
81
93
 
94
+ # @return [Collection]
95
+ def publisher_collection
96
+ @collections.publisher.first
97
+ end
98
+
99
+ # @return [Extent]
100
+ def filesize_extent
101
+ @extents.filesize.first
102
+ end
103
+
104
+ # @return [Array<ProductFormDetail>]
105
+ def audio_formats
106
+ @product_form_details.select { |fd| fd.code =~ /^A.*/ }
107
+ end
108
+
109
+ # BISAC categories
110
+ # @return [Array<Subject>]
111
+ def bisac_categories
112
+ @subjects.bisac
113
+ end
114
+
115
+ # CLIL categories
116
+ # @return [Array<Subject>]
117
+ def clil_categories
118
+ @subjects.clil
119
+ end
120
+
82
121
  # @!endgroup
83
122
 
84
123
  # @!group High level
@@ -103,10 +142,6 @@ module ONIX
103
142
  end
104
143
  end
105
144
 
106
- def filesize_extent
107
- @extents.filesize.first
108
- end
109
-
110
145
  # file size in bytes
111
146
  # @return [Integer]
112
147
  def filesize
@@ -145,14 +180,11 @@ module ONIX
145
180
  not audio_formats.empty?
146
181
  end
147
182
 
183
+ # @return [String]
148
184
  def audio_format
149
185
  self.audio_formats.first.human if self.audio_formats.first
150
186
  end
151
187
 
152
- def audio_formats
153
- @product_form_details.select { |fd| fd.code =~ /^A.*/ }
154
- end
155
-
156
188
  # is digital offer a bundle ?
157
189
  # @return [Boolean]
158
190
  def bundle?
@@ -200,6 +232,7 @@ module ONIX
200
232
  end
201
233
 
202
234
  # language of text
235
+ # @return [String]
203
236
  def language_of_text
204
237
  l = @languages.of_text.first
205
238
  if l
@@ -207,10 +240,6 @@ module ONIX
207
240
  end
208
241
  end
209
242
 
210
- def publisher_collection
211
- @collections.publisher.first
212
- end
213
-
214
243
  # publisher collection title
215
244
  # @return [String]
216
245
  def publisher_collection_title
@@ -219,24 +248,12 @@ module ONIX
219
248
  end
220
249
  end
221
250
 
222
- # BISAC categories
223
- # @return [Array<Subject>]
224
- def bisac_categories
225
- @subjects.bisac
226
- end
227
-
228
251
  # BISAC categories identifiers string array (eg: FIC000000)
229
252
  # @return [Array<String>]
230
253
  def bisac_categories_codes
231
254
  self.bisac_categories.map { |c| c.code }.uniq
232
255
  end
233
256
 
234
- # BISAC categories
235
- # @return [Array<Subject>]
236
- def clil_categories
237
- @subjects.clil
238
- end
239
-
240
257
  # CLIL categories identifier string array
241
258
  # @return [Array<String>]
242
259
  def clil_categories_codes
@@ -244,6 +261,7 @@ module ONIX
244
261
  end
245
262
 
246
263
  # keywords string array
264
+ # @return [Array<String>]
247
265
  def keywords
248
266
  kws = @subjects.keyword.map { |kw| kw.heading_text }.compact
249
267
  kws = kws.flat_map { |kw| kw.split(/;|,|\n/) }.map { |kw| kw.strip }
data/lib/onix/entity.rb CHANGED
@@ -10,18 +10,22 @@ module ONIX
10
10
  include GlnMethods
11
11
  include EntityHelper
12
12
 
13
+ # @return [String]
13
14
  def self.role_tag
14
15
  "#{self.prefix}Role"
15
16
  end
16
17
 
18
+ # @return [String]
17
19
  def self.name_tag
18
20
  "#{self.prefix}Name"
19
21
  end
20
22
 
23
+ # @return [String]
21
24
  def self.identifier_tag
22
25
  "#{self.prefix}Identifier"
23
26
  end
24
27
 
28
+ # @return [String]
25
29
  def self.prefix
26
30
  end
27
31
 
data/lib/onix/helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module ONIX
2
2
  class Helper
3
3
  # convert arbitrary arg to File/String
4
+ # @param [String, File] arg
4
5
  def self.arg_to_data(arg)
5
6
  data = ""
6
7
  case arg
@@ -33,18 +34,8 @@ module ONIX
33
34
  end
34
35
  end
35
36
 
36
- def self.text_at(n, xpath)
37
- if n.at_xpath(xpath)
38
- n.at_xpath(xpath).text.strip
39
- else
40
- nil
41
- end
42
- end
43
-
44
- def self.mandatory_text_at(n, xpath)
45
- self.text_at(n, xpath)
46
- end
47
-
37
+ # @param [String] html
38
+ # @return [String]
48
39
  def self.strip_html(html)
49
40
  html.gsub(/&nbsp;/, " ").gsub(/<[^>]*(>+|\s*\z)/m, '')
50
41
  end
@@ -74,6 +74,7 @@ module ONIX
74
74
 
75
75
  module EanMethods
76
76
  # EAN string identifier from identifiers
77
+ # @return [String]
77
78
  def ean
78
79
  if ean_identifier
79
80
  ean_identifier.value
@@ -90,6 +91,7 @@ module ONIX
90
91
 
91
92
  module IsbnMethods
92
93
  # ISBN-13 string identifier from identifiers
94
+ # @return [String]
93
95
  def isbn13
94
96
  if isbn13_identifier
95
97
  isbn13_identifier.value
@@ -106,6 +108,7 @@ module ONIX
106
108
 
107
109
  module GlnMethods
108
110
  # GLN string identifier from identifiers
111
+ # @return [String]
109
112
  def gln
110
113
  if gln_identifier
111
114
  if gln_identifier.value =~ /\d{13}/
@@ -89,6 +89,7 @@ module ONIX
89
89
  end
90
90
 
91
91
  # open with arg detection
92
+ # @param [String, File] arg
92
93
  def open(arg, force_encoding = nil)
93
94
  data = ONIX::Helper.arg_to_data(arg)
94
95
 
@@ -104,6 +105,7 @@ module ONIX
104
105
  end
105
106
 
106
107
  # release as an integer eg: 210, 300, 301
108
+ # @return [Number]
107
109
  def version
108
110
  if @release
109
111
  @release.gsub(/\./, "").to_i * 10 ** (3 - @release.scan(".").length - 1)
@@ -111,6 +113,7 @@ module ONIX
111
113
  end
112
114
 
113
115
  # detect ONIX version from XML tags
116
+ # @return [String]
114
117
  def detect_release(element)
115
118
  if element
116
119
  return "3.0" if element.search("//DescriptiveDetail").length > 0
@@ -144,6 +147,7 @@ module ONIX
144
147
  end
145
148
 
146
149
  # parse filename or file
150
+ # @param [String, File] arg
147
151
  def parse(arg, force_encoding = nil, force_release = nil)
148
152
  @products = []
149
153
  xml = open(arg, force_encoding)
data/lib/onix/price.rb CHANGED
@@ -8,25 +8,33 @@ require 'onix/comparison_product_price'
8
8
  module ONIX
9
9
  class Price < SubsetDSL
10
10
  # elements "PriceIdentifier", :subset, :cardinality => 0..n
11
+
12
+
11
13
  element "PriceType", :subset, :shortcut => :type, :cardinality => 0..1
12
14
  element "PriceQualifier", :subset, :shortcut => :qualifier, :cardinality => 0..1
13
15
  elements "EpubTechnicalProtection", :subset, :cardinality => 0..n
16
+
14
17
  # elements "PriceConstraint", :subset, :cardinality => 0..n
18
+
19
+
15
20
  element "EpubLicense", :subset, :cardinality => 0..1
16
21
  element "PriceTypeDescription", :text, :cardinality => 0..n
22
+
17
23
  # element "PricePer", :subset, :cardinality => 0..1
18
24
  # elements "PriceCondition", :subset, :cardinality => 0..n
19
25
  # element "MinimumOrderQuantity", :integer, :cardinality => 0..1
20
26
  # elements "BatchBonus", :subset, :cardinality => 0..n
27
+
28
+
21
29
  elements "DiscountCoded", :subset, :cardinality => 0..n
22
30
  elements "Discount", :subset, :cardinality => 0..n
23
31
  element "PriceStatus", :subset
24
32
  element "PriceAmount", :float,
25
33
  {
26
- :shortcut => :amount,
27
- :parse_lambda => lambda { |v| (v * 100).round },
28
- :serialize_lambda => lambda { |v| format("%.2f", v / 100.0) },
29
- :cardinality => 0..1
34
+ :shortcut => :amount,
35
+ :parse_lambda => lambda { |v| (v * 100).round },
36
+ :serialize_lambda => lambda { |v| format("%.2f", v / 100.0) },
37
+ :cardinality => 0..1
30
38
  }
31
39
  element "Tax", :subset, :cardinality => 0..n
32
40
  element "TaxExempt", :bool, :cardinality => 0..1
@@ -39,6 +47,7 @@ module ONIX
39
47
  element "PositionOnProduct", :subset, :cardinality => 0..1
40
48
 
41
49
  # FIXME discount_coded != discount
50
+ # @return [DiscountCoded]
42
51
  def discount
43
52
  self.discount_codeds.first
44
53
  end
data/lib/onix/product.rb CHANGED
@@ -29,10 +29,16 @@ module ONIX
29
29
  elements "RecordSourceIdentifier", :subset, :cardinality => 0..n
30
30
  element "RecordSourceName", :text, :cardinality => 0..1
31
31
  elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
32
+
32
33
  # elements "Barcode", :subset, :cardinality => 0..n
34
+
35
+
33
36
  element "DescriptiveDetail", :subset, :cardinality => 0..1
34
37
  element "CollateralDetail", :subset, :cardinality => 0..1
38
+
35
39
  # element "PromotionDetail", :subset, :cardinality => 0..1
40
+
41
+
36
42
  element "ContentDetail", :subset, :cardinality => 0..1
37
43
  element "PublishingDetail", :subset, :cardinality => 0..1
38
44
  element "RelatedMaterial", :subset, :cardinality => 0..1
@@ -99,19 +105,23 @@ module ONIX
99
105
  def_delegator :publishing_detail, :imprint
100
106
  def_delegator :publishing_detail, :publisher
101
107
 
108
+ # @return [CollateralDetail]
102
109
  def collateral_detail
103
110
  @collateral_detail || CollateralDetail.new
104
111
  end
105
112
 
113
+ # @return [DescriptiveDetail]
106
114
  def descriptive_detail
107
115
  @descriptive_detail || DescriptiveDetail.new
108
116
  end
109
117
 
118
+ # @return [PublishingDetail]
110
119
  def publishing_detail
111
120
  @publishing_detail || PublishingDetail.new
112
121
  end
113
122
 
114
123
  # product LanguageCode of text
124
+ # @return [String]
115
125
  def language_of_text
116
126
  @descriptive_detail.language_of_text || @default_language_of_text
117
127
  end
@@ -9,7 +9,10 @@ module ONIX
9
9
  element "ProductForm", :subset, :shortcut => :form, :cardinality => 1
10
10
  elements "ProductFormDetail", :subset, :shortcut => :form_details, :cardinality => 0..n
11
11
  elements "ProductFormFeature", :subset, :cardinality => 0..n
12
+
12
13
  # element "ProductPackaging", :subset, :cardinality => 0..1
14
+
15
+
13
16
  elements "ProductFormDescription", :text, :shortcut => :file_description, :cardinality => 0..n
14
17
  elements "ProductContentType", :subset, :shortcut => :content_types, :cardinality => 0..n
15
18
  elements "Measure", :subset, :cardinality => 0..n
@@ -21,11 +24,13 @@ module ONIX
21
24
  @product_form_details.select { |fd| fd.code =~ /^E1.*/ }
22
25
  end
23
26
 
27
+ # @return [ProductFormDescription]
24
28
  def product_form_description
25
29
  product_form_descriptions.first
26
30
  end
27
31
 
28
32
  # full Product if referenced in ONIXMessage
33
+ # @return [Product]
29
34
  attr_accessor :product
30
35
 
31
36
  # this ProductPart is part of Product
@@ -41,6 +41,7 @@ module ONIX
41
41
  @supply_details.delete_if { |supply_detail| supply_detail.available? }
42
42
  end
43
43
 
44
+ # @return [Boolean]
44
45
  def available?
45
46
  self.available_supply_details.length > 0
46
47
  end
@@ -21,6 +21,7 @@ module ONIX
21
21
 
22
22
  # @!group High level
23
23
 
24
+ # @return [Publisher]
24
25
  def publisher
25
26
  main_publishers = @publishers.select { |p| p.role.human == "Publisher" }
26
27
  return nil if main_publishers.empty?
@@ -31,6 +32,7 @@ module ONIX
31
32
  end
32
33
  end
33
34
 
35
+ # @return [Imprint]
34
36
  def imprint
35
37
  if @imprints.length > 0
36
38
  if @imprints.length == 1
@@ -42,6 +44,7 @@ module ONIX
42
44
  end
43
45
 
44
46
  # date of publication
47
+ # @return [Date]
45
48
  def publication_date
46
49
  pub = @publishing_dates.publication.first
47
50
  if pub
@@ -50,6 +53,7 @@ module ONIX
50
53
  end
51
54
 
52
55
  # date of embargo
56
+ # @return [Date]
53
57
  def embargo_date
54
58
  pub = @publishing_dates.embargo.first
55
59
  if pub
@@ -57,6 +61,7 @@ module ONIX
57
61
  end
58
62
  end
59
63
 
64
+ # @return [Date]
60
65
  def preorder_embargo_date
61
66
  pub = @publishing_dates.preorder_embargo.first
62
67
  if pub
@@ -64,6 +69,7 @@ module ONIX
64
69
  end
65
70
  end
66
71
 
72
+ # @return [Date]
67
73
  def public_announcement_date
68
74
  pub = @publishing_dates.public_announcement.first
69
75
  if pub
@@ -7,21 +7,25 @@ module ONIX
7
7
 
8
8
  # @!group High level
9
9
 
10
+ # @return [Array<RelatedProduct>]
10
11
  def linking(human)
11
12
  @related_products.select{|rp| rp.code.human==human}
12
13
  end
13
14
 
14
15
  # print products RelatedProduct array
16
+ # @return [Array<RelatedProduct>]
15
17
  def print_products
16
18
  linking("EpublicationBasedOnPrintProduct") + self.alternative_format_products.select{|rp| rp.form && rp.form.code=~/^B/}
17
19
  end
18
20
 
19
21
  # is part of products RelatedProduct array
22
+ # @return [Array<RelatedProduct>]
20
23
  def part_of_products
21
24
  linking("IsPartOf")
22
25
  end
23
26
 
24
27
  # alternative format products RelatedProduct array
28
+ # @return [Array<RelatedProduct>]
25
29
  def alternative_format_products
26
30
  linking("AlternativeFormat")
27
31
  end
@@ -9,19 +9,23 @@ module ONIX
9
9
  elements "ProductFormDetail", :subset, :shortcut => :form_details, :cardinality => 0..n
10
10
 
11
11
  # full Product if referenced in ONIXMessage
12
+ # @return [Product]
12
13
  attr_accessor :product
13
14
 
15
+ # @return [ProductRelationCode]
14
16
  def code
15
17
  self.codes.first
16
18
  end
17
19
 
18
20
  # @!group High level
21
+ # @return [String]
19
22
  def file_format
20
23
  file_formats.first.human if file_formats.first
21
24
  end
22
25
 
23
26
  # @!endgroup
24
27
 
28
+ # @return [Array<ProductFormDetail>]
25
29
  def file_formats
26
30
  @product_form_details.select { |fd| fd.code =~ /^E1.*/ }
27
31
  end
@@ -5,6 +5,7 @@ module ONIX
5
5
  elements "WorkIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
6
6
 
7
7
  # full Product if referenced in ONIXMessage
8
+ # @return [Product]
8
9
  attr_accessor :product
9
10
  end
10
11
  end
@@ -7,16 +7,19 @@ module ONIX
7
7
  elements "ResourceLink", :text, :shortcut => :links, :cardinality => 1..n
8
8
  elements "ContentDate", :subset, :cardinality => 0..n
9
9
 
10
+ # @return [String]
10
11
  def filename
11
12
  if @resource_form.human == "DownloadableFile"
12
13
  resource_links.first
13
14
  end
14
15
  end
15
16
 
17
+ # @return [ResourceVersionFeature]
16
18
  def file_format_feature
17
19
  @resource_version_features.select { |f| f.type.human == "FileFormat" }.first
18
20
  end
19
21
 
22
+ # @return [String]
20
23
  def file_format
21
24
  if ["DownloadableFile", "LinkableResource"].include?(@resource_form.human)
22
25
  if file_format_feature
@@ -3,10 +3,12 @@ module ONIX
3
3
  elements "SalesOutletIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
4
4
  element "SalesOutletName", :text, :shortcut => :name, :cardinality => 0..1
5
5
 
6
+ # @return [SalesOutletIdentifier]
6
7
  def sales_outlet_identifier
7
8
  self.sales_outlet_identifiers.first
8
9
  end
9
10
 
11
+ # @return [SalesOutletIdentifier]
10
12
  def identifier
11
13
  self.identifiers.first
12
14
  end
@@ -7,6 +7,7 @@ module ONIX
7
7
  element "StartDate", :date, :cardinality => 0..1
8
8
  element "EndDate", :date, :cardinality => 0..1
9
9
 
10
+ # @return [SalesRestrictionNote]
10
11
  def note
11
12
  self.notes.first
12
13
  end
data/lib/onix/subject.rb CHANGED
@@ -7,6 +7,7 @@ module ONIX
7
7
  element "SubjectCode", :text, :shortcut => :code, :cardinality => 0..1
8
8
  elements "SubjectHeadingText", :text, :shortcut => :heading_texts, :cardinality => 0..n
9
9
 
10
+ # @return [String]
10
11
  def heading_text
11
12
  self.heading_texts.first
12
13
  end
data/lib/onix/subset.rb CHANGED
@@ -26,8 +26,10 @@ module ONIX
26
26
  end
27
27
 
28
28
  module Attributes
29
+ # @return [Hash<String,Code>]
29
30
  attr_accessor :attributes
30
31
 
32
+ # @return [Hash<String,String>]
31
33
  def serialized_attributes
32
34
  if @attributes and @attributes.length > 0
33
35
  attrs = {}
@@ -38,6 +40,8 @@ module ONIX
38
40
  end
39
41
  end
40
42
 
43
+ # @param [String] attr
44
+ # @return [Class]
41
45
  def self.attribute_class(attr)
42
46
  case attr
43
47
  when "textcase"
@@ -68,6 +72,7 @@ module ONIX
68
72
  include Attributes
69
73
 
70
74
  # instanciate Subset form Nokogiri::XML::Element
75
+ # @param [Nokogiri::XML::Element] n
71
76
  def self.parse(n)
72
77
  o = self.new
73
78
  o.parse(n)
@@ -75,6 +80,7 @@ module ONIX
75
80
  end
76
81
 
77
82
  # parse Nokogiri::XML::Element
83
+ # @param [Nokogiri::XML::Element] n
78
84
  def parse(n) end
79
85
 
80
86
  def unsupported(tag)
@@ -12,18 +12,26 @@ module ONIX
12
12
  element "ProductAvailability", :subset, :shortcut => :availability, :cardinality => 1
13
13
  elements "SupplyDate", :subset, :cardinality => 0..n
14
14
  element "OrderTime", :integer, :cardinality => 0..1
15
+
15
16
  # element "NewSupplier", :subset, :cardinality => 0..1
16
17
  # elements "Stock", :subset, :cardinality => 0..n
18
+
19
+
17
20
  element "PackQuantity", :integer, :cardinality => 0..1
18
21
  element "PalletQuantity", :integer, :cardinality => 0..1
19
22
  element "OrderQuantityMinimum", :integer, :cardinality => 0..1
23
+
20
24
  # element "OrderQuantityMinimum", :integer, :cardinality => 0..1
25
+
26
+
21
27
  element "OrderQuantityMultiple", :integer, :cardinality => 0..1
22
28
  element "UnpricedItemType", :subset, :cardinality => 0..1
23
29
  elements "Price", :subset, :cardinality => 0..n
30
+
24
31
  # element "Reissue", :subset, :cardinality => 0..1
25
32
 
26
33
  # @!group Shortcuts
34
+ # @return [Array<Supplier>]
27
35
  def distributors
28
36
  @suppliers.select { |s| s.role.human =~ /Distributor/ }.uniq
29
37
  end
@@ -17,10 +17,12 @@ module ONIX
17
17
  scope :image, lambda { human_code_match(:resource_mode, "Image") }
18
18
  scope :text, lambda { human_code_match(:resource_mode, "Text") }
19
19
 
20
+ # @return [ResourceFeature]
20
21
  def caption_feature
21
22
  self.features.caption.first
22
23
  end
23
24
 
25
+ # @return [String]
24
26
  def caption
25
27
  if self.caption_feature
26
28
  self.caption_feature.value
@@ -33,6 +33,7 @@ module ONIX
33
33
  self.class.worldwide?(self.countries)
34
34
  end
35
35
 
36
+ # @param [Array<String>] v
36
37
  def countries= v
37
38
  if (v.uniq & CountryCode.list).length == CountryCode.list.length
38
39
  @regions_included = "WORLD"
@@ -43,6 +44,8 @@ module ONIX
43
44
 
44
45
  # !@endgroup
45
46
 
47
+ # @param [String] region
48
+ # @return [Array<String>]
46
49
  def self.region_to_countries(region)
47
50
  case region
48
51
  when "WORLD"
@@ -55,6 +58,7 @@ module ONIX
55
58
  end
56
59
  end
57
60
 
61
+ # @return [Boolean]
58
62
  def self.worldwide?(countries)
59
63
  (countries & CountryCode.list).length == CountryCode.list.length
60
64
  end
@@ -10,6 +10,7 @@ module ONIX
10
10
 
11
11
  # :category: High level
12
12
  # flatten title string
13
+ # @return [String]
13
14
  def title
14
15
  return title_statement if title_statement
15
16
 
@@ -15,6 +15,7 @@ module ONIX
15
15
 
16
16
  # @!group High level
17
17
  # flatten title string
18
+ # @return [String]
18
19
  def title
19
20
  if title_text
20
21
  title_text
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: im_onix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Boulnois
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-30 00:00:00.000000000 Z
11
+ date: 2021-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler