module Credy::Rules

Public Instance Methods

all() click to toggle source

Change hash format to process rules

# File lib/credy/rules.rb, line 13
def all
  rules = []

  raw.each do |type, details|
    # Add general rules
    Array(details['prefix']).each do |prefix|
      rules.push({
        prefix: prefix.to_s,
        length: details['length'],
        type:   type
      })
    end

    # Process each country
    Array(details['countries']).each do |country, prefixes|
      # Add a rule for each prefix
      Array(prefixes).each do |prefix|
        rules.push({
          prefix: prefix.to_s,
          length: details['length'],
          type:   type,
          country: country,
        })
      end
    end

  end

  # Sort by prefix length
  rules.sort { |x, y|  y[:prefix].length <=> x[:prefix].length }
end
filter(filters = {}) click to toggle source

Returns rules according to given filters

# File lib/credy/rules.rb, line 46
def filter(filters = {})
  all.select do |rule|
    [:country, :type].each do |condition|
      break false if filters[condition] && filters[condition] != rule[condition]
      true
    end
  end
end
raw() click to toggle source

Return all the rules from yml files

# File lib/credy/rules.rb, line 8
def raw
  @rules ||= load_rules("#{Credy.root}/data/*.yml")
end

Private Instance Methods

load_rules(files) click to toggle source
# File lib/credy/rules.rb, line 57
def load_rules(files)
  {}.tap do |rules|
    Dir.glob(files) do |filename|
      rules.merge! YAML::load IO.read(filename)
    end
  end
end