lib/petrarca/isbn13.rb in petrarca-0.4.14 vs lib/petrarca/isbn13.rb in petrarca-0.5.0
- old
+ new
@@ -5,32 +5,35 @@
module ISBN13
extend self
def valid?(isbn)
- correct_format?(isbn) && isbn[-1] == calc_check_digit(isbn)
+ isbn = isbn.to_s
+ if correct_format?(isbn) && isbn[-1] == calc_check_digit(isbn)
+ if isbn.include?("-")
+ Helpers.split(isbn) == isbn.split("-")
+ else
+ true
+ end
+ else
+ false
+ end
end
def correct_format?(isbn)
- isbn = isbn.delete("-")
+ isbn = isbn.to_s.delete("-")
!!(/\A97[89]\d{9}\d\z/ =~ isbn)
end
def calc_check_digit(isbn)
- nums = isbn.delete("-").split("")[0, 12].map{|x| x.to_i }
+ nums = isbn.to_s.delete("-").split("")[0, 12].map{|x| x.to_i }
sum = nums.zip([1, 3] * 6).map{|x, y| x * y }.inject(:+)
check_digit = 10 - (sum % 10)
check_digit == 10 ? "0" : check_digit.to_s
end
def hyphenate(isbn)
- ean_prefix = isbn[0, 3]
- body = isbn[3, 9]
- check_digit = isbn[12, 1]
- registration_group, body = Helpers.split_to_parts(body, REGISTRATION_GROUP_RANGES[ean_prefix])
- prefix = "#{ean_prefix}-#{registration_group}"
- registrant, publication = Helpers.split_to_parts(body, REGISTRANT_RANGES[prefix])
- [ean_prefix, registration_group, registrant, publication, check_digit].join("-")
+ Helpers.split(isbn).join("-")
end
end
end