petrarca 0.3.0 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e588fc804e558ead549eeb33f9eeecf157c2d0652927a8ec8057f0057400f932
4
- data.tar.gz: e25faf3cf900c1ced7f34884e347c21b3094db97e3ad49640ed8a721c07dc376
3
+ metadata.gz: cf5f21fb7dd10bb65123ae526db409663c9ef3c2967268fb4f4839996aa97cc9
4
+ data.tar.gz: 9e0abbe048c5b96d02bfa407981738cf3e9fe74704e8713263120725a97b86d3
5
5
  SHA512:
6
- metadata.gz: 4c0add5276c9ab9f1c1babae1d7838771eaf693eda6acf6840fb5c94e78fc85ac70b2e659db2c37e1afa8757f4cba205120f7687385e3406c8b44127dfbd8ce7
7
- data.tar.gz: 0efc1a6cdda198cec9799242a976fc5403d9374ec54237027133d181507e79c933606fcba37d11214d712c7fc79748fd664d54bc385f5a44a0868cbc2fa7d136
6
+ metadata.gz: 1df099128e166619d892ed2700267f3255bb555ef0aaab62ae652d9f6e42258b79b80d9d81b9e8e6b1a8c8b09a4c6b83e6464e20022e231bbbf4b0e19f369f50
7
+ data.tar.gz: d3e276b38b978639f91be5bbd766279ca305e7d4fc822a96ae1559046c476c4efcee9636a8ce0038048f604bb62b05c5e65794f2c67262feb414140f9a227875
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
  /vendor/
10
10
  /Gemfile.lock
11
11
  *.txt
12
+ *.xml
data/README.md CHANGED
@@ -9,7 +9,8 @@ This library Petrarca provides some utility functions to manipulate ISBN numbers
9
9
 
10
10
  All functions support both ISBN-13 and ISBN-10.
11
11
 
12
- Note: Only registrant ranges for Japan are currently supported.
12
+ All ranges of registration groups and registrants are supported.
13
+ Those depends on 'RangeMessage.xml' file, downloaded from [International ISBN Agency](https://www.isbn-international.org/range_file_generation).
13
14
 
14
15
  ## Installation
15
16
 
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
2
  task :default => :spec
3
+
4
+ namespace :range do
5
+ desc "Generate registrant range files"
6
+ task :generate do
7
+ ruby "scripts/generate_range_files.rb --dir data"
8
+ end
9
+ end
@@ -22,7 +22,7 @@ module Petrarca
22
22
  f.each_line do |line|
23
23
  next if line.start_with?("#")
24
24
  g, r = line.chomp.split(":")
25
- ranges[g] = r.split(",")
25
+ ranges[g] = r.split(",") unless r.nil?
26
26
  end
27
27
  end
28
28
  ranges
@@ -1,3 +1,3 @@
1
1
  module Petrarca
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -40,4 +40,5 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency "bundler", "~> 2.0"
41
41
  spec.add_development_dependency "rake", "~> 10.0"
42
42
  spec.add_development_dependency "rspec", ">= 3.0.0"
43
+ spec.add_development_dependency "nokogiri"
43
44
  end
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+
3
+ require "nokogiri"
4
+ require "optparse"
5
+
6
+
7
+ RANGE_MESSAGE_FILE = "RangeMessage.xml"
8
+ REGISTRATION_GROUP_RANGES_FILE = "registration_group_ranges.txt"
9
+ REGISTRANT_RANGES_FILE = "registrant_ranges.txt"
10
+
11
+
12
+ def main
13
+ options = {
14
+ dir: "."
15
+ }
16
+ opts = OptionParser.new
17
+ opts.on("-d", "--dir=DIR", String, "Set directory, output range fiels into."){|v|
18
+ options[:dir] = v
19
+ }
20
+ opts.parse!
21
+
22
+ doc = File.open(RANGE_MESSAGE_FILE, "r"){|f| Nokogiri::XML(f) }
23
+
24
+ metadata = {
25
+ source: doc.xpath("//MessageSource").text,
26
+ date: doc.xpath("//MessageDate").text
27
+ }
28
+
29
+ registration_groups = extract_ranges(doc.xpath("//EAN.UCC"))
30
+ registrants = extract_ranges(doc.xpath("//Group"))
31
+
32
+ output_range_file(
33
+ registration_groups,
34
+ File.join(options[:dir], REGISTRATION_GROUP_RANGES_FILE),
35
+ metadata
36
+ )
37
+ output_range_file(
38
+ registrants,
39
+ File.join(options[:dir], REGISTRANT_RANGES_FILE),
40
+ metadata
41
+ )
42
+ end
43
+
44
+ def extract_ranges(nodes)
45
+ nodes.map do |node|
46
+ prefix = node.xpath("Prefix").text
47
+ agency = node.xpath("Agency").text
48
+ ranges = node.xpath("Rules/Rule").map do |rule|
49
+ length = rule.xpath("Length").text.to_i
50
+ range = if length > 0
51
+ rule.xpath("Range").text.split("-").map{|s| s[0, length] }.join("-")
52
+ else
53
+ nil
54
+ end
55
+ range
56
+ end.compact
57
+ {
58
+ "prefix" => prefix,
59
+ "agency" => agency,
60
+ "ranges" => ranges
61
+ }
62
+ end
63
+ end
64
+
65
+ def output_range_file(ranges, range_file, metadata)
66
+ File.open(range_file, "w") do |f|
67
+ f.puts "# Generated from RangeMessage.xml file, downloaded from https://www.isbn-international.org/range_file_generation."
68
+ f.puts "#"
69
+ f.puts "# " + metadata[:source]
70
+ f.puts "# " + metadata[:date]
71
+ f.puts "#"
72
+ ranges.each do |range|
73
+ f.puts "# " + range["agency"]
74
+ f.puts range["prefix"] + ":" + range["ranges"].join(",")
75
+ end
76
+ end
77
+ $stderr.puts "Generated: #{range_file}"
78
+ end
79
+
80
+
81
+
82
+ main
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: petrarca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takatoh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-04 00:00:00.000000000 Z
11
+ date: 2020-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 3.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Library to manipulate ISBN numbers for Ruby.
56
70
  email:
57
71
  - takatoh.m@gmail.com
@@ -75,6 +89,7 @@ files:
75
89
  - lib/petrarca/isbn13.rb
76
90
  - lib/petrarca/version.rb
77
91
  - petrarca.gemspec
92
+ - scripts/generate_range_files.rb
78
93
  homepage: https://github.com/takatoh/Petrarca
79
94
  licenses:
80
95
  - MIT