isbn10 1.0.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.
@@ -0,0 +1,2 @@
1
+ v1.0 (18th January 2010)
2
+ - Initial Release
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007 Peter Yandell
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,36 @@
1
+ A small class for generating and validating 10's, the 10 digit codes that are found
2
+ on many book-ish products sold before 2005.
3
+
4
+ Yes there are man other ISBN gems out there. I wanted one that has a similar API to
5
+ my other identifier related gems (ean13, abn, san, upc, etc) to reduce the
6
+ number of APIs I have to remember.
7
+
8
+ = Installation
9
+
10
+ gem install isbn10
11
+
12
+ = Usage
13
+
14
+ ISBN10.new("0140449043").valid?
15
+ => true
16
+
17
+ ISBN10.valid?("0140449043")
18
+ => true
19
+
20
+ ISBN10.valid?("0140449042")
21
+ => false
22
+
23
+ ISBN10.complete("014044904")
24
+ => "0140449043"
25
+
26
+ ISBN10.new("0140449043").to_ean
27
+ => "9780140449044"
28
+
29
+ = Further Reader
30
+
31
+ - http://en.wikipedia.org/wiki/International_Standard_Book_Number
32
+
33
+ = Contributing
34
+
35
+ Source code is publicly available @ http://github.com/yob/isbn10/tree/master.
36
+ Patches welcome, preferably via a git repo I can pull from.
@@ -0,0 +1,56 @@
1
+ # coding: utf-8
2
+
3
+ require 'ean13'
4
+
5
+ class ISBN10
6
+
7
+ class Version #:nodoc:
8
+ Major = 1
9
+ Minor = 0
10
+ Tiny = 0
11
+
12
+ String = [Major, Minor, Tiny].join('.')
13
+ end
14
+
15
+ def initialize(str)
16
+ @number = str.to_s.gsub("-","")
17
+ end
18
+
19
+ def valid?
20
+ ISBN10.valid? @number
21
+ end
22
+
23
+ def self.valid?(isbn)
24
+ isbn = isbn.to_s.gsub("-","")
25
+ isbn.length == 10 && isbn == ISBN10.complete(isbn[0,9])
26
+ end
27
+
28
+ # Purely for generating new ean numbers
29
+ def self.complete(nine)
30
+ nine = nine.to_s
31
+ return nil unless nine.length == 9 && nine.match(/\d{9}/)
32
+
33
+ check = nine[0,1].to_i
34
+ check = check + nine[1,1].to_i * 2
35
+ check = check + nine[2,1].to_i * 3
36
+ check = check + nine[3,1].to_i * 4
37
+ check = check + nine[4,1].to_i * 5
38
+ check = check + nine[5,1].to_i * 6
39
+ check = check + nine[6,1].to_i * 7
40
+ check = check + nine[7,1].to_i * 8
41
+ check = check + nine[8,1].to_i * 9
42
+ check = check % 11
43
+
44
+ if check == 10
45
+ "#{nine}X"
46
+ else
47
+ "#{nine}#{check}"
48
+ end
49
+ end
50
+
51
+ def to_ean
52
+ return nil unless self.valid?
53
+ EAN13.complete("978#{@number[0,9]}")
54
+ end
55
+
56
+ end
@@ -0,0 +1,37 @@
1
+ $LOAD_PATH << File.dirname(__FILE__) + "/../lib"
2
+
3
+ require 'spec'
4
+ require 'isbn10'
5
+
6
+ describe ISBN10 do
7
+ it "should identify a valid ISBN10" do
8
+ ISBN10.new("0140449043").valid?.should be_true
9
+ ISBN10.new("0-140-44904-3").valid?.should be_true
10
+ end
11
+
12
+ it "should identify a valid ISBN10" do
13
+ ISBN10.valid?("0140449043").should be_true
14
+ ISBN10.valid?("0-140-44904-3").should be_true
15
+ end
16
+
17
+ it "should identify an invalid ISBN10" do
18
+ ISBN10.valid?(nil).should be_false
19
+ ISBN10.valid?("0-1404-4904-2").should be_false
20
+ ISBN10.valid?("0140449042").should be_false
21
+ ISBN10.valid?("978184354916").should be_false
22
+ ISBN10.valid?(Array).should be_false
23
+ ISBN10.valid?(Array.new).should be_false
24
+ end
25
+
26
+ it "should calculate a ISBN10 check digit correctly" do
27
+ ISBN10.complete("014044904").should eql("0140449043")
28
+ end
29
+
30
+ it "should convert to an EAN correctly" do
31
+ ISBN10.new("0140449042").to_ean.should be_nil
32
+ isbn = ISBN10.new("0140449043")
33
+ isbn.valid?.should be_true
34
+ isbn.to_ean.should eql("9780140449044")
35
+ end
36
+
37
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isbn10
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - James Healy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-18 00:00:00 +11:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ean13
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description: a (very) small library for working with ISBN10 codes
26
+ email: jimmy@deefa.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - lib/isbn10.rb
35
+ - MIT-LICENSE
36
+ - README.rdoc
37
+ - CHANGELOG
38
+ has_rdoc: true
39
+ homepage: http://github.com/yob/isbn10/tree/master
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options:
44
+ - --title
45
+ - ISBN10
46
+ - --line-numbers
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.3.5
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: a (very) small library for working with ISBN10 codes
68
+ test_files:
69
+ - spec/isbn10_spec.rb