Class: Jan::CodeBody

Inherits:
String
  • Object
show all
Defined in:
lib/jan/code_body.rb

Instance Method Summary collapse

Constructor Details

#initialize(code_body) ⇒ CodeBody

Returns a new instance of CodeBody.

Parameters:

  • code_body (String)


6
7
8
9
# File 'lib/jan/code_body.rb', line 6

def initialize(code_body)
  @code_body = code_body
  super(code_body)
end

Instance Method Details

#calculate_check_digitJan::CheckDigit

Returns:



17
18
19
20
21
22
23
# File 'lib/jan/code_body.rb', line 17

def calculate_check_digit
  # http://www.dsri.jp/jan/check_digit.html
  even_position_digits, odd_position_digits = @code_body.reverse.each_char.partition.with_index(2) {|_chr, idx| idx.even? }
  sum = even_position_digits.map{|d| Integer(d) }.sum * 3 + odd_position_digits.map{|d| Integer(d) }.sum
  digit = (10 - sum % 10).to_s[-1]
  Jan::CheckDigit.new(digit)
end

#generate_codeJan::Code

Returns:



26
27
28
# File 'lib/jan/code_body.rb', line 26

def generate_code
  Jan::Code.new(@code_body + calculate_check_digit)
end

#valid?boolean

Returns:

  • (boolean)


12
13
14
# File 'lib/jan/code_body.rb', line 12

def valid?
  @code_body.match?(/\A(\d{12}|\d{7})\z/)
end