did_you_mean 0.5.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -4
  3. data/Appraisals +6 -0
  4. data/Gemfile +14 -0
  5. data/README.md +69 -13
  6. data/Rakefile +47 -22
  7. data/did_you_mean.gemspec +3 -5
  8. data/docs/did_you_mean_example.png +0 -0
  9. data/ext/did_you_mean/extconf.rb +16 -11
  10. data/ext/did_you_mean/org/yukinishijima/ReceiverCapturer.java +58 -0
  11. data/ext/did_you_mean/ruby_headers/210/id.h +11 -9
  12. data/ext/did_you_mean/ruby_headers/210/version.h +6 -6
  13. data/ext/did_you_mean/ruby_headers/211/addr2line.h +21 -0
  14. data/ext/did_you_mean/ruby_headers/211/constant.h +36 -0
  15. data/ext/did_you_mean/ruby_headers/211/dln.h +51 -0
  16. data/ext/did_you_mean/ruby_headers/211/encdb.h +170 -0
  17. data/ext/did_you_mean/ruby_headers/211/eval_intern.h +260 -0
  18. data/ext/did_you_mean/ruby_headers/211/gc.h +101 -0
  19. data/ext/did_you_mean/ruby_headers/211/id.h +173 -0
  20. data/ext/did_you_mean/ruby_headers/211/internal.h +889 -0
  21. data/ext/did_you_mean/ruby_headers/211/iseq.h +136 -0
  22. data/ext/did_you_mean/ruby_headers/211/method.h +142 -0
  23. data/ext/did_you_mean/ruby_headers/211/node.h +543 -0
  24. data/ext/did_you_mean/ruby_headers/211/parse.h +183 -0
  25. data/ext/did_you_mean/ruby_headers/211/probes.h +83 -0
  26. data/ext/did_you_mean/ruby_headers/211/probes_helper.h +67 -0
  27. data/ext/did_you_mean/ruby_headers/211/regenc.h +223 -0
  28. data/ext/did_you_mean/ruby_headers/211/regint.h +911 -0
  29. data/ext/did_you_mean/ruby_headers/211/regparse.h +363 -0
  30. data/ext/did_you_mean/ruby_headers/211/revision.h +1 -0
  31. data/ext/did_you_mean/ruby_headers/211/ruby_atomic.h +170 -0
  32. data/ext/did_you_mean/ruby_headers/211/siphash.h +48 -0
  33. data/ext/did_you_mean/ruby_headers/211/thread_native.h +23 -0
  34. data/ext/did_you_mean/ruby_headers/211/thread_pthread.h +56 -0
  35. data/ext/did_you_mean/ruby_headers/211/thread_win32.h +45 -0
  36. data/ext/did_you_mean/ruby_headers/211/timev.h +42 -0
  37. data/ext/did_you_mean/ruby_headers/211/transcode_data.h +123 -0
  38. data/ext/did_you_mean/ruby_headers/211/transdb.h +190 -0
  39. data/ext/did_you_mean/ruby_headers/211/verconf.h +13 -0
  40. data/ext/did_you_mean/ruby_headers/211/version.h +52 -0
  41. data/ext/did_you_mean/ruby_headers/211/vm_core.h +1043 -0
  42. data/ext/did_you_mean/ruby_headers/211/vm_debug.h +37 -0
  43. data/ext/did_you_mean/ruby_headers/211/vm_exec.h +182 -0
  44. data/ext/did_you_mean/ruby_headers/211/vm_insnhelper.h +273 -0
  45. data/ext/did_you_mean/ruby_headers/211/vm_opts.h +56 -0
  46. data/ext/did_you_mean/ruby_headers/212/addr2line.h +21 -0
  47. data/ext/did_you_mean/ruby_headers/212/constant.h +36 -0
  48. data/ext/did_you_mean/ruby_headers/212/dln.h +51 -0
  49. data/ext/did_you_mean/ruby_headers/212/encdb.h +170 -0
  50. data/ext/did_you_mean/ruby_headers/212/eval_intern.h +260 -0
  51. data/ext/did_you_mean/ruby_headers/212/gc.h +101 -0
  52. data/ext/did_you_mean/ruby_headers/212/id.h +173 -0
  53. data/ext/did_you_mean/ruby_headers/212/internal.h +889 -0
  54. data/ext/did_you_mean/ruby_headers/212/iseq.h +136 -0
  55. data/ext/did_you_mean/ruby_headers/212/method.h +142 -0
  56. data/ext/did_you_mean/ruby_headers/212/node.h +543 -0
  57. data/ext/did_you_mean/ruby_headers/212/parse.h +183 -0
  58. data/ext/did_you_mean/ruby_headers/212/probes.h +83 -0
  59. data/ext/did_you_mean/ruby_headers/212/probes_helper.h +67 -0
  60. data/ext/did_you_mean/ruby_headers/212/regenc.h +223 -0
  61. data/ext/did_you_mean/ruby_headers/212/regint.h +911 -0
  62. data/ext/did_you_mean/ruby_headers/212/regparse.h +363 -0
  63. data/ext/did_you_mean/ruby_headers/212/revision.h +1 -0
  64. data/ext/did_you_mean/ruby_headers/212/ruby_atomic.h +170 -0
  65. data/ext/did_you_mean/ruby_headers/212/siphash.h +48 -0
  66. data/ext/did_you_mean/ruby_headers/212/thread_native.h +23 -0
  67. data/ext/did_you_mean/ruby_headers/212/thread_pthread.h +56 -0
  68. data/ext/did_you_mean/ruby_headers/212/thread_win32.h +45 -0
  69. data/ext/did_you_mean/ruby_headers/212/timev.h +42 -0
  70. data/ext/did_you_mean/ruby_headers/212/transcode_data.h +123 -0
  71. data/ext/did_you_mean/ruby_headers/212/transdb.h +190 -0
  72. data/ext/did_you_mean/ruby_headers/212/verconf.h +13 -0
  73. data/ext/did_you_mean/ruby_headers/212/version.h +52 -0
  74. data/ext/did_you_mean/ruby_headers/212/vm_core.h +1043 -0
  75. data/ext/did_you_mean/ruby_headers/212/vm_debug.h +37 -0
  76. data/ext/did_you_mean/ruby_headers/212/vm_exec.h +182 -0
  77. data/ext/did_you_mean/ruby_headers/212/vm_insnhelper.h +273 -0
  78. data/ext/did_you_mean/ruby_headers/212/vm_opts.h +56 -0
  79. data/ext/did_you_mean/ruby_headers/213/addr2line.h +21 -0
  80. data/ext/did_you_mean/ruby_headers/213/constant.h +36 -0
  81. data/ext/did_you_mean/ruby_headers/213/dln.h +51 -0
  82. data/ext/did_you_mean/ruby_headers/213/encdb.h +170 -0
  83. data/ext/did_you_mean/ruby_headers/213/eval_intern.h +270 -0
  84. data/ext/did_you_mean/ruby_headers/213/gc.h +101 -0
  85. data/ext/did_you_mean/ruby_headers/213/id.h +173 -0
  86. data/ext/did_you_mean/ruby_headers/213/internal.h +892 -0
  87. data/ext/did_you_mean/ruby_headers/213/iseq.h +136 -0
  88. data/ext/did_you_mean/ruby_headers/213/method.h +142 -0
  89. data/ext/did_you_mean/ruby_headers/213/node.h +543 -0
  90. data/ext/did_you_mean/ruby_headers/213/parse.h +183 -0
  91. data/ext/did_you_mean/ruby_headers/213/probes.h +83 -0
  92. data/ext/did_you_mean/ruby_headers/213/probes_helper.h +67 -0
  93. data/ext/did_you_mean/ruby_headers/213/regenc.h +223 -0
  94. data/ext/did_you_mean/ruby_headers/213/regint.h +911 -0
  95. data/ext/did_you_mean/ruby_headers/213/regparse.h +363 -0
  96. data/ext/did_you_mean/ruby_headers/213/revision.h +1 -0
  97. data/ext/did_you_mean/ruby_headers/213/ruby_atomic.h +170 -0
  98. data/ext/did_you_mean/ruby_headers/213/siphash.h +48 -0
  99. data/ext/did_you_mean/ruby_headers/213/thread_native.h +23 -0
  100. data/ext/did_you_mean/ruby_headers/213/thread_pthread.h +56 -0
  101. data/ext/did_you_mean/ruby_headers/213/thread_win32.h +45 -0
  102. data/ext/did_you_mean/ruby_headers/213/timev.h +42 -0
  103. data/ext/did_you_mean/ruby_headers/213/transcode_data.h +123 -0
  104. data/ext/did_you_mean/ruby_headers/213/transdb.h +190 -0
  105. data/ext/did_you_mean/ruby_headers/213/verconf.h +13 -0
  106. data/ext/did_you_mean/ruby_headers/213/version.h +52 -0
  107. data/ext/did_you_mean/ruby_headers/213/vm_core.h +1052 -0
  108. data/ext/did_you_mean/ruby_headers/213/vm_debug.h +37 -0
  109. data/ext/did_you_mean/ruby_headers/213/vm_exec.h +182 -0
  110. data/ext/did_you_mean/ruby_headers/213/vm_insnhelper.h +273 -0
  111. data/ext/did_you_mean/ruby_headers/213/vm_opts.h +56 -0
  112. data/ext/did_you_mean/ruby_headers/214/addr2line.h +21 -0
  113. data/ext/did_you_mean/ruby_headers/214/constant.h +36 -0
  114. data/ext/did_you_mean/ruby_headers/214/dln.h +51 -0
  115. data/ext/did_you_mean/ruby_headers/214/encdb.h +170 -0
  116. data/ext/did_you_mean/ruby_headers/214/eval_intern.h +270 -0
  117. data/ext/did_you_mean/ruby_headers/214/gc.h +101 -0
  118. data/ext/did_you_mean/ruby_headers/214/id.h +173 -0
  119. data/ext/did_you_mean/ruby_headers/214/internal.h +892 -0
  120. data/ext/did_you_mean/ruby_headers/214/iseq.h +136 -0
  121. data/ext/did_you_mean/ruby_headers/214/method.h +142 -0
  122. data/ext/did_you_mean/ruby_headers/214/node.h +543 -0
  123. data/ext/did_you_mean/ruby_headers/214/parse.h +183 -0
  124. data/ext/did_you_mean/ruby_headers/214/probes.h +83 -0
  125. data/ext/did_you_mean/ruby_headers/214/probes_helper.h +67 -0
  126. data/ext/did_you_mean/ruby_headers/214/regenc.h +223 -0
  127. data/ext/did_you_mean/ruby_headers/214/regint.h +911 -0
  128. data/ext/did_you_mean/ruby_headers/214/regparse.h +363 -0
  129. data/ext/did_you_mean/ruby_headers/214/revision.h +1 -0
  130. data/ext/did_you_mean/ruby_headers/214/ruby_atomic.h +170 -0
  131. data/ext/did_you_mean/ruby_headers/214/siphash.h +48 -0
  132. data/ext/did_you_mean/ruby_headers/214/thread_native.h +23 -0
  133. data/ext/did_you_mean/ruby_headers/214/thread_pthread.h +56 -0
  134. data/ext/did_you_mean/ruby_headers/214/thread_win32.h +45 -0
  135. data/ext/did_you_mean/ruby_headers/214/timev.h +42 -0
  136. data/ext/did_you_mean/ruby_headers/214/transcode_data.h +123 -0
  137. data/ext/did_you_mean/ruby_headers/214/transdb.h +190 -0
  138. data/ext/did_you_mean/ruby_headers/214/verconf.h +13 -0
  139. data/ext/did_you_mean/ruby_headers/214/version.h +52 -0
  140. data/ext/did_you_mean/ruby_headers/214/vm_core.h +1055 -0
  141. data/ext/did_you_mean/ruby_headers/214/vm_debug.h +37 -0
  142. data/ext/did_you_mean/ruby_headers/214/vm_exec.h +182 -0
  143. data/ext/did_you_mean/ruby_headers/214/vm_insnhelper.h +273 -0
  144. data/ext/did_you_mean/ruby_headers/214/vm_opts.h +56 -0
  145. data/ext/did_you_mean/ruby_headers/220/addr2line.h +1 -1
  146. data/ext/did_you_mean/ruby_headers/220/ccan/build_assert/build_assert.h +40 -0
  147. data/ext/did_you_mean/ruby_headers/220/ccan/check_type/check_type.h +63 -0
  148. data/ext/did_you_mean/ruby_headers/220/ccan/container_of/container_of.h +106 -0
  149. data/ext/did_you_mean/ruby_headers/220/ccan/licenses/BSD-MIT +17 -0
  150. data/ext/did_you_mean/ruby_headers/220/ccan/licenses/CC0 +28 -0
  151. data/ext/did_you_mean/ruby_headers/220/ccan/list/list.h +602 -0
  152. data/ext/did_you_mean/ruby_headers/220/ccan/str/str.h +16 -0
  153. data/ext/did_you_mean/ruby_headers/220/constant.h +10 -3
  154. data/ext/did_you_mean/ruby_headers/220/eval_intern.h +24 -5
  155. data/ext/did_you_mean/ruby_headers/220/gc.h +5 -0
  156. data/ext/did_you_mean/ruby_headers/220/id.h +11 -9
  157. data/ext/did_you_mean/ruby_headers/220/internal.h +116 -21
  158. data/ext/did_you_mean/ruby_headers/220/iseq.h +28 -7
  159. data/ext/did_you_mean/ruby_headers/220/method.h +0 -1
  160. data/ext/did_you_mean/ruby_headers/220/node.h +5 -4
  161. data/ext/did_you_mean/ruby_headers/220/regenc.h +18 -7
  162. data/ext/did_you_mean/ruby_headers/220/regint.h +72 -11
  163. data/ext/did_you_mean/ruby_headers/220/regparse.h +2 -2
  164. data/ext/did_you_mean/ruby_headers/220/ruby_atomic.h +2 -2
  165. data/ext/did_you_mean/ruby_headers/220/symbol.h +87 -0
  166. data/ext/did_you_mean/ruby_headers/220/thread_pthread.h +4 -6
  167. data/ext/did_you_mean/ruby_headers/220/thread_win32.h +0 -9
  168. data/ext/did_you_mean/ruby_headers/220/timev.h +2 -2
  169. data/ext/did_you_mean/ruby_headers/220/version.h +3 -3
  170. data/ext/did_you_mean/ruby_headers/220/vm_core.h +200 -65
  171. data/ext/did_you_mean/ruby_headers/220/vm_insnhelper.h +0 -40
  172. data/gemfiles/activerecord_30.gemfile +14 -0
  173. data/gemfiles/activerecord_31.gemfile +14 -0
  174. data/gemfiles/activerecord_32.gemfile +14 -0
  175. data/gemfiles/activerecord_40.gemfile +14 -0
  176. data/gemfiles/activerecord_41.gemfile +14 -0
  177. data/gemfiles/activerecord_42.gemfile +21 -0
  178. data/gemfiles/activerecord_edge.gemfile +16 -0
  179. data/lib/did_you_mean.rb +14 -4
  180. data/lib/did_you_mean/core_ext/name_error.rb +11 -44
  181. data/lib/did_you_mean/finders.rb +31 -0
  182. data/lib/did_you_mean/finders/name_error_finders.rb +24 -0
  183. data/lib/did_you_mean/finders/name_error_finders/similar_class_finder.rb +50 -0
  184. data/lib/did_you_mean/finders/name_error_finders/similar_name_finder.rb +61 -0
  185. data/lib/did_you_mean/finders/similar_attribute_finder.rb +26 -0
  186. data/lib/did_you_mean/finders/similar_method_finder.rb +42 -0
  187. data/lib/did_you_mean/levenshtein.rb +49 -0
  188. data/lib/did_you_mean/test_helper.rb +11 -0
  189. data/lib/did_you_mean/version.rb +1 -1
  190. data/lib/did_you_mean/word_collection.rb +27 -0
  191. data/test/all_test.rb +16 -2
  192. data/test/name_error_extension_test.rb +24 -0
  193. data/test/no_method_error_extension_test.rb +20 -0
  194. data/test/null_finder_test.rb +19 -0
  195. data/test/similar_attribute_finder_test.rb +2 -6
  196. data/test/similar_class_finder_test.rb +85 -0
  197. data/test/similar_method_finder_test.rb +16 -35
  198. data/test/similar_name_finder_test.rb +31 -23
  199. data/test/test_helper.rb +19 -11
  200. metadata +168 -45
  201. data/docs/better_errors_example.png +0 -0
  202. data/docs/irb_example.png +0 -0
  203. data/docs/rspec_example.png +0 -0
  204. data/lib/did_you_mean/method_finder.rb +0 -24
  205. data/lib/did_you_mean/strategies.rb +0 -23
  206. data/lib/did_you_mean/strategies/similar_attribute_finder.rb +0 -41
  207. data/lib/did_you_mean/strategies/similar_method_finder.rb +0 -46
  208. data/lib/did_you_mean/strategies/similar_name_finder.rb +0 -57
  209. data/test.sh +0 -18
