Class: FuzzyHash

Inherits:
Object
  • Object
show all
Defined in:
lib/fuzzy_hash.rb

Instance Method Summary collapse

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

#clearObject



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

#eachObject



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

Returns:

  • (Boolean)


30
31
32
# File 'lib/fuzzy_hash.rb', line 30

def empty?
  @hash.empty? && @regexes.empty?
end

#keysObject



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

#sizeObject Also known as: count



18
19
20
# File 'lib/fuzzy_hash.rb', line 18

def size
  @hash.size + @regexes.size
end

#valuesObject



38
39
40
# File 'lib/fuzzy_hash.rb', line 38

def values
  @hash.values + @regexes.collect{|r| r.last}
end