Module: TypoSafe

Defined in:
lib/typo_safe.rb,
lib/typo_safe/version.rb

Constant Summary collapse

VERSION =
"0.0.2"
@@maximum_levenshtein_distance_for_match =
4

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(requested_method, *args, &block) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/typo_safe.rb', line 7

def method_missing(requested_method, *args, &block)
  distances = []
  methods.select{ |m|
    a = method(m).arity
    (a >= 0 && a == args.size) || (a < 0 && (0 - a - 1) <= args.size)
  }.each { |meth|
    distance = Text::Levenshtein.distance(requested_method.to_s, meth.to_s)
    distances << {meth: meth, dist: Text::Levenshtein.distance(requested_method.to_s, meth.to_s)} if distance <= @@maximum_levenshtein_distance_for_match
  }

  if distances.size == 0
    super
  else
    closest_match = distances.sort_by{|dist| dist[:dist]}.first
    if block_given?
      send(closest_match[:meth], *args, &block)
    else
      send(closest_match[:meth], *args)
    end
  end
end

Class Method Details

.maximum_levenshtein_distance_for_match=(val) ⇒ Object



29
30
31
# File 'lib/typo_safe.rb', line 29

def self.maximum_levenshtein_distance_for_match=(val)
  @@maximum_levenshtein_distance_for_match = val
end