@@ -1,7 +1,7 @@
1
1
  require 'minitest/autorun'
2
2
  require 'minitest/unit'
3
3
  require 'did_you_mean'
4
- require 'active_record'
4
+ require 'mail'
5
5
 
6
6
  begin
7
7
  MiniTest::Test
@@ -9,17 +9,25 @@ rescue NameError
9
9
  MiniTest::Test = MiniTest::Unit::TestCase
10
10
  end
11
11
 
12
- # database
13
- ActiveRecord::Base.configurations = {'test' => {adapter: 'sqlite3', database: ':memory:'}}
14
- ActiveRecord::Base.establish_connection('test')
12
+ require 'did_you_mean/test_helper'
13
+ MiniTest::Test.send :include, DidYouMean::TestHelper
15
14
 
16
- # models
17
- class User < ActiveRecord::Base; end
15
+ begin
16
+ require 'active_record'
17
+
18
+ # database
19
+ ActiveRecord::Base.configurations = {'test' => {adapter: 'sqlite3', database: ':memory:'}}
20
+ ActiveRecord::Base.establish_connection(:test)
21
+
22
+ # models
23
+ class User < ActiveRecord::Base; end
18
24
 
19
- class CreateAllTables < ActiveRecord::Migration
20
- def self.up
21
- create_table(:users) {|t| t.string :first_name; t.integer :last_name }
25
+ class CreateAllTables < ActiveRecord::Migration
26
+ def self.up
27
+ create_table(:users) {|t| t.string :first_name }
28
+ end
22
29
  end
