did_you_mean 0.9.6-java → 0.9.9-java

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: 13329e71de97d9e4cda167360459805c0db8c76c
4
- data.tar.gz: 9d7a6935356b77b99b37b8b05bcb41484a75884f
3
+ metadata.gz: a14f6d52030ffe8485f65b6dd385af94ea7d4ac5
4
+ data.tar.gz: 0141c3bf6c03e228e50183cf53f17249cce51816
5
5
  SHA512:
6
- metadata.gz: acf487a2a5b82bd13dff01e93ed33167684ffbcf1695aaefb46a19ff37ab3608a26c306641262ccb15dc25c1d9c0da58f3f852d9da7c9cad92cc94988cf3da45
7
- data.tar.gz: 4ca91bcb998eb4b39abc3e49b0c1f13962977cb374d92dbf8f39fae4febe08bde1aeb2a3d377d1d72eb37a3f5b2e8d021b877df74f19e5e8a99b04ccd4ef03fc
6
+ metadata.gz: 90654e5f54d4ee208b2c3cdd5e1aab61fddcba22fc65055a709ce54521c8f4f58e456092f5f087215bdce4ae730c13453c4748763c59604b40cd15a271669459
7
+ data.tar.gz: 981f2d3fd6db87e537bfdb44f1ca932065c342c2a059d2b62e65dfdc014e1014d9d24157763bbdb89afd9107c5d6fec59674280fdca6c2f6f0565876356f6ee0
data/Rakefile CHANGED
@@ -4,28 +4,15 @@ def mri?
4
4
  defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby"
5
5
  end
6
6
 
7
- def jruby?
8
- defined?(JRuby)
9
- end
10
-
11
7
  desc "run tests"
12
8
  task default: [:test]
13
9
 
14
- if mri? || jruby?
15
- if mri?
16
- require 'rake/extensiontask'
10
+ if mri?
11
+ require 'rake/extensiontask'
17
12
 
18
- Rake::ExtensionTask.new('did_you_mean') do |ext|
19
- ext.name = "method_missing"
20
- ext.lib_dir = "lib/did_you_mean"
21
- end
22
- elsif jruby?
23
- require 'rake/javaextensiontask'
24
-
25
- Rake::JavaExtensionTask.new('did_you_mean') do |ext|
26
- ext.name = "receiver_capturer"
27
- ext.lib_dir = "lib/did_you_mean"
28
- end
13
+ Rake::ExtensionTask.new('did_you_mean') do |ext|
14
+ ext.name = "method_missing"
15
+ ext.lib_dir = "lib/did_you_mean"
29
16
  end
30
17
 
31
18
  desc "Run tests"
@@ -12,16 +12,10 @@ Gem::Specification.new do |spec|
12
12
  spec.description = '"did you mean?" experience in Ruby: the error message will tell you the right one when you misspelled something.'
13
13
  spec.homepage = "https://github.com/yuki24/did_you_mean"
14
14
  spec.license = "MIT"
15
- spec.files = `git ls-files`.split($/)
16
-
17
- case RUBY_ENGINE
18
- when 'ruby'
19
- spec.extensions = ["ext/did_you_mean/extconf.rb"]
20
- when 'jruby'
21
- spec.platform = "java"
22
- spec.files << "lib/did_you_mean/receiver_capturer.jar"
23
- end
24
15
 
16
+ spec.files = `git ls-files`.split($/)
17
+ # spec.extensions = ["ext/did_you_mean/extconf.rb"]
18
+ spec.platform = 'java'
25
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
27
21
  spec.require_paths = ["lib"]
@@ -1,3 +1,2 @@
1
1
  require 'mkmf'
2
-
3
2
  create_makefile 'did_you_mean/method_missing'
@@ -2,6 +2,7 @@ require "interception"
2
2
 
3
3
  require "did_you_mean/version"
4
4
  require "did_you_mean/core_ext/name_error"
