did_you_mean 0.9.6-java
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 +7 -0
- data/.gitignore +27 -0
- data/.travis.yml +35 -0
- data/Appraisals +23 -0
- data/Gemfile +18 -0
- data/LICENSE.txt +22 -0
- data/README.md +110 -0
- data/Rakefile +61 -0
- data/did_you_mean.gemspec +35 -0
- data/ext/did_you_mean/extconf.rb +3 -0
- data/ext/did_you_mean/method_missing.c +20 -0
- data/ext/did_you_mean/org/yukinishijima/ReceiverCapturer.java +57 -0
- data/gemfiles/activerecord_32.gemfile +21 -0
- data/gemfiles/activerecord_40.gemfile +21 -0
- data/gemfiles/activerecord_41.gemfile +21 -0
- data/gemfiles/activerecord_42.gemfile +21 -0
- data/gemfiles/activerecord_edge.gemfile +25 -0
- data/lib/did_you_mean.rb +16 -0
- data/lib/did_you_mean/core_ext/name_error.rb +28 -0
- data/lib/did_you_mean/finders.rb +31 -0
- data/lib/did_you_mean/finders/name_error_finders.rb +24 -0
- data/lib/did_you_mean/finders/name_error_finders/similar_class_finder.rb +50 -0
- data/lib/did_you_mean/finders/name_error_finders/similar_name_finder.rb +61 -0
- data/lib/did_you_mean/finders/similar_attribute_finder.rb +26 -0
- data/lib/did_you_mean/finders/similar_method_finder.rb +45 -0
- data/lib/did_you_mean/levenshtein.rb +49 -0
- data/lib/did_you_mean/receiver_capturer.jar +0 -0
- data/lib/did_you_mean/test_helper.rb +7 -0
- data/lib/did_you_mean/version.rb +3 -0
- data/lib/did_you_mean/word_collection.rb +27 -0
- data/test/all_test.rb +17 -0
- data/test/name_error_extension_test.rb +65 -0
- data/test/no_method_error_extension_test.rb +14 -0
- data/test/null_finder_test.rb +19 -0
- data/test/similar_attribute_finder_test.rb +17 -0
- data/test/similar_class_finder_test.rb +85 -0
- data/test/similar_method_finder_test.rb +60 -0
- data/test/similar_name_finder_test.rb +62 -0
- data/test/test_helper.rb +32 -0
- metadata +165 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'did_you_mean/levenshtein'
|
2
|
+
|
3
|
+
module DidYouMean
|
4
|
+
class WordCollection
|
5
|
+
include Enumerable
|
6
|
+
attr_reader :words
|
7
|
+
|
8
|
+
def initialize(words)
|
9
|
+
@words = words
|
10
|
+
end
|
11
|
+
|
12
|
+
def each(&block) words.each(&block); end
|
13
|
+
|
14
|
+
def similar_to(target_word)
|
15
|
+
target_word = target_word.to_s
|
16
|
+
threshold = threshold(target_word)
|
17
|
+
|
18
|
+
select {|word| Levenshtein.distance(word.to_s, target_word) <= threshold }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def threshold(word)
|
24
|
+
(word.size * 0.3).ceil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/test/all_test.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'null_finder_test'
|
2
|
+
require_relative 'name_error_extension_test'
|
3
|
+
require_relative 'similar_name_finder_test'
|
4
|
+
|
5
|
+
if defined?(RUBY_ENGINE) && %w(ruby jruby).include?(RUBY_ENGINE)
|
6
|
+
require_relative 'similar_method_finder_test'
|
7
|
+
require_relative 'no_method_error_extension_test'
|
8
|
+
else
|
9
|
+
puts "didn't run the tests for NoMethodError extension."
|
10
|
+
puts "running tests for #{RUBY_ENGINE}." if defined?(RUBY_ENGINE)
|
11
|
+
end
|
12
|
+
|
13
|
+
if defined?(ActiveRecord)
|
14
|
+
require_relative 'similar_attribute_finder_test'
|
15
|
+
end
|
16
|
+
|
17
|
+
require_relative 'similar_class_finder_test'
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class NameErrorExtensionTest < Minitest::Test
|
4
|
+
class TestFinder
|
5
|
+
def initialize(*); end
|
6
|
+
def did_you_mean?; "Y U SO SLOW?"; end
|
7
|
+
end
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@old_finder = DidYouMean.finders["NameError"]
|
11
|
+
DidYouMean.finders["NameError"] = TestFinder
|
12
|
+
|
13
|
+
@error = assert_raises(NameError){ doesnt_exist }
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
DidYouMean.finders["NameError"] = @old_finder
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_message
|
21
|
+
assert_match "Y U SO SLOW?", @error.to_s
|
22
|
+
assert_match "Y U SO SLOW?", @error.message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class IgnoreCallersTest < Minitest::Test
|
27
|
+
class Boomer
|
28
|
+
def initialize(*)
|
29
|
+
raise Exception, "finder was created when it shouldn't!"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def setup
|
34
|
+
@org = DidYouMean.finders["NameError"]
|
35
|
+
DidYouMean.finders["NameError"] = Boomer
|
36
|
+
|
37
|
+
@error = assert_raises(NameError){ doesnt_exist }
|
38
|
+
end
|
39
|
+
|
40
|
+
def teardown
|
41
|
+
DidYouMean.finders["NameError"] = @org
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_ignore_missing_name
|
45
|
+
assert_nothing_raised { missing_name }
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_ignore_safe_constantize
|
49
|
+
assert_nothing_raised { safe_constantize }
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def safe_constantize
|
55
|
+
@error.message
|
56
|
+
end
|
57
|
+
|
58
|
+
def missing_name
|
59
|
+
@error.message
|
60
|
+
end
|
61
|
+
|
62
|
+
def assert_nothing_raised
|
63
|
+
yield
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class NoMethodErrorExtensionTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@receiver = "receiver"
|
6
|
+
@error = assert_raises(NoMethodError) do
|
7
|
+
@receiver.doesnt_exist
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_receiver
|
12
|
+
assert_same @receiver, @error.receiver
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class NullFinderTest < Minitest::Test
|
4
|
+
class FirstNameError < NameError; end
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@error = assert_raises(FirstNameError) do
|
8
|
+
raise FirstNameError, "Other name error"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_did_you_mean?
|
13
|
+
assert_nil @error.did_you_mean?
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_message
|
17
|
+
refute_includes "Did you mean?", @error.message
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class SimilarAttributeFinderTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@error = assert_raises(ActiveRecord::UnknownAttributeError) do
|
6
|
+
User.new(flrst_name: "wrong flrst name")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_similar_words
|
11
|
+
assert_suggestion @error.finder.similar_words, "first_name"
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_did_you_mean?
|
15
|
+
assert_match "Did you mean? first_name: string", @error.did_you_mean?
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class Project
|
4
|
+
def self.bo0k
|
5
|
+
Bo0k
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class Book
|
10
|
+
class TableOfContents; end
|
11
|
+
|
12
|
+
def tableof_contents
|
13
|
+
TableofContents
|
14
|
+
end
|
15
|
+
|
16
|
+
class Page
|
17
|
+
def tableof_contents
|
18
|
+
TableofContents
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.tableof_contents
|
22
|
+
TableofContents
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class SimpleSimilarClassFinderTest < Minitest::Test
|
28
|
+
def setup
|
29
|
+
@error = assert_raises(NameError) { ::Bo0k }
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_similar_words
|
33
|
+
assert_suggestion @error.finder.similar_words, "Book"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class SimilarClassFinderInsideClassTest < Minitest::Test
|
38
|
+
def setup
|
39
|
+
@error = assert_raises(NameError) { Project.bo0k }
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_similar_words
|
43
|
+
assert_suggestion @error.finder.similar_words, "Book"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class SimilarClassFinderInsideNestedClassTest < Minitest::Test
|
48
|
+
def setup
|
49
|
+
@error = assert_raises(NameError) { Book::Page.tableof_contents }
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_similar_words
|
53
|
+
assert_suggestion @error.finder.similar_words, "Book::TableOfContents"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class SimilarClassFinderForClassWithNamespaceTest < Minitest::Test
|
58
|
+
def setup
|
59
|
+
@error = assert_raises(NameError) { ::Book::TableofContents }
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_similar_words
|
63
|
+
assert_suggestion @error.finder.similar_words, "Book::TableOfContents"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class SimilarClassFinderFromInstanceTest < Minitest::Test
|
68
|
+
def setup
|
69
|
+
@error = assert_raises(NameError) { ::Book.new.tableof_contents }
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_similar_words
|
73
|
+
assert_suggestion @error.finder.similar_words, "Book::TableOfContents"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class SimilarClassFinderFromNestedInstanceTest < Minitest::Test
|
78
|
+
def setup
|
79
|
+
@error = assert_raises(NameError) { ::Book::Page.new.tableof_contents }
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_similar_words
|
83
|
+
assert_suggestion @error.finder.similar_words, "Book::TableOfContents"
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class SimilarMethodFinderTest < Minitest::Test
|
4
|
+
class User
|
5
|
+
def friends; end
|
6
|
+
def first_name; end
|
7
|
+
def descendants; end
|
8
|
+
|
9
|
+
protected
|
10
|
+
def the_protected_method; end
|
11
|
+
|
12
|
+
private
|
13
|
+
def friend; end
|
14
|
+
def the_private_method; end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def load; end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module UserModule
|
22
|
+
def from_module; end
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup
|
26
|
+
user = User.new.extend(UserModule)
|
27
|
+
|
28
|
+
@error_from_instance_method = assert_raises(NoMethodError){ user.flrst_name }
|
29
|
+
@error_from_private_method = assert_raises(NoMethodError){ user.friend }
|
30
|
+
@error_from_module_method = assert_raises(NoMethodError){ user.fr0m_module }
|
31
|
+
@error_from_class_method = assert_raises(NoMethodError){ User.l0ad }
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_similar_words
|
35
|
+
assert_suggestion @error_from_instance_method.finder.similar_words, :first_name
|
36
|
+
assert_suggestion @error_from_private_method.finder.similar_words, :friends
|
37
|
+
assert_suggestion @error_from_module_method.finder.similar_words, :from_module
|
38
|
+
assert_suggestion @error_from_class_method.finder.similar_words, :load
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_did_you_mean?
|
42
|
+
assert_match "Did you mean? #first_name", @error_from_instance_method.did_you_mean?
|
43
|
+
assert_match "Did you mean? #friends", @error_from_private_method.did_you_mean?
|
44
|
+
assert_match "Did you mean? #from_module", @error_from_module_method.did_you_mean?
|
45
|
+
assert_match "Did you mean? .load", @error_from_class_method.did_you_mean?
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_similar_words_for_long_method_name
|
49
|
+
error = assert_raises(NoMethodError){ User.new.dependents }
|
50
|
+
assert_suggestion error.finder.similar_words, :descendants
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_private_methods_should_not_be_suggested
|
54
|
+
error = assert_raises(NoMethodError){ User.new.the_protected_method }
|
55
|
+
refute_includes error.finder.similar_words, 'the_protected_method'
|
56
|
+
|
57
|
+
error = assert_raises(NoMethodError){ User.new.the_private_method }
|
58
|
+
refute_includes error.finder.similar_words, 'the_private_method'
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class SimilarNameFinderTest < Minitest::Test
|
4
|
+
class User
|
5
|
+
def initialize(options = {})
|
6
|
+
@email = options[:email]
|
7
|
+
end
|
8
|
+
|
9
|
+
def call_flrst_name; f1rst_name; end
|
10
|
+
def call_fr0m_module; fr0m_module; end
|
11
|
+
def first_name; end
|
12
|
+
def to_s
|
13
|
+
"#{@first_name} #{@last_name} <#{email}>"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module UserModule
|
18
|
+
def from_module; end
|
19
|
+
end
|
20
|
+
|
21
|
+
def setup
|
22
|
+
user = User.new.extend(UserModule)
|
23
|
+
|
24
|
+
@error_from_instance_method = assert_raises(NameError){ user.call_flrst_name }
|
25
|
+
@error_from_module_method = assert_raises(NameError){ user.call_fr0m_module }
|
26
|
+
@error_from_missing_at_sign = assert_raises(NameError){ user.to_s }
|
27
|
+
|
28
|
+
# Use begin + rescue as #assert_raises changes a scope.
|
29
|
+
@error_from_local_variable = begin
|
30
|
+
userr
|
31
|
+
rescue NameError => e
|
32
|
+
e
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_similar_words
|
37
|
+
assert_suggestion @error_from_instance_method.finder.similar_words, "first_name"
|
38
|
+
assert_suggestion @error_from_module_method.finder.similar_words, "from_module"
|
39
|
+
assert_suggestion @error_from_local_variable.finder.similar_words, "user"
|
40
|
+
assert_suggestion @error_from_missing_at_sign.finder.similar_words, "email"
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_similar_instance_methods
|
44
|
+
assert_suggestion @error_from_instance_method.finder.similar_methods, "first_name"
|
45
|
+
assert_suggestion @error_from_module_method.finder.similar_methods, "from_module"
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_similar_local_variables
|
49
|
+
assert_suggestion @error_from_local_variable.finder.similar_local_variables, "user"
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_similar_instance_variables
|
53
|
+
assert_suggestion @error_from_missing_at_sign.finder.similar_instance_variables, "email"
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_did_you_mean?
|
57
|
+
assert_match "Did you mean? #first_name", @error_from_instance_method.did_you_mean?
|
58
|
+
assert_match "Did you mean? #from_module", @error_from_module_method.did_you_mean?
|
59
|
+
assert_match "Did you mean? user", @error_from_local_variable.did_you_mean?
|
60
|
+
assert_match "Did you mean? @email", @error_from_missing_at_sign.did_you_mean?
|
61
|
+
end
|
62
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/unit'
|
3
|
+
require 'did_you_mean'
|
4
|
+
|
5
|
+
begin
|
6
|
+
MiniTest::Test
|
7
|
+
rescue NameError
|
8
|
+
MiniTest::Test = MiniTest::Unit::TestCase
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'did_you_mean/test_helper'
|
12
|
+
MiniTest::Test.send :include, DidYouMean::TestHelper
|
13
|
+
|
14
|
+
begin
|
15
|
+
require 'active_record'
|
16
|
+
|
17
|
+
# database
|
18
|
+
ActiveRecord::Base.configurations = {'test' => {adapter: 'sqlite3', database: ':memory:'}}
|
19
|
+
ActiveRecord::Base.establish_connection(:test)
|
20
|
+
|
21
|
+
# models
|
22
|
+
class User < ActiveRecord::Base; end
|
23
|
+
|
24
|
+
class CreateAllTables < ActiveRecord::Migration
|
25
|
+
def self.up
|
26
|
+
create_table(:users) {|t| t.string :first_name }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
ActiveRecord::Migration.verbose = false
|
30
|
+
CreateAllTables.up
|
31
|
+
rescue LoadError
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: did_you_mean
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.6
|
5
|
+
platform: java
|
6
|
+
authors:
|
7
|
+
- Yuki Nishijima
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: interception
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
requirement: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - '>='
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '0'
|
25
|
+
prerelease: false
|
26
|
+
type: :runtime
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.5'
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '1.5'
|
39
|
+
prerelease: false
|
40
|
+
type: :development
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
prerelease: false
|
54
|
+
type: :development
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake-compiler
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
prerelease: false
|
68
|
+
type: :development
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
prerelease: false
|
82
|
+
type: :development
|
83
|
+
description: '"did you mean?" experience in Ruby: the error message will tell you
|
84
|
+
the right one when you misspelled something.'
|
85
|
+
email:
|
86
|
+
- mail@yukinishijima.net
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- .gitignore
|
92
|
+
- .travis.yml
|
93
|
+
- Appraisals
|
94
|
+
- Gemfile
|
95
|
+
- LICENSE.txt
|
96
|
+
- README.md
|
97
|
+
- Rakefile
|
98
|
+
- did_you_mean.gemspec
|
99
|
+
- doc/CHANGELOG.md.erb
|
100
|
+
- doc/changelog_generator.rb
|
101
|
+
- doc/did_you_mean_example.png
|
102
|
+
- ext/did_you_mean/extconf.rb
|
103
|
+
- ext/did_you_mean/method_missing.c
|
104
|
+
- ext/did_you_mean/org/yukinishijima/ReceiverCapturer.java
|
105
|
+
- gemfiles/activerecord_32.gemfile
|
106
|
+
- gemfiles/activerecord_40.gemfile
|
107
|
+
- gemfiles/activerecord_41.gemfile
|
108
|
+
- gemfiles/activerecord_42.gemfile
|
109
|
+
- gemfiles/activerecord_edge.gemfile
|
110
|
+
- lib/did_you_mean.rb
|
111
|
+
- lib/did_you_mean/core_ext/name_error.rb
|
112
|
+
- lib/did_you_mean/finders.rb
|
113
|
+
- lib/did_you_mean/finders/name_error_finders.rb
|
114
|
+
- lib/did_you_mean/finders/name_error_finders/similar_class_finder.rb
|
115
|
+
- lib/did_you_mean/finders/name_error_finders/similar_name_finder.rb
|
116
|
+
- lib/did_you_mean/finders/similar_attribute_finder.rb
|
117
|
+
- lib/did_you_mean/finders/similar_method_finder.rb
|
118
|
+
- lib/did_you_mean/levenshtein.rb
|
119
|
+
- lib/did_you_mean/receiver_capturer.jar
|
120
|
+
- lib/did_you_mean/test_helper.rb
|
121
|
+
- lib/did_you_mean/version.rb
|
122
|
+
- lib/did_you_mean/word_collection.rb
|
123
|
+
- test/all_test.rb
|
124
|
+
- test/name_error_extension_test.rb
|
125
|
+
- test/no_method_error_extension_test.rb
|
126
|
+
- test/null_finder_test.rb
|
127
|
+
- test/similar_attribute_finder_test.rb
|
128
|
+
- test/similar_class_finder_test.rb
|
129
|
+
- test/similar_method_finder_test.rb
|
130
|
+
- test/similar_name_finder_test.rb
|
131
|
+
- test/test_helper.rb
|
132
|
+
homepage: https://github.com/yuki24/did_you_mean
|
133
|
+
licenses:
|
134
|
+
- MIT
|
135
|
+
metadata: {}
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 2.4.5
|
153
|
+
signing_key:
|
154
|
+
specification_version: 4
|
155
|
+
summary: '"Did you mean?" experience in Ruby'
|
156
|
+
test_files:
|
157
|
+
- test/all_test.rb
|
158
|
+
- test/name_error_extension_test.rb
|
159
|
+
- test/no_method_error_extension_test.rb
|
160
|
+
- test/null_finder_test.rb
|
161
|
+
- test/similar_attribute_finder_test.rb
|
162
|
+
- test/similar_class_finder_test.rb
|
163
|
+
- test/similar_method_finder_test.rb
|
164
|
+
- test/similar_name_finder_test.rb
|
165
|
+
- test/test_helper.rb
|