30
+ ActiveRecord::Migration.verbose = false
31
+ CreateAllTables.up
32
+ rescue LoadError
23
33
  end
24
- ActiveRecord::Migration.verbose = false
25
- CreateAllTables.up
metadata CHANGED
@@ -1,31 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: did_you_mean
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuki Nishijima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-10 00:00:00.000000000 Z
11
+ date: 2014-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: text
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: binding_of_caller
14
+ name: interception
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - ">="
@@ -81,21 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: appraisal
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: sqlite3
70
+ name: minitest
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
73
  - - ">="
@@ -109,7 +81,7 @@ dependencies:
109
81
  - !ruby/object:Gem::Version
110
82
  version: '0'
111
83
  - !ruby/object:Gem::Dependency
112
- name: minitest
84
+ name: mail
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
87
  - - ">="
@@ -122,8 +94,8 @@ dependencies:
122
94
  - - ">="
123
95
  - !ruby/object:Gem::Version
124
96
  version: '0'
125
- description: It adds "did you mean?" experience on NoMethodError and NameError because
126
- of a typo.
97
+ description: '"did you mean?" experience in Ruby: the error message will tell you
98
+ the right one when you misspelled something.'
127
99
  email:
128
100
  - mail@yukinishijima.net
129
101
  executables: []