5
+ require "did_you_mean/core_ext/no_method_error"
5
6
  require "did_you_mean/finders"
6
7
 
7
8
  module DidYouMean
@@ -9,7 +9,9 @@ class NameError
9
9
 
10
10
  def to_s_with_did_you_mean
11
11
  msg = original_message
12
- msg << did_you_mean?.to_s if IGNORED_CALLERS.all? {|ignored| caller.first(8).grep(ignored).empty? }
12
+ bt = caller.first(6)
13
+
14
+ msg << did_you_mean?.to_s if IGNORED_CALLERS.all? {|ignored| bt.grep(ignored).empty? }
13
15
  msg
14
16
  rescue
15
17
  original_message
@@ -0,0 +1,35 @@
1
+ case RUBY_ENGINE
2
+ when 'ruby'
3
+ require 'did_you_mean/method_missing'
4
+
5
+ when 'jruby'
6
+ NoMethodError.class_eval do
7
+ def to_s
8
+ receiver unless defined?(@receiver)
9
+ super
10
+ end
11
+
12
+ def receiver
13
+ @receiver ||= begin
14
+ field = JRuby.reference(__message__).java_class.getDeclaredField("object")
15
+ field.setAccessible(true)
16
+ field.get(__message__)
17
+ rescue
18
+ super
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ if JRUBY_VERSION >= '9.0.0.0'
25
+ def __message__
26
+ JRuby.reference(self).getMessage
27
+ end
28
+ else
29
+ def __message__
30
+ error = JRuby.reference(self)
31
+ error.java_class.getField("message").get(error)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -28,18 +28,7 @@ module DidYouMean
28
28
  end
29
29
  end
30
30
 
31
- if defined?(RUBY_ENGINE)
31
+ if RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'jruby'
32
32
  finders["NoMethodError"] = SimilarMethodFinder
33
-
34
- case RUBY_ENGINE
35
- when 'ruby'
36
- require 'did_you_mean/method_missing'
37
- when 'jruby'
38
- require 'did_you_mean/receiver_capturer'
39
- org.yukinishijima.ReceiverCapturer.setup(JRuby.runtime)
40
- NoMethodError.send(:attr, :receiver)
41
- else
42
- finders.delete("NoMethodError")
43
- end
44
33
  end
45
34
  end
@@ -11,9 +11,13 @@ module DidYouMean
11
11
  d = (0..m).to_a
12
12
  x = nil
13
13
 
14
- str1.each_char.with_index(1) do |char1, i|
15
- str2.each_char.with_index do |char2, j|
16
- cost = (char1 == char2) ? 0 : 1
14
+ # to avoid duplicating an enumerable object, create it outside of the loop
15
+ str2_codepoints = str2.codepoints.to_a
16
+
17
+ str1.each_codepoint.with_index(1) do |char1, i|
18
+ j = 0
19
+ while j < m
20
+ cost = (char1 == str2_codepoints[j]) ? 0 : 1
17
21
  x = min3(
18
22
  d[j+1] + 1, # insertion
19
23
  i + 1, # deletion
@@ -21,6 +25,8 @@ module DidYouMean
21
25
  )
22
26
  d[j] = i
23
27
  i = x
28
+
29
+ j += 1
24
30
  end
25
31
  d[m] = x
26
32
  end
@@ -1,3 +1,3 @@
1
1
  module DidYouMean
2
- VERSION = "0.9.6"
2
+ VERSION = "0.9.9"
3
3
  end
@@ -15,7 +15,10 @@ module DidYouMean
15
15
  target_word = target_word.to_s
16
16
  threshold = threshold(target_word)
17
17
 
18
- select {|word| Levenshtein.distance(word.to_s, target_word) <= threshold }
18
+ map {|word| [Levenshtein.distance(word.to_s, target_word), word] }
19
+ .select {|distance, _| distance <= threshold }
20
+ .sort
21
+ .map(&:last)
19
22
  end
20
23
 
