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



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

#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



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

#eachObject



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

Returns:

  • (Boolean)


23
24
25
# File 'lib/fuzzy_hash.rb', line 23

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

#keysObject



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

#valuesObject



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

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