@@ -139,11 +111,10 @@ files:
139
111
  - README.md
140
112
  - Rakefile
141
113
  - did_you_mean.gemspec
142
- - docs/better_errors_example.png
143
- - docs/irb_example.png
144
- - docs/rspec_example.png
114
+ - docs/did_you_mean_example.png
145
115
  - ext/did_you_mean/extconf.rb
146
116
  - ext/did_you_mean/method_missing.c
117
+ - ext/did_you_mean/org/yukinishijima/ReceiverCapturer.java
147
118
  - ext/did_you_mean/ruby_headers/193/addr2line.h
148
119
  - ext/did_you_mean/ruby_headers/193/constant.h
149
120
  - ext/did_you_mean/ruby_headers/193/debug.h
@@ -240,7 +211,146 @@ files:
240
211
  - ext/did_you_mean/ruby_headers/210/vm_exec.h
241
212
  - ext/did_you_mean/ruby_headers/210/vm_insnhelper.h
242
213
  - ext/did_you_mean/ruby_headers/210/vm_opts.h
214
+ - ext/did_you_mean/ruby_headers/211/addr2line.h
215
+ - ext/did_you_mean/ruby_headers/211/constant.h
216
+ - ext/did_you_mean/ruby_headers/211/dln.h
217
+ - ext/did_you_mean/ruby_headers/211/encdb.h
218
+ - ext/did_you_mean/ruby_headers/211/eval_intern.h
219
+ - ext/did_you_mean/ruby_headers/211/gc.h
220
+ - ext/did_you_mean/ruby_headers/211/id.h
221
+ - ext/did_you_mean/ruby_headers/211/internal.h
222
+ - ext/did_you_mean/ruby_headers/211/iseq.h
223
+ - ext/did_you_mean/ruby_headers/211/method.h
224
+ - ext/did_you_mean/ruby_headers/211/node.h
225
+ - ext/did_you_mean/ruby_headers/211/parse.h
226
+ - ext/did_you_mean/ruby_headers/211/probes.h
227
+ - ext/did_you_mean/ruby_headers/211/probes_helper.h
228
+ - ext/did_you_mean/ruby_headers/211/regenc.h
229
+ - ext/did_you_mean/ruby_headers/211/regint.h
230
+ - ext/did_you_mean/ruby_headers/211/regparse.h
231
+ - ext/did_you_mean/ruby_headers/211/revision.h
232
+ - ext/did_you_mean/ruby_headers/211/ruby_atomic.h
233
+ - ext/did_you_mean/ruby_headers/211/siphash.h
234
+ - ext/did_you_mean/ruby_headers/211/thread_native.h
235
+ - ext/did_you_mean/ruby_headers/211/thread_pthread.h
236
+ - ext/did_you_mean/ruby_headers/211/thread_win32.h
237
+ - ext/did_you_mean/ruby_headers/211/timev.h
238
+ - ext/did_you_mean/ruby_headers/211/transcode_data.h
239
+ - ext/did_you_mean/ruby_headers/211/transdb.h
240
+ - ext/did_you_mean/ruby_headers/211/verconf.h
241
+ - ext/did_you_mean/ruby_headers/211/version.h
242
+ - ext/did_you_mean/ruby_headers/211/vm_core.h
243
+ - ext/did_you_mean/ruby_headers/211/vm_debug.h
244
+ - ext/did_you_mean/ruby_headers/211/vm_exec.h
245
+ - ext/did_you_mean/ruby_headers/211/vm_insnhelper.h
246
+ - ext/did_you_mean/ruby_headers/211/vm_opts.h
247
+ - ext/did_you_mean/ruby_headers/212/addr2line.h
248
+ - ext/did_you_mean/ruby_headers/212/constant.h
249
+ - ext/did_you_mean/ruby_headers/212/dln.h
250
+ - ext/did_you_mean/ruby_headers/212/encdb.h
251
+ - ext/did_you_mean/ruby_headers/212/eval_intern.h
252
+ - ext/did_you_mean/ruby_headers/212/gc.h
253
+ - ext/did_you_mean/ruby_headers/212/id.h
254
+ - ext/did_you_mean/ruby_headers/212/internal.h
255
+ - ext/did_you_mean/ruby_headers/212/iseq.h
256
+ - ext/did_you_mean/ruby_headers/212/method.h
257
+ - ext/did_you_mean/ruby_headers/212/node.h
258
+ - ext/did_you_mean/ruby_headers/212/parse.h
259
+ - ext/did_you_mean/ruby_headers/212/probes.h
260
+ - ext/did_you_mean/ruby_headers/212/probes_helper.h
261
+ - ext/did_you_mean/ruby_headers/212/regenc.h
262
+ - ext/did_you_mean/ruby_headers/212/regint.h
263
+ - ext/did_you_mean/ruby_headers/212/regparse.h
264
+ - ext/did_you_mean/ruby_headers/212/revision.h
265
+ - ext/did_you_mean/ruby_headers/212/ruby_atomic.h
266
+ - ext/did_you_mean/ruby_headers/212/siphash.h
267
+ - ext/did_you_mean/ruby_headers/212/thread_native.h
268
+ - ext/did_you_mean/ruby_headers/212/thread_pthread.h
269
+ - ext/did_you_mean/ruby_headers/212/thread_win32.h
270
+ - ext/did_you_mean/ruby_headers/212/timev.h
271
+ - ext/did_you_mean/ruby_headers/212/transcode_data.h
272
+ - ext/did_you_mean/ruby_headers/212/transdb.h
273
+ - ext/did_you_mean/ruby_headers/212/verconf.h
274
+ - ext/did_you_mean/ruby_headers/212/version.h
275
+ - ext/did_you_mean/ruby_headers/212/vm_core.h
276
+ - ext/did_you_mean/ruby_headers/212/vm_debug.h
277
+ - ext/did_you_mean/ruby_headers/212/vm_exec.h
278
+ - ext/did_you_mean/ruby_headers/212/vm_insnhelper.h
279
+ - ext/did_you_mean/ruby_headers/212/vm_opts.h
280
+ - ext/did_you_mean/ruby_headers/213/addr2line.h
281
+ - ext/did_you_mean/ruby_headers/213/constant.h
282
+ - ext/did_you_mean/ruby_headers/213/dln.h
283
+ - ext/did_you_mean/ruby_headers/213/encdb.h
284
+ - ext/did_you_mean/ruby_headers/213/eval_intern.h
285
+ - ext/did_you_mean/ruby_headers/213/gc.h
286
+ - ext/did_you_mean/ruby_headers/213/id.h
287
+ - ext/did_you_mean/ruby_headers/213/internal.h
288
+ - ext/did_you_mean/ruby_headers/213/iseq.h
289
+ - ext/did_you_mean/ruby_headers/213/method.h
290
+ - ext/did_you_mean/ruby_headers/213/node.h
291
+ - ext/did_you_mean/ruby_headers/213/parse.h
292
+ - ext/did_you_mean/ruby_headers/213/probes.h
293
+ - ext/did_you_mean/ruby_headers/213/probes_helper.h
294
+ - ext/did_you_mean/ruby_headers/213/regenc.h
295
+ - ext/did_you_mean/ruby_headers/213/regint.h
296
+ - ext/did_you_mean/ruby_headers/213/regparse.h
297
+ - ext/did_you_mean/ruby_headers/213/revision.h
298
+ - ext/did_you_mean/ruby_headers/213/ruby_atomic.h
299
+ - ext/did_you_mean/ruby_headers/213/siphash.h
300
+ - ext/did_you_mean/ruby_headers/213/thread_native.h
301
+ - ext/did_you_mean/ruby_headers/213/thread_pthread.h
302
+ - ext/did_you_mean/ruby_headers/213/thread_win32.h
303
+ - ext/did_you_mean/ruby_headers/213/timev.h
304
+ - ext/did_you_mean/ruby_headers/213/transcode_data.h
305
+ - ext/did_you_mean/ruby_headers/213/transdb.h
306
+ - ext/did_you_mean/ruby_headers/213/verconf.h
307
+ - ext/did_you_mean/ruby_headers/213/version.h
308
+ - ext/did_you_mean/ruby_headers/213/vm_core.h
309
+ - ext/did_you_mean/ruby_headers/213/vm_debug.h
310
+ - ext/did_you_mean/ruby_headers/213/vm_exec.h
311
+ - ext/did_you_mean/ruby_headers/213/vm_insnhelper.h
312
+ - ext/did_you_mean/ruby_headers/213/vm_opts.h
313
+ - ext/did_you_mean/ruby_headers/214/addr2line.h
314
+ - ext/did_you_mean/ruby_headers/214/constant.h
315
+ - ext/did_you_mean/ruby_headers/214/dln.h
316
+ - ext/did_you_mean/ruby_headers/214/encdb.h
317
+ - ext/did_you_mean/ruby_headers/214/eval_intern.h
318
+ - ext/did_you_mean/ruby_headers/214/gc.h
319
+ - ext/did_you_mean/ruby_headers/214/id.h
320
+ - ext/did_you_mean/ruby_headers/214/internal.h
321
+ - ext/did_you_mean/ruby_headers/214/iseq.h
322
+ - ext/did_you_mean/ruby_headers/214/method.h
323
+ - ext/did_you_mean/ruby_headers/214/node.h
324
+ - ext/did_you_mean/ruby_headers/214/parse.h
325
+ - ext/did_you_mean/ruby_headers/214/probes.h
326
+ - ext/did_you_mean/ruby_headers/214/probes_helper.h
327
+ - ext/did_you_mean/ruby_headers/214/regenc.h
328
+ - ext/did_you_mean/ruby_headers/214/regint.h
329
+ - ext/did_you_mean/ruby_headers/214/regparse.h
330
+ - ext/did_you_mean/ruby_headers/214/revision.h
331
+ - ext/did_you_mean/ruby_headers/214/ruby_atomic.h
332
+ - ext/did_you_mean/ruby_headers/214/siphash.h
333
+ - ext/did_you_mean/ruby_headers/214/thread_native.h
334
+ - ext/did_you_mean/ruby_headers/214/thread_pthread.h
335
+ - ext/did_you_mean/ruby_headers/214/thread_win32.h
336
+ - ext/did_you_mean/ruby_headers/214/timev.h
337
+ - ext/did_you_mean/ruby_headers/214/transcode_data.h
338
+ - ext/did_you_mean/ruby_headers/214/transdb.h
339
+ - ext/did_you_mean/ruby_headers/214/verconf.h
340
+ - ext/did_you_mean/ruby_headers/214/version.h
341
+ - ext/did_you_mean/ruby_headers/214/vm_core.h
342
+ - ext/did_you_mean/ruby_headers/214/vm_debug.h
343
+ - ext/did_you_mean/ruby_headers/214/vm_exec.h
344
+ - ext/did_you_mean/ruby_headers/214/vm_insnhelper.h
345
+ - ext/did_you_mean/ruby_headers/214/vm_opts.h
243
346
  - ext/did_you_mean/ruby_headers/220/addr2line.h
