class UPC

Public Class Methods

complete(eleven) click to toggle source

Purely for generating new UPC numbers

   # File lib/upc.rb
27 def self.complete(eleven)
28   eleven = eleven.to_s
29   return nil unless eleven.length == 11 && eleven.match(/\d{11}/)
30 
31   arr = (0..10).to_a.collect do |i|
32     if (i+1).odd?
33       eleven[i,1].to_i * 3
34     else
35       eleven[i,1].to_i
36     end
37   end
38   sum = arr.inject { |sum, n| sum + n }
39   remainder = sum % 10
40   (remainder == 0) ? check = 0 : check = 10 - remainder
41 
42   eleven + check.to_s
43 end
new(str) click to toggle source
   # File lib/upc.rb
13 def initialize(str)
14   @number = str.to_s
15 end
valid?(upc) click to toggle source
   # File lib/upc.rb
21 def self.valid?(upc)
22   upc = upc.to_s
23   upc.length == 12 && upc == UPC.complete(upc[0, 11])
24 end

Public Instance Methods

to_ean() click to toggle source
   # File lib/upc.rb
45 def to_ean
46   return nil unless valid?
47   "0#{@number}"
48 end
valid?() click to toggle source
   # File lib/upc.rb
17 def valid?
18   UPC.valid? @number
19 end