class CzFaker::Energy

Public Class Methods

ean(lds = true, dist_code = nil) click to toggle source
# File lib/cz_faker/energy.rb, line 5
def ean(lds = true, dist_code = nil)
  code = electricity_by_code(dist_code)[:prefixes].sample
  code += "00" unless lds
  (CzFaker::Data::EAN_LENGTH - code.size - 1).times do
    code += Number.integer(1)
  end
  code += ean_checksum(code).to_s
end
eic(lds = true, dist_code = nil, type = nil) click to toggle source
# File lib/cz_faker/energy.rb, line 14
def eic(lds = true, dist_code = nil, type = nil)
  code = gas_by_code(dist_code)[:prefixes].sample # 5 chars
  code += lds ? Number.integer(2).to_s : "00"     # 2 chars
  code += type.nil? ? CzFaker::Data::GAS_TYPES.sample : type     # 1 char
  code += Number.integer(7)                       # 7 chars
  code + eic_checksum(code).to_s                  # 1 char
end
electricity_distribution_company() click to toggle source
# File lib/cz_faker/energy.rb, line 26
def electricity_distribution_company
  CzFaker::Data::ELECTRICITY_DISTRIBUTORS.sample[:name]
end
gas_distribution_company() click to toggle source
# File lib/cz_faker/energy.rb, line 22
def gas_distribution_company
  CzFaker::Data::GAS_DISTRIBUTORS.sample[:name]
end

Private Class Methods

ean_checksum(code) click to toggle source
# File lib/cz_faker/energy.rb, line 32
def ean_checksum(code)
  sum = 0
  code.split('').each_with_index do |value, index|
    sum += index.even? ? value.to_i * 3 : value.to_i
  end
  (10 - sum % 10) % 10
end
eic_char_to_int(char) click to toggle source
# File lib/cz_faker/energy.rb, line 74
def eic_char_to_int(char)
  if char == '-'
    36
  elsif char.match?(/\A\d+\z/)
    char.to_i
  elsif char.match?(/\A[A-Za-z]\z/)
    char.upcase.ord - 'A'.ord + 10
  else
    -1
  end
end
eic_checksum(code) click to toggle source
# File lib/cz_faker/energy.rb, line 40
def eic_checksum(code)
  sum = 0
  code.split('').each_with_index do |value, index|
    sum += eic_char_to_int(value) * (16 - index)
  end
  eic_int_to_char(((37 - sum % 37) % 37))
end
eic_int_to_char(int) click to toggle source
# File lib/cz_faker/energy.rb, line 64
def eic_int_to_char(int)
  if int < 10 && int >= 0
    int.to_s
  elsif int < 36 && int >= 10
    (int + 'A'.ord - 10).chr
  else
    '-'
  end
end
electricity_by_code(code = nil) click to toggle source
# File lib/cz_faker/energy.rb, line 48
def electricity_by_code(code = nil)
  return CzFaker::Data::ELECTRICITY_DISTRIBUTORS.sample unless code

  CzFaker::Data::ELECTRICITY_DISTRIBUTORS.each do |dist|
    return dist if dist[:code] == code.to_sym
  end
end
gas_by_code(code = nil) click to toggle source
# File lib/cz_faker/energy.rb, line 56
def gas_by_code(code = nil)
  return CzFaker::Data::GAS_DISTRIBUTORS.sample unless code

  CzFaker::Data::GAS_DISTRIBUTORS.each do |dist|
    return dist if dist[:code] == code.to_sym
  end
end