isbn10 1.1.0 → 1.2.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.
- data/CHANGELOG +3 -0
- data/lib/isbn10.rb +69 -1
- data/spec/isbn10_spec.rb +14 -1
- metadata +12 -4
data/CHANGELOG
CHANGED
data/lib/isbn10.rb
CHANGED
@@ -6,7 +6,7 @@ class ISBN10
|
|
6
6
|
|
7
7
|
class Version #:nodoc:
|
8
8
|
Major = 1
|
9
|
-
Minor =
|
9
|
+
Minor = 2
|
10
10
|
Tiny = 0
|
11
11
|
|
12
12
|
String = [Major, Minor, Tiny].join('.')
|
@@ -48,9 +48,77 @@ class ISBN10
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
def grouped
|
52
|
+
return nil unless self.valid?
|
53
|
+
|
54
|
+
if @number[0,1] == "0"
|
55
|
+
grouped_zero
|
56
|
+
elsif @number[0,1] == "1"
|
57
|
+
grouped_one
|
58
|
+
else
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
51
63
|
def to_ean
|
52
64
|
return nil unless self.valid?
|
53
65
|
EAN13.complete("978#{@number[0,9]}")
|
54
66
|
end
|
55
67
|
|
68
|
+
private
|
69
|
+
|
70
|
+
def grouped_zero
|
71
|
+
groups = [0]
|
72
|
+
buffer = @number[1,7].to_i
|
73
|
+
|
74
|
+
if buffer < 2000000
|
75
|
+
groups << @number[1,2]
|
76
|
+
groups << @number[3,6]
|
77
|
+
elsif buffer >= 2000000 && buffer < 7000000
|
78
|
+
groups << @number[1,3]
|
79
|
+
groups << @number[4,5]
|
80
|
+
elsif buffer >= 7000000 && buffer < 8500000
|
81
|
+
groups << @number[1,4]
|
82
|
+
groups << @number[5,4]
|
83
|
+
elsif buffer >= 8500000 && buffer < 9000000
|
84
|
+
groups << @number[1,5]
|
85
|
+
groups << @number[6,3]
|
86
|
+
elsif buffer >= 9000000 && buffer < 9500000
|
87
|
+
groups << @number[1,6]
|
88
|
+
groups << @number[7,2]
|
89
|
+
else
|
90
|
+
groups << @number[1,7]
|
91
|
+
groups << @number[8,1]
|
92
|
+
end
|
93
|
+
groups << @number[9,1]
|
94
|
+
groups.join("-")
|
95
|
+
end
|
96
|
+
|
97
|
+
def grouped_one
|
98
|
+
groups = [1]
|
99
|
+
buffer = @number[1,7].to_i
|
100
|
+
|
101
|
+
if buffer < 1000000
|
102
|
+
groups << @number[1,2]
|
103
|
+
groups << @number[3,6]
|
104
|
+
elsif buffer >= 1000000 && buffer < 4000000
|
105
|
+
groups << @number[1,3]
|
106
|
+
groups << @number[4,5]
|
107
|
+
elsif buffer >= 4000000 && buffer < 5500000
|
108
|
+
groups << @number[1,4]
|
109
|
+
groups << @number[5,4]
|
110
|
+
elsif buffer >= 5500000 && buffer < 8698000
|
111
|
+
groups << @number[1,5]
|
112
|
+
groups << @number[6,3]
|
113
|
+
elsif buffer >= 8698000 && buffer < 9990000
|
114
|
+
groups << @number[1,6]
|
115
|
+
groups << @number[7,2]
|
116
|
+
else
|
117
|
+
groups << @number[1,7]
|
118
|
+
groups << @number[8,1]
|
119
|
+
end
|
120
|
+
groups << @number[9,1]
|
121
|
+
groups.join("-")
|
122
|
+
end
|
123
|
+
|
56
124
|
end
|
data/spec/isbn10_spec.rb
CHANGED
@@ -15,7 +15,7 @@ describe ISBN10 do
|
|
15
15
|
ISBN10.valid?("0140449043").should be_true
|
16
16
|
ISBN10.valid?("0-140-44904-3").should be_true
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
it "should identify an invalid ISBN10" do
|
20
20
|
ISBN10.valid?(nil).should be_false
|
21
21
|
ISBN10.valid?("0-1404-4904-2").should be_false
|
@@ -36,4 +36,17 @@ describe ISBN10 do
|
|
36
36
|
ISBN10.new("043429067x").to_ean.should eql("9780434290673")
|
37
37
|
end
|
38
38
|
|
39
|
+
it "should convert to a grouped ISBN10 correctly" do
|
40
|
+
ISBN10.new("0809141875").grouped.should be_nil
|
41
|
+
ISBN10.new("0140361278").grouped.should eql("0-14-036127-8")
|
42
|
+
ISBN10.new("0321350316").grouped.should eql("0-321-35031-6")
|
43
|
+
ISBN10.new("0809141876").grouped.should eql("0-8091-4187-6")
|
44
|
+
ISBN10.new("0855615346").grouped.should eql("0-85561-534-6")
|
45
|
+
ISBN10.new("094727748X").grouped.should eql("0-947277-48-X")
|
46
|
+
ISBN10.new("0975601873").grouped.should eql("0-9756018-7-3")
|
47
|
+
ISBN10.new("1430219483").grouped.should eql("1-4302-1948-3")
|
48
|
+
ISBN10.new("1855548453").grouped.should eql("1-85554-845-3")
|
49
|
+
ISBN10.new("1921640065").grouped.should eql("1-921640-06-5")
|
50
|
+
end
|
51
|
+
|
39
52
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isbn10
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
|
-
-
|
8
|
+
- 2
|
8
9
|
- 0
|
9
|
-
version: 1.
|
10
|
+
version: 1.2.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- James Healy
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-10-06 00:00:00 +11:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: ean13
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
@@ -42,6 +45,7 @@ files:
|
|
42
45
|
- MIT-LICENSE
|
43
46
|
- README.rdoc
|
44
47
|
- CHANGELOG
|
48
|
+
- spec/isbn10_spec.rb
|
45
49
|
has_rdoc: true
|
46
50
|
homepage: http://github.com/yob/isbn10/tree/master
|
47
51
|
licenses: []
|
@@ -54,23 +58,27 @@ rdoc_options:
|
|
54
58
|
require_paths:
|
55
59
|
- lib
|
56
60
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
57
62
|
requirements:
|
58
63
|
- - ">="
|
59
64
|
- !ruby/object:Gem::Version
|
65
|
+
hash: 3
|
60
66
|
segments:
|
61
67
|
- 0
|
62
68
|
version: "0"
|
63
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
64
71
|
requirements:
|
65
72
|
- - ">="
|
66
73
|
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
67
75
|
segments:
|
68
76
|
- 0
|
69
77
|
version: "0"
|
70
78
|
requirements: []
|
71
79
|
|
72
80
|
rubyforge_project:
|
73
|
-
rubygems_version: 1.3.
|
81
|
+
rubygems_version: 1.3.7
|
74
82
|
signing_key:
|
75
83
|
specification_version: 3
|
76
84
|
summary: a (very) small library for working with ISBN10 codes
|