did_you_mean 1.1.0 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 70f21af56b6f4e14b5c5984d3ce5180a779c81c9
4
- data.tar.gz: 1f73d774f056a90eadace8401876b6f35ea54177
3
+ metadata.gz: 412c345b8350b7d64bcbcf09ea72178bce0fdb02
4
+ data.tar.gz: 4918c2d1c307b4d30d9b00178d5e62e932b0b042
5
5
  SHA512:
6
- metadata.gz: 17fbd60b5fd5a951b241b1b0277b1888c3495849825fd699dd1da24a8ac9b4b0a7366505f3584a3a41c125e785b6be556ae0a7f736168e39cb3b6d6b36a3cfa5
7
- data.tar.gz: 6a63b180eb98df8cfd4c59c209e9ff676d07e80b548d3d07c05e5e619cacd2725097d9f3da0037b34b517fcedb6c605229c0c4ab5c4fd68a68f124e03d85e9c1
6
+ metadata.gz: ab04de77990d06fe206dbc98424e812d8cdf94df29ec472c30624e3738a2ea9eb9e5b67f931c09a70baf05fb84854ceefbf4d00d03ada0e05cdefa47aa73a5ad
7
+ data.tar.gz: db122760d256332aac2626d3b438e0ed25a33833e9390bfc06ce6fee4ca5623027485315521da541eebafd193c25b251962b92c7a95a0799f5d8925de2010a1b
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.4.0-dev
1
+ 2.4.1
data/.travis.yml CHANGED
@@ -11,4 +11,5 @@ after_success:
11
11
  - bundle exec rake benchmark:memory
12
12
 
13
13
  rvm:
14
+ - 2.4.0
14
15
  - ruby-head
data/did_you_mean.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.required_ruby_version = '>= 2.4.0dev'
20
+ spec.required_ruby_version = '>= 2.4.0'
21
21
 
22
22
  spec.add_development_dependency "bundler"
23
23
  spec.add_development_dependency "rake"
@@ -10,18 +10,21 @@ module DidYouMean
10
10
  msg = super.dup
11
11
  bt = caller(1, 6)
12
12
 
13
- msg << Formatter.new(corrections).to_s if IGNORED_CALLERS.all? {|ignored| bt.grep(ignored).empty? }
13
+ if IGNORED_CALLERS.all? {|ignored| bt.grep(ignored).empty? } && (!cause.respond_to?(:corrections) || cause.corrections.empty?)
14
+ msg << Formatter.new(corrections).to_s
15
+ end
16
+
14
17
  msg
15
18
  rescue
16
19
  super
17
20
  end
18
21
 
19
22
  def corrections
20
- spell_checker.corrections
23
+ @corrections ||= spell_checker.corrections
21
24
  end
22
25
 
23
26
  def spell_checker
24
- @spell_checker ||= SPELL_CHECKERS[self.class.to_s].new(self)
27
+ SPELL_CHECKERS[self.class.to_s].new(self)
25
28
  end
26
29
  end
27
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.0"
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
@@ -9,6 +9,12 @@ class MethodNameTest < Minitest::Test
9
9
  raiae NoMethodError
10
10
  end
11
11
 
12
+ def raise_no_method_error
13
+ self.firstname
14
+ rescue NoMethodError => e
15
+ raise e, e.message, e.backtrace
16
+ end
17
+
12
18
  protected
13
19
  def the_protected_method; end
14
20
 
@@ -86,4 +92,28 @@ class MethodNameTest < Minitest::Test
86
92
  ensure
87
93
  NilClass.class_eval { undef empty? }
88
94
  end
95
+
96
+ def test_does_not_append_suggestions_twice
97
+ error = assert_raises NoMethodError do
98
+ begin
99
+ @user.firstname
100
+ rescue NoMethodError => e
101
+ raise e, e.message, e.backtrace
102
+ end
103
+ end
104
+
105
+ assert_equal 1, error.to_s.scan(/Did you mean/).count
106
+ end
107
+
108
+ def test_does_not_append_suggestions_three_times
109
+ error = assert_raises NoMethodError do
110
+ begin
111
+ @user.raise_no_method_error
112
+ rescue NoMethodError => e
113
+ raise e, e.message, e.backtrace
114
+ end
115
+ end
116
+
117
+ assert_equal 1, error.to_s.scan(/Did you mean/).count
118
+ end
89
119
  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
 
data/tmp/.keep ADDED
File without changes
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.0
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: 2016-12-19 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
@@ -119,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
121
  requirements:
120
122
  - - ">="
121
123
  - !ruby/object:Gem::Version
122
- version: 2.4.0dev
124
+ version: 2.4.0
123
125
  required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  requirements:
125
127
  - - ">="
@@ -127,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
129
  version: '0'
128
130
  requirements: []
129
131
  rubyforge_project:
130
- rubygems_version: 2.6.8
132
+ rubygems_version: 2.6.11
131
133
  signing_key:
132
134
  specification_version: 4
133
135
  summary: '"Did you mean?" experience in Ruby'
@@ -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