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
- .complete(name, str, key = nil) ⇒ Object
- .index!(name, data, modes = nil, key: nil) ⇒ Object
- .load ⇒ Object
- .memsize_of_index(name) ⇒ Object
- .ready? ⇒ Boolean
- .search(name, str, case_insensitive: true) ⇒ Object
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 |
.load ⇒ Object
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
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 |