guessmethod 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.1.2 2007-11-12
2
+
3
+ * GuessMethod and GuessConstant now both try the original method_ or const_missing, capturing the error, before trying. On failure, raises the original error.
4
+ * Cleaned up error messages now that guessing is a last resort, not a first.
5
+
1
6
  == 0.1.1 2007-11-08
2
7
 
3
8
  * Changed old_const_missing and old_method_missing to the less likely to blow up unguessed_const_missing and unguessed_method_missing
data/lib/guessmethod.rb CHANGED
@@ -32,18 +32,22 @@ module GuessMethod
32
32
 
33
33
  def guess_method_missing(meth, *args, &block)
34
34
  if GuessMethodOptions[:active]
35
- possible_methods = GuessMethodGuesser.find_closest(self.methods, meth)
36
- case possible_methods.size
37
- when 1
38
- call_method = possible_methods.first
39
- $stderr.puts GuessMethodOutputter.replacing_method(meth, call_method, self)
40
- self.send(call_method, *args, &block)
41
- when 0
42
- $stderr.puts GuessMethodOutputter.no_method_in_threshold(meth, self)
43
- unguessed_method_missing(meth, *args, &block)
44
- else
45
- $stderr.puts GuessMethodOutputter.ambiguous_method(meth, possible_methods, self)
35
+ begin
46
36
  unguessed_method_missing(meth, *args, &block)
37
+ rescue NoMethodError, NameError => e
38
+ possible_methods = GuessMethodGuesser.find_closest(self.methods, meth)
39
+ case possible_methods.size
40
+ when 1
41
+ call_method = possible_methods.first
42
+ $stderr.puts GuessMethodOutputter.replacing_method(meth, call_method, self)
43
+ self.send(call_method, *args, &block)
44
+ when 0
45
+ $stderr.puts GuessMethodOutputter.no_method_in_threshold(meth, self)
46
+ raise e
47
+ else
48
+ $stderr.puts GuessMethodOutputter.ambiguous_method(meth, possible_methods, self)
49
+ raise e
50
+ end
47
51
  end
48
52
  else
49
53
  unguessed_method_missing(meth, *args, &block)
@@ -74,20 +78,20 @@ module GuessMethod
74
78
  if GuessMethodOptions[:active]
75
79
  begin
76
80
  return unguessed_const_missing(sym)
77
- rescue NameError
78
- end
79
- possible_consts = GuessMethodGuesser.find_closest(self.constants, sym)
80
- case possible_consts.size
81
- when 1
82
- call_const = possible_consts.first
83
- $stderr.puts GuessMethodOutputter.replacing_const(sym, call_const, self)
84
- self.const_get(call_const)
85
- when 0
86
- $stderr.puts GuessMethodOutputter.no_const_in_threshold(sym, self)
87
- unguessed_const_missing(sym)
88
- else
89
- $stderr.puts GuessMethodOutputter.ambigious_const(sym, possible_consts, self)
90
- unguessed_const_missing(sym)
81
+ rescue NameError => e
82
+ possible_consts = GuessMethodGuesser.find_closest(self.constants, sym)
83
+ case possible_consts.size
84
+ when 1
85
+ call_const = possible_consts.first
86
+ $stderr.puts GuessMethodOutputter.replacing_const(sym, call_const, self)
87
+ self.const_get(call_const)
88
+ when 0
89
+ $stderr.puts GuessMethodOutputter.no_const_in_threshold(sym, self)
90
+ raise e
91
+ else
92
+ $stderr.puts GuessMethodOutputter.ambigious_const(sym, possible_consts, self)
93
+ raise e
94
+ end
91
95
  end
92
96
  else
93
97
  unguessed_const_missing(sym)
@@ -101,7 +105,7 @@ module GuessMethod
101
105
  def self.find_closest(haystack, needle)
102
106
  closest_distance = haystack.map {|x| x.to_s.downcase.levenshtein(needle.to_s.downcase,
103
107
  GuessMethodOptions[:insert_weight], GuessMethodOptions[:delete_weight],
104
- GuessMethodOptions[:substitution_weight])}.min
108
+ GuessMethodOptions[:substitution_weight])}.min || 0
105
109
  if closest_distance <= GuessMethodOptions[:threshold]
106
110
  haystack.find_all {|x| x.to_s.downcase.levenshtein(needle.to_s.downcase,
107
111
  GuessMethodOptions[:insert_weight], GuessMethodOptions[:delete_weight],
@@ -150,12 +154,10 @@ module GuessMethod
150
154
  end
151
155
 
152
156
  def self.no_method_in_threshold(meth, obj) #:nodoc:
153
- Formatter.color('no method in threshold:', :red) <<
154
- ' for ' <<
157
+ Formatter.color('no method in threshold: ', :red) <<
155
158
  Formatter.color(meth, :green) <<
156
- ', sending to ' <<
157
- GuessMethodOutputter.object(obj) <<
158
- "'s method_missing"
159
+ ' for ' <<
160
+ GuessMethodOutputter.object(obj)
159
161
  end
160
162
 
161
163
  def self.replacing_method(meth, call_method, obj) #:nodoc:
@@ -175,16 +177,14 @@ module GuessMethod
175
177
  ' possible matches ' <<
176
178
  possibilities.map {|m| Formatter.color(m, :cyan)}.join(', ') <<
177
179
  ' for ' <<
178
- GuessMethodOutputter.object(obj)
180
+ Formatter.color(obj, :green, :bold)
179
181
  end
180
182
 
181
183
  def self.no_const_in_threshold(sym, obj) #:nodoc:
182
- Formatter.color('no constant in threshold:', :red) <<
183
- ' for ' <<
184
+ Formatter.color('no constant in threshold: ', :red) <<
184
185
  Formatter.color(sym, :green) <<
185
- ', sending to ' <<
186
- Formatter.color(obj, :green, :bold) <<
187
- "'s const_missing"
186
+ ' for ' <<
187
+ Formatter.color(obj, :green, :bold)
188
188
  end
189
189
 
190
190
  def self.replacing_const(sym, call_const, obj) #:nodoc:
@@ -2,7 +2,7 @@ module GuessMethod #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/website/index.html CHANGED
@@ -33,7 +33,7 @@
33
33
  <h1>Guess Method</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/guessmethod"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/guessmethod" class="numbers">0.1.1</a>
36
+ <a href="http://rubyforge.org/projects/guessmethod" class="numbers">0.1.2</a>
37
37
  </div>
38
38
  <h1>&#x2192; &#8216;guessmethod&#8217;</h1>
39
39
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: guessmethod
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.1
7
- date: 2007-11-08 00:00:00 -07:00
6
+ version: 0.1.2
7
+ date: 2007-11-12 00:00:00 -07:00
8
8
  summary: an aggressive spell checker for irb
9
9
  require_paths:
10
10
  - lib