347
+ - ext/did_you_mean/ruby_headers/220/ccan/build_assert/build_assert.h
348
+ - ext/did_you_mean/ruby_headers/220/ccan/check_type/check_type.h
349
+ - ext/did_you_mean/ruby_headers/220/ccan/container_of/container_of.h
350
+ - ext/did_you_mean/ruby_headers/220/ccan/licenses/BSD-MIT
351
+ - ext/did_you_mean/ruby_headers/220/ccan/licenses/CC0
352
+ - ext/did_you_mean/ruby_headers/220/ccan/list/list.h
353
+ - ext/did_you_mean/ruby_headers/220/ccan/str/str.h
244
354
  - ext/did_you_mean/ruby_headers/220/constant.h
245
355
  - ext/did_you_mean/ruby_headers/220/dln.h
246
356
  - ext/did_you_mean/ruby_headers/220/encdb.h
@@ -260,6 +370,7 @@ files:
260
370
  - ext/did_you_mean/ruby_headers/220/revision.h
261
371
  - ext/did_you_mean/ruby_headers/220/ruby_atomic.h
262
372
  - ext/did_you_mean/ruby_headers/220/siphash.h
373
+ - ext/did_you_mean/ruby_headers/220/symbol.h
263
374
  - ext/did_you_mean/ruby_headers/220/thread_native.h
