did_you_mean 0.9.6-java → 0.9.9-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 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
- }