21
24
  private
@@ -1,4 +1,5 @@
1
1
  require_relative 'null_finder_test'
2
+ require_relative 'word_collection_test'
2
3
  require_relative 'name_error_extension_test'
3
4
  require_relative 'similar_name_finder_test'
4
5
 
@@ -1,14 +1,38 @@
1
1
  require_relative 'test_helper'
2
2
 
3
3
  class NoMethodErrorExtensionTest < Minitest::Test
4
- def setup
5
- @receiver = "receiver"
6
- @error = assert_raises(NoMethodError) do
7
- @receiver.doesnt_exist
4
+ def test_receiver_with_string
5
+ receiver = "receiver"
6
+ error = assert_raises(NoMethodError) do
7
+ receiver.doesnt_exist
8
8
  end
9
+
10
+ assert_same receiver, error.receiver
11
+ end
12
+
13
+ def test_receiver_with_class
14
+ error = assert_raises(NoMethodError) do
15
+ Object.doesnt_exist
16
+ end
17
+
18
+ assert_same Object, error.receiver
9
19
  end
10
20
 
11
- def test_receiver
12
- assert_same @receiver, @error.receiver
21
+ def test_receiver_with_class_after_calling_to_s
22
+ error = assert_raises(NoMethodError) do
23
+ Object.doesnt_exist
24
+ end
25
+
26
+ error.to_s
27
+ assert_same Object, error.receiver
28
+ end
29
+
30
+ def test_receiver_with_class_after_calling_message
31
+ error = assert_raises(NoMethodError) do
32
+ Object.doesnt_exist
33
+ end
34
+
35
+ error.message
36
+ assert_same Object, error.receiver
13
37
  end
14
38
  end
@@ -0,0 +1,26 @@
1
+ require_relative 'test_helper'
2
+
3
+ class WordCollectionTest < Minitest::Test
4
+ def setup
5
+ names = %w(
6
+ name12
7
+ name123
8
+ name1234
9
+ name12345
10
+ name123456
11
+ )
12
+
13
+ @word_collection = DidYouMean::WordCollection.new(names)
14
+ end
15
+
16
+ def test_similar_to
17
+ expected = %w(
18
+ name123456
19
+ name12345
20
+ name1234
21
+ name123
22
+ )
23
+
24
+ assert_equal expected, @word_collection.similar_to("name123456")
25
+ end
26
+ end
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: 0.9.6
4
+ version: 0.9.9
5
5
  platform: java
6
6
  authors:
7
7
  - Yuki Nishijima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-02 00:00:00.000000000 Z
11
+ date: 2015-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: interception
@@ -101,7 +101,6 @@ files:
101
101
  - doc/did_you_mean_example.png
102
102
  - ext/did_you_mean/extconf.rb
103
103
  - ext/did_you_mean/method_missing.c
104
- - ext/did_you_mean/org/yukinishijima/ReceiverCapturer.java
105
104
  - gemfiles/activerecord_32.gemfile
106
105
  - gemfiles/activerecord_40.gemfile
107
106
  - gemfiles/activerecord_41.gemfile
@@ -109,6 +108,7 @@ files:
109
108
  - gemfiles/activerecord_edge.gemfile
110
109
  - lib/did_you_mean.rb
111
110
  - lib/did_you_mean/core_ext/name_error.rb
111
+ - lib/did_you_mean/core_ext/no_method_error.rb
112
112
  - lib/did_you_mean/finders.rb
113
113
  - lib/did_you_mean/finders/name_error_finders.rb
114
114
  - lib/did_you_mean/finders/name_error_finders/similar_class_finder.rb
@@ -116,7 +116,6 @@ files:
116
116
  - lib/did_you_mean/finders/similar_attribute_finder.rb
117
117
  - lib/did_you_mean/finders/similar_method_finder.rb
118
118
  - lib/did_you_mean/levenshtein.rb
