Class: FuzzyHash
- Inherits:
-
Object
- Object
- FuzzyHash
- Defined in:
- lib/fuzzy_hash.rb
Instance Method Summary collapse
- #==(o) ⇒ Object
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #clear ⇒ Object
- #delete_value(value) ⇒ Object
- #each ⇒ Object
- #empty? ⇒ Boolean
-
#initialize(init_hash = nil) ⇒ FuzzyHash
constructor
A new instance of FuzzyHash.
- #keys ⇒ Object
- #replace(src, dest) ⇒ Object
- #values ⇒ Object
Constructor Details
#initialize(init_hash = nil) ⇒ FuzzyHash
Returns a new instance of FuzzyHash.
3 4 5 6 7 8 9 |
# File 'lib/fuzzy_hash.rb', line 3 def initialize(init_hash = nil) @regexes = [] @hash_reverse = {} @regexes_reverse = {} @hash = {} init_hash.each{ |key,value| self[key] = value } if init_hash end |
Instance Method Details
#==(o) ⇒ Object
18 19 20 21 |
# File 'lib/fuzzy_hash.rb', line 18 def ==(o) o.instance_variable_get(:@hash) == @hash && o.instance_variable_get(:@regexes) == @regexes end |
#[](key) ⇒ Object
70 71 72 |
# File 'lib/fuzzy_hash.rb', line 70 def [](key) @hash.key?(key) ? @hash[key] : regex_lookup(key) end |
#[]=(key, value) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/fuzzy_hash.rb', line 44 def []=(key, value) case key when Regexp @regexes << [key, value] @regex_test = nil @regexes_reverse[value] = [@regexes.size - 1, key, value] else @hash[key] = value @hash_reverse[value] = key end end |
#clear ⇒ Object
11 12 13 14 15 16 |
# File 'lib/fuzzy_hash.rb', line 11 def clear @hash.clear @regexes.clear @hash_reverse.clear @regexes_reverse.clear end |
#delete_value(value) ⇒ Object
40 41 42 |
# File 'lib/fuzzy_hash.rb', line 40 def delete_value(value) @hash.delete(@hash_reverse[value]) || ((rr = @regexes_reverse[value]) && @regexes.delete_at(rr[0])) end |
#each ⇒ Object
35 36 37 38 |
# File 'lib/fuzzy_hash.rb', line 35 def each @hash.each{|k,v| yield k,v } @regexes.each{|v| yield v.first, v.last } end |
#empty? ⇒ Boolean
23 24 25 |
# File 'lib/fuzzy_hash.rb', line 23 def empty? @hash.empty? && @regexes.empty? end |
#keys ⇒ Object
27 28 29 |
# File 'lib/fuzzy_hash.rb', line 27 def keys @hash.keys + @regexes.collect{|r| r.first} end |
#replace(src, dest) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/fuzzy_hash.rb', line 56 def replace(src, dest) if @hash_reverse.key?(src) key = @hash_reverse[src] @hash[key] = dest @hash_reverse.delete(src) @hash_reverse[dest] = key elsif @regexes_reverse.key?(src) key = @regexes_reverse[src] @regexes[rkey[0]] = [rkey[1], dest] @regexes_reverse.delete(src) @regexes_reverse[dest] = [rkey[0], rkey[1], dest] end end |
#values ⇒ Object
31 32 33 |
# File 'lib/fuzzy_hash.rb', line 31 def values @hash.values + @regexes.collect{|r| r.last} end |