Sha256: e041197ea83abb65caed65771abcdcdff655d3a61792351af99f318f16e60da8

Contents?: true

Size: 616 Bytes

Versions: 2

Compression:

Stored size: 616 Bytes

Contents

module Bookland
  # An abstract unique commercial identifier for a product.
  class Identifier
    def self.calculate_checksum(payload)
      raise NotImplementedError
    end

    def self.valid?(raw)
      new(raw).valid?
    end

    def initialize(raw)
      @raw = raw
    end

    def checksum
      digits[-1]
    end

    def payload
      digits[0...-1]
    end

    def to_s
      @raw
    end

    def valid?
      checksum == self.class.calculate_checksum(payload)
    end

    def ==(other)
      to_s == other.to_s
    end

    private

    def digits
      @digits ||= @raw.split ''
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bookland-2.0.0 lib/bookland/identifier.rb
bookland-2.0.0.beta lib/bookland/identifier.rb