im_onix 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
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