im_onix 1.0.2 → 1.1.1

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE.md +7 -0
  6. data/README.md +3 -3
  7. data/Rakefile +10 -0
  8. data/bin/html_codelist_to_yml.rb +14 -15
  9. data/bin/onix_bench.rb +1 -0
  10. data/bin/onix_pp.rb +4 -8
  11. data/bin/onix_serialize.rb +27 -0
  12. data/doc-src/handlers.rb +154 -0
  13. data/im_onix.gemspec +32 -0
  14. data/lib/im_onix.rb +0 -1
  15. data/lib/onix/addressee.rb +10 -0
  16. data/lib/onix/code.rb +108 -282
  17. data/lib/onix/collateral_detail.rb +24 -17
  18. data/lib/onix/collection.rb +38 -0
  19. data/lib/onix/collection_sequence.rb +7 -0
  20. data/lib/onix/contributor.rb +40 -39
  21. data/lib/onix/date.rb +73 -109
  22. data/lib/onix/descriptive_detail.rb +90 -417
  23. data/lib/onix/discount_coded.rb +3 -16
  24. data/lib/onix/entity.rb +28 -62
  25. data/lib/onix/epub_usage_constraint.rb +7 -0
  26. data/lib/onix/epub_usage_limit.rb +6 -0
  27. data/lib/onix/extent.rb +39 -0
  28. data/lib/onix/helper.rb +25 -25
  29. data/lib/onix/identifier.rb +13 -54
  30. data/lib/onix/language.rb +8 -0
  31. data/lib/onix/market.rb +5 -0
  32. data/lib/onix/market_publishing_detail.rb +20 -0
  33. data/lib/onix/onix21.rb +76 -139
  34. data/lib/onix/onix_message.rb +87 -100
  35. data/lib/onix/price.rb +19 -39
  36. data/lib/onix/product.rb +141 -637
  37. data/lib/onix/product_form_feature.rb +7 -0
  38. data/lib/onix/product_part.rb +89 -0
  39. data/lib/onix/product_supplies_extractor.rb +275 -0
  40. data/lib/onix/product_supply.rb +17 -58
  41. data/lib/onix/publishing_detail.rb +16 -32
  42. data/lib/onix/related_material.rb +4 -3
  43. data/lib/onix/related_product.rb +9 -29
  44. data/lib/onix/related_work.rb +3 -17
  45. data/lib/onix/sales_outlet.rb +2 -10
  46. data/lib/onix/sales_restriction.rb +8 -21
  47. data/lib/onix/sales_rights.rb +1 -5
  48. data/lib/onix/sender.rb +12 -0
  49. data/lib/onix/serializer.rb +156 -0
  50. data/lib/onix/subject.rb +9 -30
  51. data/lib/onix/subset.rb +88 -78
  52. data/lib/onix/supply_detail.rb +42 -0
  53. data/lib/onix/supporting_resource.rb +29 -86
  54. data/lib/onix/tax.rb +9 -18
  55. data/lib/onix/territory.rb +23 -17
  56. data/lib/onix/title_detail.rb +22 -0
  57. data/lib/onix/title_element.rb +32 -0
  58. data/lib/onix/website.rb +3 -16
  59. metadata +53 -34
@@ -1,23 +1,14 @@
1
1
  module ONIX
2
-
3
2
  class Tax < SubsetDSL
4
3
  element "TaxType", :subset
5
- element "TaxRateCode", :subset
6
- element "TaxRatePercent", :float
7
- element "TaxableAmount", :float, {:parse_lambda=>lambda{|v| (v*100).round}}
8
- element "TaxAmount", :float, {:parse_lambda=>lambda{|v| (v*100).round}}
9
-
10
- # shortcuts
11
- def rate_code
12
- @tax_rate_code
13
- end
14
-
15
- def amount
16
- @tax_amount
17
- end
18
-
19
- def rate_percent
20
- @tax_rate_percent
21
- end
4
+ element "TaxRateCode", :subset, :shortcut => :rate_code
5
+ element "TaxRatePercent", :float, :shortcut => :rate_percent
6
+ element "TaxableAmount", :float, {
7
+ :parse_lambda => lambda { |v| (v * 100).round }
8
+ }
9
+ element "TaxAmount", :float, {
10
+ :shortcut => :amount,
11
+ :parse_lambda => lambda { |v| (v * 100).round }
12
+ }
22
13
  end
23
14
  end
@@ -6,51 +6,57 @@ module ONIX
6
6
  element "CountriesExcluded", :text
7
7
  element "RegionsExcluded", :text
8
8
 
9
+ # @!group High level
10
+
9
11
  # all countries array
12
+ # @return [Array<String>]
10
13
  def countries
11
- countries=[]
14
+ countries = []
12
15
  if @countries_included
13
- countries+=@countries_included.split(" ")
16
+ countries += @countries_included.split(" ")
14
17
  end
15
18
  if @regions_included
