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
- #match_with_result(key) ⇒ Object
- #replace(src, dest) ⇒ Object
- #size ⇒ Object (also: #count)
- #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
24 25 26 27 28 |
# File 'lib/fuzzy_hash.rb', line 24 def ==(o) o.is_a?(FuzzyHash) o.instance_variable_get(:@hash) == @hash && o.instance_variable_get(:@regexes) == @regexes end |
#[](key) ⇒ Object
78 79 80 |
# File 'lib/fuzzy_hash.rb', line 78 def [](key) @hash.key?(key) ? @hash[key] : (lookup = regex_lookup(key)) && lookup && lookup.first end |
#[]=(key, value) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/fuzzy_hash.rb', line 51 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 value 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
47 48 49 |
# File 'lib/fuzzy_hash.rb', line 47 def delete_value(value) @hash.delete(@hash_reverse[value]) || ((rr = @regexes_reverse[value]) && @regexes.delete_at(rr[0])) end |
#each ⇒ Object
42 43 44 45 |
# File 'lib/fuzzy_hash.rb', line 42 def each @hash.each{|k,v| yield k,v } @regexes.each{|v| yield v.first, v.last } end |
#empty? ⇒ Boolean
30 31 32 |
# File 'lib/fuzzy_hash.rb', line 30 def empty? @hash.empty? && @regexes.empty? end |
#keys ⇒ Object
34 35 36 |
# File 'lib/fuzzy_hash.rb', line 34 def keys @hash.keys + @regexes.collect{|r| r.first} end |
#match_with_result(key) ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/fuzzy_hash.rb', line 82 def match_with_result(key) if @hash.key?(key) [@hash[key], key] else regex_lookup(key) end end |
#replace(src, dest) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/fuzzy_hash.rb', line 64 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 |
#size ⇒ Object Also known as: count
18 19 20 |
# File 'lib/fuzzy_hash.rb', line 18 def size @hash.size + @regexes.size end |
#values ⇒ Object
38 39 40 |
# File 'lib/fuzzy_hash.rb', line 38 def values @hash.values + @regexes.collect{|r| r.last} end |