Module: ZipCode::FR

Defined in:
lib/zipcode-fr.rb

Overview

TODO: factor index system out TODO: factor country-independent code out rubocop:disable Metrics/ModuleLength

Class Method Summary collapse

Class Method Details

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



164
165
166
167
# File 'lib/zipcode-fr.rb', line 164

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

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



63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/zipcode-fr.rb', line 63

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

  modes = [modes] unless modes.is_a?(Enumerable)
  modes.each do |mode|
    data.each(&appender(index, key, mode))
  end

  index.each { |_, v| v.uniq! }
  index.freeze

  @indexes[name] = index
end

.loadObject



12
13
14
15
16
17
# File 'lib/zipcode-fr.rb', line 12

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

.memsize_of_index(name) ⇒ Object



142
143
144
145
146
# File 'lib/zipcode-fr.rb', line 142

def memsize_of_index(name)
  require 'objspace'
  ObjectSpace.memsize_of(@indexes[name]) +
    @indexes[name].reduce(0) { |a, (_, v)| a + ObjectSpace.memsize_of(v) }
end

.ready?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/zipcode-fr.rb', line 19

def ready?
  @loaded
end

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



159
160
161
162
# File 'lib/zipcode-fr.rb', line 159

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