du_pretty 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fbbeba90eac38b4c2ea8bd263de33b2a745d779f2e75d6117961cb39467d11b3
4
- data.tar.gz: cfbebae6d5c7c99112dfaeb2227dd665328a5c607cb06d74e675bc8bdc6def93
3
+ metadata.gz: 77f03d1fc76d562c7f5e1f1be4d7fa5cebdad469b041818dc834b825d846ab1a
4
+ data.tar.gz: 2e1917543b0664bdbd66650b6d98112edc474c77026902e4984c9375626bb1ea
5
5
  SHA512:
6
- metadata.gz: df2e22f3512ea0b158a89327f88aced1a1769250c40b6dc91bd1773453d6880de8cde363544bbebb94d32f192585f2b7a393f3a5e0e335d0384a6479ee7e7fa3
7
- data.tar.gz: b32332c8b0a28d6e4900319ef0b6e13d6294c88c0fc2348932181c516e2f2158caad43ed5e600923be213cd4fe389a26d7a1358cb5d2b33b54a6993dd5b6a613
6
+ metadata.gz: fab99faf694934d97c69bf80ee37fc03ae140807382a9acc9eb36d0b62097f81f5165282927119606e5435861f6370b5585a9b43006fbd292556f3cca8ccf04a
7
+ data.tar.gz: 3695bdc6160ce233f5e734e01336bf98c11a2511a2bc32cfcd040e6cd13377cfc19c4841b0a45ff9614e10f9a458b8773ad851df9b8acf431ba43c162bde880b
data/Gemfile.lock CHANGED
@@ -1,12 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- du_pretty (0.1.0)
4
+ du_pretty (0.2.0)
5
+ colorize
5
6
  thor
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
11
+ colorize (0.8.1)
10
12
  diff-lcs (1.3)
11
13
  rake (10.5.0)
12
14
  rspec (3.8.0)
data/du_pretty.gemspec CHANGED
@@ -24,5 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'bundler', '~> 1.16'
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
26
26
  spec.add_development_dependency 'rspec', '~> 3.0'
27
+ spec.add_dependency 'colorize'
27
28
  spec.add_dependency 'thor'
28
29
  end
data/exe/du_pretty CHANGED
@@ -1,4 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'du_pretty'
4
- DuPretty::CLI.start
4
+ if ['help', '--help'].include?(ARGV[0])
5
+ ARGV[1] = DuPretty::CLI.default_task
6
+ else
7
+ ARGV.unshift(DuPretty::CLI.default_task)
8
+ end
9
+ DuPretty::CLI.start(ARGV)
data/lib/du_pretty/cli.rb CHANGED
@@ -3,10 +3,20 @@ require 'thor'
3
3
 
4
4
  module DuPretty
5
5
  class CLI < Thor
6
- default_command :search
7
- desc 'search', 'search is my default_command'
8
- def search
9
- puts 'hello world!'
6
+ default_task :path
7
+ desc 'path', ''
8
+ option :min_gbyte, type: :numeric
9
+ option :min_mbyte, type: :numeric
10
+ option :min_kbyte, type: :numeric
11
+ option :depth, type: :numeric, aliases: :d
12
+ def path(path = '.')
13
+ min_kbyte = [(options[:min_gbyte] || 0) * 1024 * 1024, (options[:min_mbyte] || 0) * 1024, (options[:min_kbyte] || 0)].max
14
+ print DuWrapper.new(
15
+ path,
16
+ min_kbyte: min_kbyte,
17
+ depth: options[:depth]
18
+ ).pretty
19
+ print "\n"
10
20
  end
11
21
  end
12
22
  end
@@ -1,3 +1,3 @@
1
1
  module DuPretty
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/du_pretty.rb CHANGED
@@ -1,6 +1,90 @@
1
+ require 'colorize'
2
+
1
3
  require 'du_pretty/version'
2
4
  require 'du_pretty/cli'
3
5
 
4
6
  module DuPretty
5
- # Your code goes here...
7
+ class DuWrapper
8
+ def initialize(path, min_kbyte: 0, depth: nil)
9
+ @path = File.expand_path(path, Pathname.pwd)
10
+ @min_kbyte = min_kbyte
11
+ @depth = depth
12
+ end
13
+
14
+ def pretty
15
+ du.split("\n")
16
+ .map { |line| DiskUsage.new(line, @path) }
17
+ .select { |x| x.kbyte >= @min_kbyte }
18
+ .reverse
19
+ .map(&:pretty)
20
+ .join("\n")
21
+ end
22
+
23
+ private
24
+
25
+ def du
26
+ options = @depth.nil? ? '' : "-d #{@depth}"
27
+ `du -k #{options} #{@path}`
28
+ end
29
+
30
+ class DiskUsage
31
+ attr_accessor :raw, :kbyte, :path
32
+
33
+ def initialize(raw, root)
34
+ @raw = raw
35
+ @root = root
36
+ @kbyte = raw.split("\t").compact[0].to_i
37
+ @path = raw.split("\t").compact[1]
38
+ end
39
+
40
+ def pretty
41
+ pretty_path + ' ' + pretty_byte
42
+ end
43
+
44
+ private
45
+
46
+ def basename
47
+ Pathname.new(@path).basename.to_s
48
+ end
49
+
50
+ def depth
51
+ Pathname.new(relative_path).each_filename.to_a.size - 1
52
+ end
53
+
54
+ def pretty_byte
55
+ mb = @kbyte / 1024
56
+ gb = mb / 1024
57
+ if gb.positive?
58
+ if gb > 10
59
+ "#{gb}GB".red
60
+ else
61
+ "#{gb}GB".light_red
62
+ end
63
+ elsif mb.positive?
64
+ if mb > 500
65
+ "#{mb}MB".yellow
66
+ else
67
+ "#{mb}MB".light_yellow
68
+ end
69
+ else
70
+ if @kbyte > 500
71
+ "#{@kbyte}KB".green
72
+ else
73
+ "#{@kbyte}KB".light_green
74
+ end
75
+ end
76
+ end
77
+
78
+ def pretty_path
79
+ return '.' if @path == @root
80
+ spaces = depth.positive? ? ' ' * depth : ''
81
+ tree_symbol = '└── '
82
+ spaces + tree_symbol + basename
83
+ end
84
+
85
+ def relative_path
86
+ @path.sub(/^#{@root}/, '')
87
+ end
88
+ end
89
+ end
6
90
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: du_pretty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katsuma Narisawa
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: colorize
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: thor
57
71
  requirement: !ruby/object:Gem::Requirement