Module: ZipCode::FR

Defined in:
lib/zipcode-fr.rb

Class Method Summary collapse

Class Method Details

.complete(name, str, key = nil) ⇒ Object



98
99
100
101
# File 'lib/zipcode-fr.rb', line 98

def complete(name, str, key = nil)
  key ||= name
  search(name, str).map { |e| e[key] }
end

.index!(name, data, key = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/zipcode-fr.rb', line 60

def index!(name, data, key = nil)
  key ||= name
  index = Hash.new { |h, k| h[k] = [] unless h.frozen? }

  data.each do |pos, record|
    val = record[key]
    val.length.times { |i| index[val[0..i].hash] << pos }
  end

  index.freeze

  @indexes[name] = index
end

.loadObject



9
10
11
12
13
14
# File 'lib/zipcode-fr.rb', line 9

def load
  # TODO: non-optimal, but not overly long either
  index!(:name, reader)
  index!(:zip, reader)
  @loaded = true
end

.ready?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/zipcode-fr.rb', line 16

def ready?
  @loaded
end

.search(name, str, case_insensitive: true) ⇒ Object



93
94
95
96
# File 'lib/zipcode-fr.rb', line 93

def search(name, str, case_insensitive: true)
  str = str.upcase if case_insensitive
  read_at(*index(name)[str.hash])
end