264
375
  - ext/did_you_mean/ruby_headers/220/thread_pthread.h
265
376
  - ext/did_you_mean/ruby_headers/220/thread_win32.h
@@ -279,18 +390,26 @@ files:
279
390
  - gemfiles/activerecord_32.gemfile
280
391
  - gemfiles/activerecord_40.gemfile
281
392
  - gemfiles/activerecord_41.gemfile
393
+ - gemfiles/activerecord_42.gemfile
282
394
  - gemfiles/activerecord_edge.gemfile
283
395
  - lib/did_you_mean.rb
284
396
  - lib/did_you_mean/core_ext/name_error.rb
285
- - lib/did_you_mean/method_finder.rb
286
- - lib/did_you_mean/strategies.rb
287
- - lib/did_you_mean/strategies/similar_attribute_finder.rb
288
- - lib/did_you_mean/strategies/similar_method_finder.rb
289
- - lib/did_you_mean/strategies/similar_name_finder.rb
397
+ - lib/did_you_mean/finders.rb
398
+ - lib/did_you_mean/finders/name_error_finders.rb
399
+ - lib/did_you_mean/finders/name_error_finders/similar_class_finder.rb
400
+ - lib/did_you_mean/finders/name_error_finders/similar_name_finder.rb
401
+ - lib/did_you_mean/finders/similar_attribute_finder.rb
402
+ - lib/did_you_mean/finders/similar_method_finder.rb
403
+ - lib/did_you_mean/levenshtein.rb
404
+ - lib/did_you_mean/test_helper.rb
290
405
  - lib/did_you_mean/version.rb
