Sha256: 6f2ab585a1d9c2f84de561636656c3920fae0f8687fee0c7f7470fc83de555f7

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

require "petrarca/version"
require "petrarca/isbn13"
require "petrarca/isbn10"
require "petrarca/helpers"
require "isbnranges"


module Petrarca
  class Error < StandardError; end
  class IncorrectFormatError < StandardError; end

  REGISTRATION_GROUP_RANGES = ISBNRanges::REGISTRATION_GROUP_RANGES
  REGISTRANT_RANGES = ISBNRanges::REGISTRANT_RANGES

  extend self

  def valid?(isbn)
    case dehyphenate(isbn).size
    when 13
      ISBN13.valid?(isbn)
    when 10
      ISBN10.valid?(isbn)
    else
      false
    end
  end

  def correct_format?(isbn)
    case dehyphenate(isbn).size
    when 13
      ISBN13.correct_format?(isbn)
    when 10
      ISBN10.correct_format?(isbn)
    else
      false
    end
  end

  def calc_check_digit(isbn)
    isbn = dehyphenate(isbn)
    case isbn.size
    when 12, 13
      ISBN13.calc_check_digit(isbn)
    when 9, 10
      ISBN10.calc_check_digit(isbn)
    else
      raise IncorrectFormatError
    end
  end

  def dehyphenate(isbn)
    isbn.to_s.delete("-")
  end

  def hyphenate(isbn)
    isbn = isbn.to_s
    case isbn.size
    when 13
      ISBN13.hyphenate(isbn)
    when 10
      ISBN10.hyphenate(isbn)
    end
  end

  def split(isbn)
    isbn = isbn.to_s
    case isbn.size
    when 13
      ISBN13.split(isbn)
    when 10
      ISBN10.split(isbn)
    end
  end

  def to_10(isbn13)
    s = dehyphenate(isbn13)[3, 9]
    ISBN10.hyphenate(s + ISBN10.calc_check_digit(s))
  end

  def to_13(isbn10)
    s = "978" + dehyphenate(isbn10)[0, 9]
    ISBN13.hyphenate(s + ISBN13.calc_check_digit(s))
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
petrarca-1.0.0 lib/petrarca.rb