justy 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a9eeaf48c6f4abb323b781760c2ba625e9cf111e
4
+ data.tar.gz: 14c797be4fb065f10cf82405e0da4ec51b66862e
5
+ SHA512:
6
+ metadata.gz: 6c88578c8f4df0bd08f2aed8e7ebceab9250e3bff0cde3680032fc044b860da3dcd3afa62ee7952cce0d951270e5410d103b515db06756ad977a431e4fde218a
7
+ data.tar.gz: 2f666525e63f0fa82dbe16bae00d5053ff981efc3c20aa53b06cec93eec3bda223b72dc02a617f964eb0aea1961f99e1fd04e71e36e958496b825423e5ef0754
data/bin/justy ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'justy'
4
+
5
+ justy = Justy::Finder.new
6
+
7
+ justy.run(ARGV)
@@ -0,0 +1,24 @@
1
+
2
+ class FindCommand
3
+
4
+ attr_accessor :files
5
+
6
+ def initialize
7
+ @files = {}
8
+ end
9
+
10
+ def run(folder)
11
+
12
+ end
13
+
14
+ def output
15
+ puts "\r\n === Identical files ===\n"
16
+ @files.each_value do |filename_array|
17
+ if filename_array.length > 1
18
+ puts "-------------------"
19
+ filename_array.each { |filename| puts ' '+filename }
20
+ end
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'justy/commands/find_command'
4
+ require 'justy/commands/md5_find_command'
5
+ require 'justy/commands/name_find_command'
6
+
7
+ class FindCommandFactory
8
+
9
+ def self.create_command(type)
10
+ case type
11
+ when :md5
12
+ MD5FindCommand.new
13
+ when :filename
14
+ NameFindCommand.new
15
+ else
16
+ raise "Bad search type: #{type}"
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'digest/md5'
4
+ require 'justy/commands/find_command'
5
+
6
+
7
+ class MD5FindCommand < FindCommand
8
+
9
+ def run(folder)
10
+ Dir.glob(folder + '**/*', File::FNM_DOTMATCH).each do |filename|
11
+ next if File.directory?(filename)
12
+ key = Digest::MD5.hexdigest(IO.read(filename)).to_sym
13
+ if @files.has_key? key
14
+ @files[key].push filename
15
+ else
16
+ @files[key] = [filename]
17
+ end
18
+ end
19
+ output()
20
+ end
21
+
22
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'justy/commands/find_command'
4
+
5
+ class NameFindCommand < FindCommand
6
+
7
+ def run(folder)
8
+ Dir.glob(folder + '/**/*', File::FNM_DOTMATCH).each do |full_filename|
9
+ next if File.directory?(full_filename)
10
+ key = File.basename(full_filename)
11
+ if @files.has_key? key
12
+ @files[key].push full_filename
13
+ else
14
+ @files[key] = [full_filename]
15
+ end
16
+ end
17
+ output()
18
+ end
19
+
20
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'justy/parser'
4
+ require 'justy/commands/find_command_factory'
5
+ require 'justy/commands/find_command'
6
+
7
+ module Justy
8
+ class Finder
9
+ attr_reader :parser
10
+ attr_reader :find_command
11
+
12
+ def initialize
13
+ super
14
+ @parser = Parser.new
15
+ end
16
+
17
+ def run(args)
18
+ options = @parser.parse(args)
19
+ @find_command = FindCommandFactory.create_command(options[:type].to_sym)
20
+ folder = folder_for_options(options)
21
+ @find_command.run(folder)
22
+ end
23
+
24
+ def folder_for_options(options)
25
+ if (options[:relative])
26
+ folder_path = Dir.pwd
27
+ if (options[:folder])
28
+ folder_path = folder_path + "/" + options[:folder]
29
+ end
30
+ else
31
+ folder_path = options[:folder]
32
+ end
33
+ return folder_path
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'optparse'
4
+ module Justy
5
+ class Parser
6
+ attr_accessor :options
7
+ attr_reader :options_parser
8
+
9
+ def initialize
10
+ super
11
+ init_parser
12
+ end
13
+
14
+ def init_parser
15
+ @options_parser = OptionParser.new do|opts|
16
+ opts.banner = "Usage: justy [options]"
17
+ opts.on('-t', '--type type', 'Search type. Must be md5 or filename.') do |type|
18
+ @options[:type] = type;
19
+ end
20
+
21
+ opts.on('-r', '--relative', 'Relative to current folder') do
22
+ @options[:relative] = true
23
+ end
24
+
25
+ opts.on('-f', '--folder folder', 'Search folder') do |folder|
26
+ @options[:folder] = folder
27
+ end
28
+
29
+ opts.on('-h', '--help', 'Displays Help') do
30
+ puts opts
31
+ exit
32
+ end
33
+ end
34
+ end
35
+
36
+ def parse(args)
37
+ @options = {:type => nil, :folder => nil, :relative => false }
38
+ options_parser.parse!
39
+ return options
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,3 @@
1
+ module Justy
2
+ VERSION = "1.0.0"
3
+ end
data/lib/justy.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require "justy/version"
3
+
4
+ module Justy
5
+ require 'justy/finder'
6
+
7
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: justy
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kirill Kunst
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-01-26 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: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
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: When you want to find duplicate files in folder, all you need is Justy
42
+ email:
43
+ - kirillkunst@gmail.com
44
+ executables:
45
+ - justy
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - lib/justy/commands/find_command.rb
50
+ - lib/justy/commands/find_command_factory.rb
51
+ - lib/justy/commands/md5_find_command.rb
52
+ - lib/justy/commands/name_find_command.rb
53
+ - lib/justy/finder.rb
54
+ - lib/justy/parser.rb
55
+ - lib/justy/version.rb
56
+ - lib/justy.rb
57
+ - bin/justy
58
+ homepage: http://github.com/leoru/justy
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.1.10
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: Justy - duplicate files finder
82
+ test_files: []