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