Sha256: bc85f4ef0c8ff424464c6d59fc38b173680f03afb0c6d1809e1d0008df262679

Contents?: true

Size: 1.29 KB

Versions: 4

Compression:

Stored size: 1.29 KB

Contents

##
# EAN-8 Barcode 是8位条形码。
# https://en.wikipedia.org/wiki/EAN-8

class Unidom::ArticleNumber::Ean8Barcode < Unidom::ArticleNumber::ApplicationRecord

  RESTRICTED_DISTRIBUTION_GS1_PREFIXES = (('020'..'029').to_a + ('040'..'049').to_a + ('200'..'299').to_a).freeze

  self.table_name = 'unidom_ean_8_barcodes'

  include Unidom::Common::Concerns::ModelExtension
  include Unidom::ArticleNumber::Concerns::AsBarcode

  validates :code,           uniqueness: true, length: { minimum: 8 }, numericality: { only_integer: true }
  validates :gs1_prefix,     presence:   true, length: { is:      3 }, numericality: { only_integer: true }
  validates :item_reference, presence:   true, length: { is:      4 }, numericality: { only_integer: true }
  validates :check_digit,    presence:   true, length: { is:      1 }, numericality: { only_integer: true }

  def code=(code)
    code = code.to_s
    write_attribute :code, code
    if code.present?
      write_attribute :gs1_prefix,     code[0..2]
      write_attribute :item_reference, code[3..6]
      write_attribute :check_digit,    code[7]
    end
  end

  def restricted_distribution?
    self.class::RESTRICTED_DISTRIBUTION_GS1_PREFIXES.include? gs1_prefix
  end

end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::Ean8Barcode'

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
unidom-article_number-3.0 app/models/unidom/article_number/ean8_barcode.rb
unidom-article_number-2.3.7 app/models/unidom/article_number/ean8_barcode.rb
unidom-article_number-2.3.6 app/models/unidom/article_number/ean8_barcode.rb
unidom-article_number-2.3.5 app/models/unidom/article_number/ean8_barcode.rb