16
- countries+=@regions_included.split(" ").map{|region| self.class.region_to_countries(region)}.flatten.uniq
19
+ countries += @regions_included.split(" ").map { |region| self.class.region_to_countries(region) }.flatten.uniq
17
20
  end
18
21
  if @countries_excluded
19
- countries-=@countries_excluded.split(" ")
22
+ countries -= @countries_excluded.split(" ")
20
23
  end
21
24
  if @regions_excluded
22
- countries-=@regions_excluded.split(" ").map{|region| self.class.region_to_countries(region)}.flatten.uniq
25
+ countries -= @regions_excluded.split(" ").map { |region| self.class.region_to_countries(region) }.flatten.uniq
23
26
  end
24
27
  countries.uniq.sort
25
28
  end
26
29
 
27
30
  # has worldwide rights ?
31
+ # @return [Boolean]
28
32
  def worldwide?
29
33
  self.class.worldwide?(self.countries)
30
34
  end
31
35
 
32
- def countries=v
33
- if (v.uniq & CountryCode.list).length==CountryCode.list.length
34
- @regions_included="WORLD"
36
+ def countries= v
37
+ if (v.uniq & CountryCode.list).length == CountryCode.list.length
38
+ @regions_included = "WORLD"
35
39
  else
36
- @countries_included=v.uniq.join(" ")
40
+ @countries_included = v.uniq.join(" ")
37
41
  end
38
42
  end
39
43
 
44
+ # !@endgroup
45
+
40
46
  def self.region_to_countries(region)
41
47
  case region
42
- when "WORLD"
43
- CountryCode.list
44
- when "ECZ"
45
- ["AT","BE","CY","EE","FI","FR","DE","ES","GR","IE","IT",
46
- "LU","MT","NL","PT","SI","SK","AD","MC","SM","VA","ME"]
47
- else
48
- []
48
+ when "WORLD"
49
+ CountryCode.list
50
+ when "ECZ"
51
+ ["AT", "BE", "CY", "EE", "FI", "FR", "DE", "ES", "GR", "IE", "IT",
52
+ "LU", "MT", "NL", "PT", "SI", "SK", "AD", "MC", "SM", "VA", "ME"]
53
+ else
54
+ []
49
55
  end
50
56
  end
51
57
 
52
58
  def self.worldwide?(countries)
53
- (countries & CountryCode.list).length==CountryCode.list.length
59
+ (countries & CountryCode.list).length == CountryCode.list.length
54
60
  end
55
61
  end
56
62
  end
@@ -0,0 +1,22 @@
1
+ require 'onix/title_element'
2
+
3
+ module ONIX
4
+ class TitleDetail < SubsetDSL
5
+ element "TitleType", :subset, :shortcut => :type
6
+ elements "TitleElement", :subset
7
+ element "TitleStatement", :text
8
+
9
+ scope :distinctive_title, lambda { human_code_match(:title_type, /DistinctiveTitle/) }
10
+
11
+ # :category: High level
12
+ # flatten title string
13
+ def title
14
+ return title_statement if title_statement
15
+
16
+ title_element = @title_elements.product_level #select { |te| te.level.human=~/Product/ }
17
+ if title_element.size > 0
18
+ title_element.first.title
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ module ONIX
2
+ class TitleElement < SubsetDSL
3
+ element "TitleElementLevel", :subset, :shortcut => :level
4
+ element "TitleText", :text
5
+ element "TitlePrefix", :text
6
+ element "TitleWithoutPrefix", :text
7
+ element "Subtitle", :text
8
+ element "PartNumber", :integer
9
+ element "SequenceNumber", :integer
10
+
11
+ scope :product_level, lambda { human_code_match(:title_element_level, /Product/) }
12
+ scope :collection_level, lambda { human_code_match(:title_element_level, /collection/i) }
13
+
14
+ # @!group High level
15
+ # flatten title string
16
+ def title
17
+ if @title_text
18
+ @title_text
19
+ else
20
+ if @title_without_prefix
21
+ if @title_prefix
22
+ "#{@title_prefix} #{@title_without_prefix}"
23
+ else
24
+ @title_without_prefix
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ # @!endgroup
31
+ end
32
+ end
@@ -1,21 +1,8 @@
1
1
  require 'onix/code'
2
2
  module ONIX
3
3
  class Website < SubsetDSL
4
- element "WebsiteRole", :subset
5
- element "WebsiteLink", :text
6
- element "WebsiteDescription", :text
7
-
8
- # shortcuts
9
- def role
10
- @website_role
11
- end
12
-
13
- def link
14
- @website_link
15
- end
16
-
17
- def description
18
- @website_description
19
- end
4
+ element "WebsiteRole", :subset, :shortcut => :role
5
+ element "WebsiteLink", :text, :shortcut => :link
6
+ element "WebsiteDescription", :text, :shortcut => :description
20
7
  end
21
8
  end
