bookworm 0.1.1 → 0.1.2

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.
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "bookworm"
6
- s.version = "0.1.1"
6
+ s.version = "0.1.2"
7
7
  s.authors = ["Tyler Johnston"]
8
8
  s.email = ["tylerjohnst@gmail.com"]
9
9
  s.homepage = "http://github.com/tylerjohnst/bookworm"
@@ -45,8 +45,7 @@ class Bookworm
45
45
  end
46
46
 
47
47
  def to_thirteen(identifier)
48
- identifier = strip_last(identifier)
49
- identifier + thirteen_check_digit(identifier)
48
+ thirteen_strip(identifier) + thirteen_check_digit(identifier)
50
49
  end
51
50
 
52
51
  def scrub(string)
@@ -54,21 +53,29 @@ class Bookworm
54
53
  result ? result[1] : nil
55
54
  end
56
55
 
57
- def thirteen_check_digit(identifier)
58
- sum = 0
56
+ def thirteen_check_digit(identifier=isbn)
57
+ identifier, sum = identifier.rjust(13,"978")[/(.+)\w/,1], 0
58
+
59
59
  12.times do |index|
60
60
  digit = identifier[index].to_i
61
61
  sum += index.even? ? digit : digit * 3
62
62
  end
63
+
63
64
  checksum = (10 - sum % 10)
64
65
  checksum == 10 ? '0' : checksum.to_s
65
66
  end
66
67
 
67
- def ten_check_digit(identifier)
68
+ def thirteen_strip(identifier)
69
+ identifier.rjust(13,"978")[0..-2]
70
+ end
71
+
72
+ def ten_check_digit(identifier=isbn)
68
73
  sum = 0
74
+
69
75
  9.times do |index|
70
76
  sum += (10 - index) * identifier[index].to_i
71
77
  end
78
+
72
79
  checksum = 11 - sum % 11
73
80
 
74
81
  case checksum
@@ -79,10 +86,10 @@ class Bookworm
79
86
  end
80
87
 
81
88
  def is_valid?
82
- !!(isbn && isbn[-1] == original[-1])
83
- end
84
-
85
- def strip_last(string)
86
- string.rjust(13,"978")[/(.+)\w/,1]
89
+ case original
90
+ when /^\d{13}/ then original[12] == thirteen_check_digit(original)
91
+ when /^\d{10}/ then original[9] == ten_check_digit(original)
92
+ else false
93
+ end
87
94
  end
88
95
  end
@@ -10,21 +10,21 @@ class BookwormTest < Test::Unit::TestCase
10
10
  @bookworm.scrub('9780976805427999990')
11
11
  end
12
12
 
13
- def test_should_create_from_used_and_store_as_new
14
- assert_equal '9780976805427', Bookworm.new("2900976805426").isbn
15
- end
16
-
17
13
  def test_should_calculate_thirteen_check_digit
18
- assert_equal "6", @bookworm.thirteen_check_digit('290097680542')
14
+ assert_equal "6", @bookworm.thirteen_check_digit('2900976805426')
19
15
  end
20
16
 
21
17
  def test_should_calculate_ten_check_digit
22
- assert_equal "1", @bookworm.ten_check_digit("097680542")
18
+ assert_equal "1", @bookworm.ten_check_digit("0976805421")
23
19
  end
24
20
 
25
- def test_should_convert_from_ten_to_thirteen
21
+ def test_should_create_from_used
22
+ assert_equal '9780976805427', Bookworm.new("2900976805426").isbn
23
+ end
24
+
25
+ def test_should_convert_from_ten
26
26
  assert_equal '9780976805427', Bookworm.new("0976805421").as_new
27
- assert_equal '', Bookworm.new("0073324922").as_new
27
+ assert_equal '9780073324920', Bookworm.new("0073324922").as_new
28
28
  end
29
29
 
30
30
  def test_should_convert_to_new
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bookworm
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.1
5
+ version: 0.1.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tyler Johnston