typofixer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,2 @@
1
+
2
+ * Alpha
data/Manifest.txt ADDED
@@ -0,0 +1,5 @@
1
+ lib/typofixer.rb
2
+ lib/typofixer/typotracker.rb
3
+ README.rdoc
4
+ History.txt
5
+ Manifest.txt
data/README.rdoc ADDED
@@ -0,0 +1,40 @@
1
+ = TypoFixer
2
+
3
+ * https://github.com/pasberth/TypoFixer
4
+
5
+ == install
6
+
7
+ gem install typofixer
8
+
9
+ == description
10
+
11
+ puts を purs とか typo したときに推測して puts を呼び出したうえでログを出力するデバッガ的なあれ
12
+
13
+ == usage
14
+
15
+ 普通に使う
16
+
17
+ require "typofixer"
18
+
19
+ include TypoFixer::TypoTracker
20
+
21
+ purs "hello typo"
22
+
23
+ # もしかして: puts
24
+ # ... caller ...
25
+ # hello typo # 期待される出力.
26
+
27
+ 出力しないで使う
28
+
29
+ self.typoout = nil
30
+
31
+ purs "hello typo"
32
+
33
+ # hello typo # もしかして: も caller も出力されない
34
+
35
+ ログファイルに書き出す
36
+
37
+ self.typoout = open "typo.out", "a"
38
+
39
+ purs "hello typo"
40
+ # hello typo # そして typo.out にログが追加書き込みされる
data/lib/typofixer.rb ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.dirname(__FILE__)) unless
3
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
4
+
5
+ module TypoFixer
6
+ VERSION = "0.0.1"
7
+ end
8
+
9
+ require 'typofixer/typotracker'
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # typoを検出するデバッガ。Kernelにincludeすればプログラム全体を監視する
5
+ module TypoFixer::TypoTracker
6
+
7
+ def typoin
8
+ $stdin
9
+ end
10
+
11
+ def typoout
12
+ $stdout
13
+ end
14
+
15
+ [:typoin, :typoout].each do |a|
16
+ define_method :"#{a}=" do |v|
17
+ self.class.send :define_method, a do
18
+ v
19
+ end
20
+ end
21
+ end
22
+
23
+ def typo_hook e, ifn, fn, *as, &b
24
+ if typoout
25
+ typoout.write "もしかして: #{ifn}\n"
26
+ $@.each do |at|
27
+ typoout.write "\t#{at}\n"
28
+ end
29
+ end
30
+ send ifn, *as, &b
31
+ end
32
+
33
+ def typo e, methods, funcname, *args, &blk
34
+ typo_cases.each do |_case|
35
+ begin
36
+ return _case.call e, methods, funcname, *args, &blk
37
+ rescue Exception
38
+ end
39
+ end
40
+
41
+ raise e
42
+ end
43
+
44
+ def typo_without_receiver e, fn, *as, &b
45
+ typo(e, methods + private_methods, fn, *as, &b)
46
+ end
47
+
48
+ def typo_with_receiver e, fn, *as, &b
49
+ typo(e, methods, fn, *as, &b)
50
+ end
51
+
52
+ def typo_cases
53
+ return @typo_cases if @typo_cases
54
+ (@typo_cases = []).tap do |typo_cases|
55
+ @typo_cases << proc do |e, methods, funcname, *args, &blk|
56
+ most = []
57
+ seq = funcname.to_s.split //
58
+ seq.length.times do |i|
59
+ t = seq.clone
60
+ t[i] = '.'
61
+ that = methods.grep /^#{t.join}$/
62
+ most += that.reject { |item| most.include? item }
63
+ end
64
+
65
+ if most.one?
66
+ typo_hook e, most.first, funcname, *args, &blk
67
+ else
68
+ raise e
69
+ end
70
+ end
71
+
72
+
73
+ @typo_cases << proc do |e, methods, funcname, *args, &blk|
74
+ most = []
75
+ seq = funcname.to_s.split //
76
+ seq.length.times do |i|
77
+ t = seq.clone
78
+ t[i] = '.'
79
+ t[i+1] = '.'
80
+ that = methods.grep /^#{t.join}$/
81
+ most += that.reject { |item| most.include? item }
82
+ end
83
+
84
+ if most.one?
85
+ typo_hook e, most.first, funcname, *args, &blk
86
+ else
87
+ raise e
88
+ end
89
+ end
90
+
91
+ @typo_cases << proc do |e, methods, funcname, *args, &blk|
92
+ most = []
93
+ seq = funcname.to_s.split //
94
+ seq.length.times do |i|
95
+ t = seq.clone
96
+ t.delete_at i
97
+ t.delete_at i
98
+ t[i] = '.{0,4}'
99
+ that = methods.grep /^#{t.join}$/
100
+ most += that.reject { |item| most.include? item }
101
+ end
102
+
103
+ if most.one?
104
+ typo_hook e, most.first, funcname, *args, &blk
105
+ else
106
+ raise e
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ def method_missing funcname, *args, &blk
113
+ # システムで予約されたものはキャッチしない
114
+ if [:to_ary, :to_path, :to_str, :to_hash, :to_int, :to_io, :to_regexp, :to_proc].include? funcname
115
+ super
116
+ end
117
+
118
+ begin
119
+ super
120
+ rescue NameError => e # レシーバが存在しない場合
121
+ typo_without_receiver e, funcname, *args, &blk
122
+ rescue NoMethodError => e # レシーバが存在する場合
123
+ typo_with_receiver e, funcname, *args, &blk
124
+ end
125
+ end
126
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: typofixer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - pasberth
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rdoc
16
+ requirement: &70244739883700 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.10'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70244739883700
25
+ - !ruby/object:Gem::Dependency
26
+ name: hoe
27
+ requirement: &70244739883280 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '2.13'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70244739883280
36
+ description: puts を purs とか typo したときに推測して puts を呼び出したうえでログを出力するデバッガ的なあれ
37
+ email:
38
+ - pasberth@gmail.com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files:
42
+ - History.txt
43
+ - Manifest.txt
44
+ files:
45
+ - lib/typofixer.rb
46
+ - lib/typofixer/typotracker.rb
47
+ - README.rdoc
48
+ - History.txt
49
+ - Manifest.txt
50
+ homepage: https://github.com/pasberth/TypoFixer
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options:
54
+ - --main
55
+ - README.rdoc
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project: typofixer
72
+ rubygems_version: 1.8.10
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: puts を purs とか typo したときに推測して puts を呼び出したうえでログを出力するデバッガ的なあれ
76
+ test_files: []