typo_detector 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bf40733f5a08b0e50d645f974228a734c64c79ea
4
+ data.tar.gz: eca6eae7542e7d8ebf2478b9b0572cbcc4d4c489
5
+ SHA512:
6
+ metadata.gz: eb2d23efaa490e3f310539055a9125edadc153bc6d7c67f149988b8931113606828d9472cada68d06431fe92ff4dd74d687d8397b4199b67aecb0dc5bd56ee71
7
+ data.tar.gz: b414639df1712cecd832c4d11ca8fd127877199a20144d3e36affd74e3e93e5b37b318114e03963602deefb8e18bc2889ea6f31329439a680d169c7dbc35a2d6
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in typo_detector.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Masafumi Yokoyama <myokoym@gmail.com>
2
+
3
+ zlib License
4
+
5
+ This software is provided 'as-is', without any express or implied
6
+ warranty. In no event will the authors be held liable for any damages
7
+ arising from the use of this software.
8
+
9
+ Permission is granted to anyone to use this software for any purpose,
10
+ including commercial applications, and to alter it and redistribute it
11
+ freely, subject to the following restrictions:
12
+
13
+ 1. The origin of this software must not be misrepresented; you must not
14
+ claim that you wrote the original software. If you use this software
15
+ in a product, an acknowledgment in the product documentation would be
16
+ appreciated but is not required.
17
+
18
+ 2. Altered source versions must be plainly marked as such, and must not be
19
+ misrepresented as being the original software.
20
+
21
+ 3. This notice may not be removed or altered from any source
22
+ distribution.
data/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # TypoDetector
2
+
3
+ A detective tool for typo.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'typo_detector'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install typo_detector
20
+
21
+ ## Usage
22
+
23
+ ### Files
24
+
25
+ $ typo_detector [FILE]...
26
+
27
+ ### Git repositories
28
+
29
+ $ typo_detector -g [DIRECTORY]...
30
+
31
+ ## Authors
32
+
33
+ * Masafumi Yokoyama `<myokoym@gmail.com>`
34
+
35
+ ## License
36
+
37
+ This software is distributed under the zlib license.
38
+
39
+ See LICENSE.txt for details.
40
+
41
+ (Masafumi Yokoyama has a right to change the license including
42
+ contributed patches.)
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it ( https://github.com/myokoym/typo_detector/fork )
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/typo_detector ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "typo_detector/command"
4
+
5
+ TypoDetector::Command.new(ARGV).run
@@ -0,0 +1,5 @@
1
+ require "typo_detector/version"
2
+
3
+ module TypoDetector
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,104 @@
1
+ require "fileutils"
2
+ require "optparse"
3
+ require "typo_detector/version"
4
+
5
+ module TypoDetector
6
+ class Command
7
+ def initialize(arguments)
8
+ @options = parse_options(arguments)
9
+ @paths = arguments
10
+ @word_counts = {}
11
+ @word_resources = {}
12
+ @max_width = 0
13
+ @scan_pattern = scan_pattern
14
+ end
15
+
16
+ def run
17
+ index
18
+ filter
19
+ show
20
+ end
21
+
22
+ private
23
+ def parse_options(arguments)
24
+ usage = "Usage: typo_detector [OPTIONS] [FILE]..."
25
+ parser = OptionParser.new(usage)
26
+ parser.version = TypoDetector::VERSION
27
+
28
+ options = {}
29
+ parser.on("-g", "--git",
30
+ "Use `git ls-files` with a directory.") do |boolean|
31
+ options[:git] = boolean
32
+ end
33
+ parser.on("-_",
34
+ "Split by '_'.") do |boolean|
35
+ options[:_] = boolean
36
+ end
37
+ parser.parse!(arguments)
38
+
39
+ options
40
+ end
41
+
42
+ def scan_pattern
43
+ if @options[:_]
44
+ /[A-Za-z0-9]+/
45
+ else
46
+ /\w+/
47
+ end
48
+ end
49
+
50
+ def index
51
+ each_files do |path, dirname|
52
+ words = nil
53
+ begin
54
+ words = File.read(path).scan(@scan_pattern)
55
+ rescue
56
+ $stderr.puts("#{$!.message}: <#{path}>")
57
+ next
58
+ end
59
+
60
+ words.each do |word|
61
+ @word_counts[word] ||= 0
62
+ @word_counts[word] += 1
63
+ if dirname
64
+ @word_resources[word] = File.join(dirname, path)
65
+ else
66
+ @word_resources[word] = path
67
+ end
68
+ end
69
+
70
+ width = words.collect {|word| word.size}.max || 0
71
+ @max_width = width if width > @max_width
72
+ end
73
+ end
74
+
75
+ def filter
76
+ @word_counts.select! do |word, count|
77
+ count == 1
78
+ end
79
+ end
80
+
81
+ def show
82
+ @word_counts.keys.sort.sort_by {|word, count| @word_resources[word]}.each do |word|
83
+ puts "#{"%-#{@max_width}s" % word}: #{@word_resources[word]}"
84
+ end
85
+ end
86
+
87
+ def each_files
88
+ if @options[:git]
89
+ @paths.each do |git_dir_path|
90
+ git_dir_basename = File.basename(git_dir_path)
91
+ FileUtils.cd(git_dir_path) do
92
+ `git ls-files`.split(/\n/).each do |path|
93
+ yield(path, git_dir_basename)
94
+ end
95
+ end
96
+ end
97
+ else
98
+ @paths.each do |path|
99
+ yield(path)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,3 @@
1
+ module TypoDetector
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'typo_detector/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "typo_detector"
8
+ spec.version = TypoDetector::VERSION
9
+ spec.authors = ["Masafumi Yokoyama"]
10
+ spec.email = ["myokoym@gmail.com"]
11
+ spec.summary = %q{A detective tool for typo.}
12
+ spec.description = spec.summary
13
+ spec.homepage = "https://github.com/myokoym/typo_detector"
14
+ spec.license = "zlib"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency("bundler")
22
+ spec.add_development_dependency("rake")
23
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: typo_detector
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Masafumi Yokoyama
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
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: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A detective tool for typo.
42
+ email:
43
+ - myokoym@gmail.com
44
+ executables:
45
+ - typo_detector
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - bin/typo_detector
55
+ - lib/typo_detector.rb
56
+ - lib/typo_detector/command.rb
57
+ - lib/typo_detector/version.rb
58
+ - typo_detector.gemspec
59
+ homepage: https://github.com/myokoym/typo_detector
60
+ licenses:
61
+ - zlib
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.2.2
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: A detective tool for typo.
83
+ test_files: []
84
+ has_rdoc: