class ISBN10
Public Class Methods
complete(nine)
click to toggle source
Purely for generating new ean numbers
# File lib/isbn10.rb 30 def self.complete(nine) 31 nine = nine.to_s 32 return nil unless nine.length == 9 && nine.match(/\d{9}/) 33 34 check = nine[0,1].to_i 35 check = check + nine[1,1].to_i * 2 36 check = check + nine[2,1].to_i * 3 37 check = check + nine[3,1].to_i * 4 38 check = check + nine[4,1].to_i * 5 39 check = check + nine[5,1].to_i * 6 40 check = check + nine[6,1].to_i * 7 41 check = check + nine[7,1].to_i * 8 42 check = check + nine[8,1].to_i * 9 43 check = check % 11 44 45 if check == 10 46 "#{nine}X" 47 else 48 "#{nine}#{check}" 49 end 50 end
new(str)
click to toggle source
# File lib/isbn10.rb 16 def initialize(str) 17 @number = str.to_s.gsub("-","") 18 end
valid?(isbn)
click to toggle source
# File lib/isbn10.rb 24 def self.valid?(isbn) 25 isbn = isbn.to_s.gsub("-","") 26 isbn.length == 10 && isbn.to_s.upcase == ISBN10.complete(isbn[0,9]) 27 end
Public Instance Methods
grouped()
click to toggle source
# File lib/isbn10.rb 52 def grouped 53 return nil unless self.valid? 54 55 if @number[0,1] == "0" 56 grouped_zero 57 elsif @number[0,1] == "1" 58 grouped_one 59 else 60 nil 61 end 62 end
to_ean()
click to toggle source
# File lib/isbn10.rb 64 def to_ean 65 return nil unless self.valid? 66 EAN13.complete("978#{@number[0,9]}") 67 end
valid?()
click to toggle source
# File lib/isbn10.rb 20 def valid? 21 ISBN10.valid? @number 22 end
Private Instance Methods
grouped_one()
click to toggle source
# File lib/isbn10.rb 98 def grouped_one 99 groups = [1] 100 buffer = @number[1,7].to_i 101 102 if buffer < 1000000 103 groups << @number[1,2] 104 groups << @number[3,6] 105 elsif buffer >= 1000000 && buffer < 4000000 106 groups << @number[1,3] 107 groups << @number[4,5] 108 elsif buffer >= 4000000 && buffer < 5500000 109 groups << @number[1,4] 110 groups << @number[5,4] 111 elsif buffer >= 5500000 && buffer < 8698000 112 groups << @number[1,5] 113 groups << @number[6,3] 114 elsif buffer >= 8698000 && buffer < 9990000 115 groups << @number[1,6] 116 groups << @number[7,2] 117 else 118 groups << @number[1,7] 119 groups << @number[8,1] 120 end 121 groups << @number[9,1] 122 groups.join("-") 123 end
grouped_zero()
click to toggle source
# File lib/isbn10.rb 71 def grouped_zero 72 groups = [0] 73 buffer = @number[1,7].to_i 74 75 if buffer < 2000000 76 groups << @number[1,2] 77 groups << @number[3,6] 78 elsif buffer >= 2000000 && buffer < 7000000 79 groups << @number[1,3] 80 groups << @number[4,5] 81 elsif buffer >= 7000000 && buffer < 8500000 82 groups << @number[1,4] 83 groups << @number[5,4] 84 elsif buffer >= 8500000 && buffer < 9000000 85 groups << @number[1,5] 86 groups << @number[6,3] 87 elsif buffer >= 9000000 && buffer < 9500000 88 groups << @number[1,6] 89 groups << @number[7,2] 90 else 91 groups << @number[1,7] 92 groups << @number[8,1] 93 end 94 groups << @number[9,1] 95 groups.join("-") 96 end