291
- - test.sh
406
+ - lib/did_you_mean/word_collection.rb
292
407
  - test/all_test.rb
408
+ - test/name_error_extension_test.rb
409
+ - test/no_method_error_extension_test.rb
410
+ - test/null_finder_test.rb
293
411
  - test/similar_attribute_finder_test.rb
412
+ - test/similar_class_finder_test.rb
294
413
  - test/similar_method_finder_test.rb
295
414
  - test/similar_name_finder_test.rb
296
415
  - test/test_helper.rb
@@ -314,13 +433,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
314
433
  version: '0'
315
434
  requirements: []
316
435
  rubyforge_project:
317
- rubygems_version: 2.2.2
436
+ rubygems_version: 2.4.2
318
437
  signing_key:
319
438
  specification_version: 4
320
439
  summary: '"Did you mean?" experience in Ruby'
321
440
  test_files:
322
441
  - test/all_test.rb
442
+ - test/name_error_extension_test.rb
443
+ - test/no_method_error_extension_test.rb
444
+ - test/null_finder_test.rb
323
445
  - test/similar_attribute_finder_test.rb
446
+ - test/similar_class_finder_test.rb
324
447
  - test/similar_method_finder_test.rb
325
448
  - test/similar_name_finder_test.rb
326
449
  - test/test_helper.rb
