did_you_mean 1.1.2 → 1.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e50a42e037d9fa16330e17d7d49e9154d55e82e7
4
- data.tar.gz: 87d0b5afb0e456b509ed2cb5342260c6620514ab
3
+ metadata.gz: 412c345b8350b7d64bcbcf09ea72178bce0fdb02
4
+ data.tar.gz: 4918c2d1c307b4d30d9b00178d5e62e932b0b042
5
5
  SHA512:
6
- metadata.gz: 811f197ffe3fe3a3bc4d783f2080350ef7dbe3038478bbb5aaae88f699c9c7b84d6eed8b2b7228825ae97d622e5d3c722f6b0515e7098363b11e1dc3ab249524
7
- data.tar.gz: eca91e8ddd6b914cd9ac060a3f1fc1dfdc934607c5c5add7f9fbb8cef7dc69bb1576cc28fe5be919a58f25441639175c0d46193b625d1446896e992fe01ad675
6
+ metadata.gz: ab04de77990d06fe206dbc98424e812d8cdf94df29ec472c30624e3738a2ea9eb9e5b67f931c09a70baf05fb84854ceefbf4d00d03ada0e05cdefa47aa73a5ad
7
+ data.tar.gz: db122760d256332aac2626d3b438e0ed25a33833e9390bfc06ce6fee4ca5623027485315521da541eebafd193c25b251962b92c7a95a0799f5d8925de2010a1b
@@ -20,11 +20,11 @@ module DidYouMean
20
20
  end
21
21
 
22
22
  def corrections
23
- spell_checker.corrections
23
+ @corrections ||= spell_checker.corrections
24
24
  end
25
25
 
26
26
  def spell_checker
27
- @spell_checker ||= SPELL_CHECKERS[self.class.to_s].new(self)
27
+ SPELL_CHECKERS[self.class.to_s].new(self)
28
28
  end
29
29
  end
30
30
  end
@@ -6,11 +6,14 @@ module DidYouMean
6
6
  attr_reader :class_name
7
7
 
8
8
  def initialize(exception)
9
- @class_name, @receiver = exception.name, exception.receiver
9
+ @class_name, @receiver, @original_message = exception.name, exception.receiver, exception.original_message
10
10
  end
11
11
 
12
12
  def corrections
13
- @corrections ||= SpellChecker.new(dictionary: class_names).correct(class_name).map(&:full_name)
13
+ @corrections ||= SpellChecker.new(dictionary: class_names)
14
+ .correct(class_name)
15
+ .map(&:full_name)
16
+ .reject {|qualified_name| @original_message.include?(qualified_name) }
14
17
  end
15
18
 
16
19
  def class_names
@@ -1,3 +1,3 @@
1
1
  module DidYouMean
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  end
@@ -20,7 +20,7 @@ class NameErrorExtensionTest < Minitest::Test
20
20
 
21
21
  def test_message
22
22
  message = <<~MESSAGE.chomp
23
- undefined local variable or method `doesnt_exist' for #{method(:to_s).super_method.call}
23
+ undefined local variable or method `doesnt_exist' for #{to_s}
24
24
  Did you mean? does_exist
25
25
  MESSAGE
26
26
 
@@ -36,6 +36,18 @@ class NameErrorExtensionTest < Minitest::Test
36
36
  error.to_s
37
37
  assert_equal 1, error.to_s.scan("Did you mean?").count
38
38
  end
39
+
40
+ def test_correctable_error_objects_are_dumpable
41
+ error = begin
42
+ File.open('./tmp/.keep').sizee
43
+ rescue NoMethodError => e
44
+ e
45
+ end
46
+
47
+ error.to_s
48
+
49
+ assert_equal "undefined method `sizee' for #<File:./tmp/.keep>", Marshal.load(Marshal.dump(error)).original_message
50
+ end
39
51
  end
40
52
 
41
53
  class IgnoreCallersTest < Minitest::Test
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  class JaroWinklerTest < Minitest::Test
@@ -0,0 +1,4 @@
1
+ class Book
2
+ class Cover
3
+ end
4
+ end
@@ -62,4 +62,16 @@ class ClassNameTest < Minitest::Test
62
62
  error = assert_raises(NameError) { ::Book::Page.new.tableof_contents }
63
63
  assert_correction "Book::TableOfContents", error.corrections
64
64
  end
65
+
66
+ def test_does_not_suggest_user_input
67
+ error = assert_raises(NameError) { ::Book::Cover }
68
+
69
+ # This is a weird require, but in a multi-threaded condition, a constant may
70
+ # be loaded between when a NameError occurred and when the spell checker
71
+ # attemps to find a possible suggestion. The manual require here simulates
72
+ # a race condition a single test.
73
+ require_relative '../fixtures/book'
74
+
75
+ assert_empty error.corrections
76
+ end
65
77
  end
@@ -8,7 +8,7 @@ class VerboseFormatterTest < Minitest::Test
8
8
 
9
9
  def test_message
10
10
  assert_equal <<~MESSAGE.chomp, @error.message
11
- undefined local variable or method `doesnt_exist' for #{method(:to_s).super_method.call}
11
+ undefined local variable or method `doesnt_exist' for #{to_s}
12
12
 
13
13
  Did you mean? does_exist
14
14
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: did_you_mean
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuki Nishijima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-25 00:00:00.000000000 Z
11
+ date: 2019-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,6 +100,7 @@ files:
100
100
  - test/experimental/initializer_name_correction_test.rb
101
101
  - test/experimental/key_error_test.rb
102
102
  - test/experimental/method_name_checker_test.rb
103
+ - test/fixtures/book.rb
103
104
  - test/spell_checker_test.rb
104
105
  - test/spell_checking/class_name_test.rb
105
106
  - test/spell_checking/method_name_test.rb
@@ -107,6 +108,7 @@ files:
107
108
  - test/spell_checking/variable_name_test.rb
108
109
  - test/test_helper.rb
109
110
  - test/verbose_formatter_test.rb
111
+ - tmp/.keep
110
112
  homepage: https://github.com/yuki24/did_you_mean
111
113
  licenses:
112
114
  - MIT
@@ -137,6 +139,7 @@ test_files:
137
139
  - test/experimental/initializer_name_correction_test.rb
138
140
  - test/experimental/key_error_test.rb
139
141
  - test/experimental/method_name_checker_test.rb
142
+ - test/fixtures/book.rb
140
143
  - test/spell_checker_test.rb
141
144
  - test/spell_checking/class_name_test.rb
142
145
  - test/spell_checking/method_name_test.rb