du_pretty 0.1.0 → 0.2.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 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