Module: ZipCode::FR
- Defined in:
- lib/zipcode-fr.rb
Class Method Summary collapse
- .complete(name, str, key = nil) ⇒ Object
- .index!(name, data, key = nil) ⇒ Object
- .load ⇒ Object
- .ready? ⇒ Boolean
- .search(name, str, case_insensitive: true) ⇒ Object
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 |
.load ⇒ Object
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
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 |