Binary file
Binary file
@@ -1,24 +0,0 @@
1
- require "text"
2
-
3
- module DidYouMean
4
- class MethodMatcher
5
- def initialize(method_collection, target_method)
6
- @method_collection = method_collection.uniq
7
- @target_method = target_method
8
- end
9
-
10
- def similar_methods
11
- @similar_methods ||= method_collection.select do |method|
12
- ::Text::Levenshtein.distance(method.to_s, target_method.to_s) <= sensitiveness
13
- end
14
- end
15
-
16
- private
17
-
18
- attr_reader :method_collection, :target_method
19
-
20
- def sensitiveness
21
- (target_method.size * 0.3).ceil
22
- end
23
- end
24
- end
@@ -1,23 +0,0 @@
1
- module DidYouMean
2
- class NullFinder
3
- def self.build(*)
4
- new
5
- end
6
-
7
- def did_you_mean?; end
8
-
9
- def empty?
10
- true
11
- end
12
- end
13
-
14
- @@strategies = Hash.new(NullFinder)
15
-
16
- def self.strategies
17
- @@strategies
18
- end
19
- end
20
-
21
- require 'did_you_mean/strategies/similar_name_finder'
22
- require 'did_you_mean/strategies/similar_method_finder'
23
- require 'did_you_mean/strategies/similar_attribute_finder'
@@ -1,41 +0,0 @@
1
- module DidYouMean
2
- class SimilarAttributeFinder
3
- attr_reader :columns, :attribute_name
4
-
5
- def self.build(exception)
6
- columns = exception.frame_binding.eval("self.class").columns
7
- attribute_name = exception.original_message.gsub("unknown attribute: ", "")
8
-
9
- new(attribute_name, columns)
10
- end
11
-
12
- def initialize(attribute_name, columns)
13
- @attribute_name, @columns = attribute_name, columns
14
- end
15
-
16
- def did_you_mean?
17
- return if empty?
18
-
19
- output = "\n\n"
20
- output << " Did you mean? #{format(similar_columns.first)}\n"
21
- output << similar_columns[1..-1].map{|word| "#{' ' * 18}#{format(word)}\n" }.join
22
- output
23
- end
24
-
25
- def empty?
26
- similar_columns.empty?
27
- end
28
-
29
- def similar_columns
30
- @similar_columns ||= MethodMatcher.new(columns.map(&:name), attribute_name).similar_methods
31
- end
32
-
33
- private
34
-
35
- def format(name)
36
- "%s: %s" % [name, columns.detect{|c| c.name == name }.type]
37
- end
38
- end
39
-
40
- strategies["ActiveRecord::UnknownAttributeError"] = SimilarAttributeFinder
41
- end
@@ -1,46 +0,0 @@
1
- module DidYouMean
2
- class SimilarMethodFinder
3
- attr_reader :name, :receiver
4
-
5
- def self.build(exception)
6
- new(exception.name, exception.args.first)
7
- end
8
-
9
- def initialize(name, receiver)
10
- @name, @receiver = name, receiver
11
- end
12
-
13
- def did_you_mean?
14
- return if empty?
15
-
16
- output = "\n\n"
17
- output << " Did you mean? #{separator}#{similar_methods.first}\n"
18
- output << similar_methods[1..-1].map{|word| "#{' ' * 17}#{separator}#{word}\n" }.join
19
- output
20
- end
21
-
22
- def empty?
23
- similar_methods.empty?
24
- end
25
-
26
- def similar_methods
27
- @similar_methods ||= MethodMatcher.new(receiver.methods + receiver.singleton_methods, name).similar_methods
28
- end
29
-
30
- private
31
-
32
- def receiver_name
33
- class_method? ? receiver.name : receiver.class.name
34
- end
35
-
36
- def separator
37
- class_method? ? "." : "#"
38
- end
39
-
40
- def class_method?
41
- receiver.is_a? Class
42
- end
43
- end
44
-
45
- strategies["NoMethodError"] = SimilarMethodFinder
46
- end