119
- - lib/did_you_mean/receiver_capturer.jar
120
119
  - lib/did_you_mean/test_helper.rb
121
120
  - lib/did_you_mean/version.rb
122
121
  - lib/did_you_mean/word_collection.rb
@@ -129,6 +128,7 @@ files:
129
128
  - test/similar_method_finder_test.rb
130
129
  - test/similar_name_finder_test.rb
131
130
  - test/test_helper.rb
131
+ - test/word_collection_test.rb
132
132
  homepage: https://github.com/yuki24/did_you_mean
133
133
  licenses:
134
134
  - MIT
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  version: '0'
150
150
  requirements: []
151
151
  rubyforge_project:
152
- rubygems_version: 2.4.5
152
+ rubygems_version: 2.4.6
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: '"Did you mean?" experience in Ruby'
@@ -163,3 +163,4 @@ test_files:
163
163
  - test/similar_method_finder_test.rb
164
164
  - test/similar_name_finder_test.rb
165
165
  - test/test_helper.rb
166
+ - test/word_collection_test.rb
@@ -1,57 +0,0 @@
1
- package org.yukinishijima;
2
-
3
- import org.jruby.anno.JRubyMethod;
4
- import org.jruby.exceptions.RaiseException;
5
- import org.jruby.runtime.builtin.IRubyObject;
6
- import org.jruby.runtime.Block;
7
- import org.jruby.runtime.ThreadContext;
8
- import org.jruby.runtime.Visibility;
9
- import org.jruby.Ruby;
10
- import org.jruby.RubyArray;
11
- import org.jruby.RubyException;
12
- import org.jruby.RubyModule;
13
- import org.jruby.RubyNoMethodError;
14
- import org.jruby.internal.runtime.methods.CallConfiguration;
15
- import org.jruby.internal.runtime.methods.DynamicMethod;
16
- import org.jruby.internal.runtime.methods.JavaMethod.JavaMethodNBlock;
17
-
18
- public class ReceiverCapturer extends JavaMethodNBlock {
19
- private DynamicMethod methodMissingMethod;
20
-
21
- public ReceiverCapturer(RubyModule implementationClass, DynamicMethod methodMissingMethod) {
22
- super(implementationClass, Visibility.PRIVATE, CallConfiguration.FrameFullScopeNone);
23
- this.methodMissingMethod = methodMissingMethod;
24
- }
25
-
26
- @Override
27
- public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args, Block block) {
28
- try {
29
- return this.methodMissingMethod.call(context, self, clazz, name, args, block);
30
- } catch (RaiseException exception) {
31
- appendReceiverToException(exception, self);
32
- throw exception;
33
- }
34
- }
35
-
36
- @JRubyMethod
37
- public static void setup(Ruby runtime) {
38
- RubyModule module = runtime.defineModule("Kernel");
39
-
40
- DynamicMethod privateMethodMissing = runtime.getPrivateMethodMissing();
41
- DynamicMethod protectedMethodMissing = runtime.getProtectedMethodMissing();
42
- DynamicMethod superMethodMissing = runtime.getSuperMethodMissing();
43
- DynamicMethod normalMethodMissing = runtime.getNormalMethodMissing();
44
-
45
- runtime.setPrivateMethodMissing(new ReceiverCapturer(module, privateMethodMissing));
46
- runtime.setProtectedMethodMissing(new ReceiverCapturer(module, protectedMethodMissing));
47
- runtime.setSuperMethodMissing(new ReceiverCapturer(module, superMethodMissing));
48
- runtime.setNormalMethodMissing(new ReceiverCapturer(module, normalMethodMissing));
49
- }
50
-
51
- private void appendReceiverToException(RaiseException exception, IRubyObject self) {
52
- if (exception.getException() instanceof RubyNoMethodError) {
53
- RubyNoMethodError noMethodError = (RubyNoMethodError) exception.getException();
54
- noMethodError.setInstanceVariable("@receiver", self);
55
- }
56
- }
57
- }