metadata CHANGED
@@ -1,23 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: im_onix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
- - julbouln
7
+ - Julien Boulnois
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-08 00:00:00.000000000 Z
11
+ date: 2020-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nokogiri
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
- type: :runtime
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: shoulda
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,21 +39,21 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rdoc
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.12'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '3.12'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,52 +67,52 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: jeweler
70
+ name: shoulda
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 1.8.4
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 1.8.4
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: simplecov
84
+ name: nokogiri
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
- type: :development
90
+ type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: immatériel.fr onix parser
98
- email: jboulnois@immateriel.fr
99
- executables:
100
- - html_codelist_to_yml.rb
101
- - onix3_to_onix2.rb
102
- - onix3_to_onix3.rb
103
- - onix_bench.rb
104
- - onix_pp.rb
105
- - onix_split.rb
97
+ description: ONIX 3.0 & 2.1 parser for Ruby
98
+ email:
99
+ - jboulnois@immateriel.fr
100
+ executables: []
106
101
  extensions: []
107
- extra_rdoc_files:
108
- - README.md
102
+ extra_rdoc_files: []
109
103
  files:
104
+ - ".gitignore"
105
+ - ".yardopts"
106
+ - Gemfile
107
+ - LICENSE.md
110
108
  - README.md
109
+ - Rakefile
111
110
  - bin/html_codelist_to_yml.rb
112
111
  - bin/onix3_to_onix2.rb
113
112
  - bin/onix3_to_onix3.rb
114
113
  - bin/onix_bench.rb
115
114
  - bin/onix_pp.rb
115
+ - bin/onix_serialize.rb
116
116
  - bin/onix_split.rb
117
117
  - data/codelists/codelist-1.yml
118
118
  - data/codelists/codelist-10.yml
@@ -422,21 +422,35 @@ files:
422
422
  - data/onix21/codelists/codelist-99.yml
423
423
  - data/onix21/shortnames.yml
424
424
  - data/shortnames.yml
425
+ - doc-src/handlers.rb
426
+ - im_onix.gemspec
425
427
  - lib/im_onix.rb
428
+ - lib/onix/addressee.rb
426
429
  - lib/onix/code.rb
427
430
  - lib/onix/collateral_detail.rb
431
+ - lib/onix/collection.rb
432
+ - lib/onix/collection_sequence.rb
428
433
  - lib/onix/contributor.rb
429
434
  - lib/onix/date.rb
430
435
  - lib/onix/descriptive_detail.rb
431
436
  - lib/onix/discount_coded.rb
432
437
  - lib/onix/entity.rb
438
+ - lib/onix/epub_usage_constraint.rb
439
+ - lib/onix/epub_usage_limit.rb
433
440
  - lib/onix/error.rb
441
+ - lib/onix/extent.rb
434
442
  - lib/onix/helper.rb
435
443
  - lib/onix/identifier.rb
444
+ - lib/onix/language.rb
445
+ - lib/onix/market.rb
446
+ - lib/onix/market_publishing_detail.rb
436
447
  - lib/onix/onix21.rb
437
448
  - lib/onix/onix_message.rb
438
449
  - lib/onix/price.rb
439
450
  - lib/onix/product.rb
451
+ - lib/onix/product_form_feature.rb
452
+ - lib/onix/product_part.rb
453
+ - lib/onix/product_supplies_extractor.rb
440
454
  - lib/onix/product_supply.rb
441
455
  - lib/onix/publishing_detail.rb
442
456
  - lib/onix/related_material.rb
@@ -445,11 +459,16 @@ files:
445
459
  - lib/onix/sales_outlet.rb
446
460
  - lib/onix/sales_restriction.rb
447
461
  - lib/onix/sales_rights.rb
462
+ - lib/onix/sender.rb
463
+ - lib/onix/serializer.rb
448
464
  - lib/onix/subject.rb
449
465
  - lib/onix/subset.rb
466
+ - lib/onix/supply_detail.rb
450
467
  - lib/onix/supporting_resource.rb
451
468
  - lib/onix/tax.rb
452
469
  - lib/onix/territory.rb
470
+ - lib/onix/title_detail.rb
471
+ - lib/onix/title_element.rb
453
472
  - lib/onix/website.rb
454
473
  homepage: http://github.com/immateriel/im_onix
455
474
  licenses:
@@ -463,15 +482,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
463
482
  requirements:
464
483
  - - ">="
465
484
  - !ruby/object:Gem::Version
466
- version: '0'
485
+ version: '2.1'
467
486
  required_rubygems_version: !ruby/object:Gem::Requirement
468
487
  requirements:
469
488
  - - ">="
470
489
  - !ruby/object:Gem::Version
471
490
  version: '0'
472
491
  requirements: []
473
- rubygems_version: 3.0.4
492
+ rubygems_version: 3.0.8
474
493
  signing_key:
475
494
  specification_version: 4
476
- summary: immatériel.fr onix parser
495
+ summary: ONIX 3.0 & 2.1 parser for Ruby
477
496
  test_files: []