Class: UpcGen::UpcGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/upc_gen/upc_generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(seed) ⇒ UpcGenerator

Returns a new instance of UpcGenerator.



7
8
9
# File 'lib/upc_gen/upc_generator.rb', line 7

def initialize(seed)
  @seed = seed
end

Instance Method Details

#complete(upc) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/upc_gen/upc_generator.rb', line 49

def complete(upc)
  if [12, 13].include? upc.length
    EAN13.complete upc[0...12]
  else
    :invalid
  end
end

#fill_number_string(number_string, random_position) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/upc_gen/upc_generator.rb', line 24

def fill_number_string(number_string, random_position)
  return number_string if number_string.length >= 12

  case random_position
  when :start
    number_string + n_random_digits(12 - number_string.length)
  else
    n_random_digits(12 - number_string.length) + number_string
  end
end

#find_code_ending_on(num) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/upc_gen/upc_generator.rb', line 15

def find_code_ending_on(num)
  digits = num[0...-1]
  check = num[-1]
  n_random_digits(12 - num.length)
  candidate = EAN13.complete(n_random_digits(12 - digits.length) + digits)
  candidate = EAN13.complete(n_random_digits(12 - digits.length) + digits) while candidate[-1] != check
  candidate
end

#generateObject



57
58
59
60
61
62
63
# File 'lib/upc_gen/upc_generator.rb', line 57

def generate
  if @seed && ![".", "-"].include?(@seed)
    complete generate_for_seed
  else
    complete n_random_digits(12)
  end
end

#generate_for_seedObject



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/upc_gen/upc_generator.rb', line 35

def generate_for_seed
  number_string = @seed
  random_position = :end
  unless /^\d+$/.match?(number_string)
    random_position = :forced_end if /\d-/.match?(number_string)
    random_position = :start if /\d\./.match?(number_string)
    number_string = number_string.match(/^\d+/)[0]
  end

  return find_code_ending_on(number_string) if random_position == :forced_end

  fill_number_string(number_string, random_position)
end

#n_random_digits(num) ⇒ Object



11
12
13
# File 'lib/upc_gen/upc_generator.rb', line 11

def n_random_digits(num)
  (1..num).map { rand(10) }.join
end