im_onix 1.0.2 → 1.1.1

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