freshen 0.0.1 → 0.0.2
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 +4 -4
- data/lib/freshen/cli.rb +47 -1
- data/lib/freshen/errors.rb +13 -2
- data/lib/freshen/executable.rb +4 -6
- data/lib/freshen/variables.rb +1 -1
- data/lib/freshen.rb +1 -0
- data/lib/freshenary/status.rb +25 -0
- data/lib/freshenary.rb +9 -48
- data/lib/freshener.rb +16 -12
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2654aa482799d9e600f0105cbaa8299149114fcc
|
4
|
+
data.tar.gz: fa8c4860dd249db2cff7c3f836c1c56380b03440
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6396561ccfbc765e76db9caa6284a055faf7fbc71f990bac20e81c6a09c748d8dfbcca236eb9f980434fe47a2891fe700dc283f2fa0ee8625517492d285d9f8c
|
7
|
+
data.tar.gz: 6b4be3cfdcc58011311d26bf8ecd13e1ded731f1b5d26566af4d8d6a0d12b3f56b86cc3bb64e4386586153b9a2fb026263bee2e1a493a99c3e4d8296480e0f55
|
data/lib/freshen/cli.rb
CHANGED
@@ -67,7 +67,53 @@ class Freshen
|
|
67
67
|
\x5 $ freshen up rubygems
|
68
68
|
EOF
|
69
69
|
def up(*fresheners)
|
70
|
-
|
70
|
+
stats = {
|
71
|
+
successful: {
|
72
|
+
color: :green,
|
73
|
+
count: 0
|
74
|
+
},
|
75
|
+
skipped: {
|
76
|
+
color: :yellow,
|
77
|
+
count: 0
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
begin
|
82
|
+
duration = Time.duration_of do
|
83
|
+
printed_output = false
|
84
|
+
Freshenary.freshen_up(*fresheners) do |name, freshener, status|
|
85
|
+
case status
|
86
|
+
when Freshenary::Status::FRESHENING
|
87
|
+
print "\n" if printed_output
|
88
|
+
print String.prefix.green
|
89
|
+
puts " Freshening #{freshener.class.name}".bold
|
90
|
+
printed_output = true
|
91
|
+
when Freshenary::Status::CLEANING_UP
|
92
|
+
print "\n"
|
93
|
+
print String.prefix.green
|
94
|
+
puts " Cleaning Up #{freshener.class.name}".bold
|
95
|
+
when Freshenary::Status::FRESHENED
|
96
|
+
stats[:successful][:count] += 1
|
97
|
+
when Freshenary::Status::SKIPPED
|
98
|
+
print "\n"
|
99
|
+
print String.prefix.yellow
|
100
|
+
puts " Skipped #{freshener.class.name}".bold
|
101
|
+
|
102
|
+
stats[:skipped][:count] += 1
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
stats.delete_if { |key, value| 0 == value[:count] }
|
108
|
+
|
109
|
+
unless stats.empty?
|
110
|
+
stats = stats.map { |key, value| "#{value[:count]} #{key}".send(value[:color]) }
|
111
|
+
puts "\n#{stats.join(" / ")} (%.2f sec)" % duration
|
112
|
+
end
|
113
|
+
rescue Freshen::FreshenerNotInstalled, Freshen::ExecutableError => e
|
114
|
+
puts "#{String.ballot.red} #{e}"
|
115
|
+
exit! 1
|
116
|
+
end
|
71
117
|
end
|
72
118
|
|
73
119
|
default_task :up
|
data/lib/freshen/errors.rb
CHANGED
@@ -7,6 +7,8 @@ class Freshen
|
|
7
7
|
# system's kernel is unsupported.
|
8
8
|
#
|
9
9
|
class UnsupportedKernel < RuntimeError
|
10
|
+
attr_reader :kernel
|
11
|
+
|
10
12
|
def initialize(kernel)
|
11
13
|
@kernel = kernel
|
12
14
|
end
|
@@ -21,6 +23,8 @@ class Freshen
|
|
21
23
|
# been implemented.
|
22
24
|
#
|
23
25
|
class UpdateMethodNotImplementedError < NotImplementedError
|
26
|
+
attr_reader :name
|
27
|
+
|
24
28
|
def initialize(freshener)
|
25
29
|
@name = freshener.class.name.split('::').last
|
26
30
|
end
|
@@ -34,6 +38,8 @@ class Freshen
|
|
34
38
|
# is not installed.
|
35
39
|
#
|
36
40
|
class FreshenerNotInstalled < Exception
|
41
|
+
attr_reader :name
|
42
|
+
|
37
43
|
def initialize(name)
|
38
44
|
@name = name
|
39
45
|
end
|
@@ -47,6 +53,8 @@ class Freshen
|
|
47
53
|
# failed to load.
|
48
54
|
#
|
49
55
|
class FreshenerLoadError < LoadError
|
56
|
+
attr_reader :name
|
57
|
+
|
50
58
|
def initialize(name)
|
51
59
|
@name = name
|
52
60
|
end
|
@@ -60,14 +68,17 @@ class Freshen
|
|
60
68
|
# command fails.
|
61
69
|
#
|
62
70
|
class ExecutableError < RuntimeError
|
63
|
-
|
71
|
+
attr_reader :name, :duration, :command, :args
|
72
|
+
|
73
|
+
def initialize(name, duration, command, *args)
|
64
74
|
@name = name
|
75
|
+
@duration = duration
|
65
76
|
@command = command
|
66
77
|
@args = args.map { |a| a.to_s }
|
67
78
|
end
|
68
79
|
|
69
80
|
def to_s
|
70
|
-
"#{@name}
|
81
|
+
"#{@name} failed command '#{Executable.command_string(@command, *@args)}' after #{@duration}"
|
71
82
|
end
|
72
83
|
end
|
73
84
|
end
|
data/lib/freshen/executable.rb
CHANGED
@@ -68,9 +68,7 @@ class Freshen
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
if duration
|
72
|
-
duration = (" %.2f sec" % duration)
|
73
|
-
end
|
71
|
+
duration_string = (" %.2f sec" % duration) if duration
|
74
72
|
|
75
73
|
$stdout.flush
|
76
74
|
|
@@ -80,11 +78,11 @@ class Freshen
|
|
80
78
|
|
81
79
|
if freshening or cleaning
|
82
80
|
if success
|
83
|
-
puts "#{String.checkmark.green}#{
|
81
|
+
puts "#{String.checkmark.green}#{duration_string.green}" if Freshen.cli?
|
84
82
|
else
|
85
|
-
puts "#{String.ballot.red}#{
|
83
|
+
puts "#{String.ballot.red}#{duration_string.red}" if Freshen.cli?
|
86
84
|
|
87
|
-
raise ExecutableError.new(self.class.name, command, *args)
|
85
|
+
raise ExecutableError.new(self.class.name, duration, command, *args)
|
88
86
|
end
|
89
87
|
end
|
90
88
|
|
data/lib/freshen/variables.rb
CHANGED
data/lib/freshen.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
unless Object.const_defined?('Freshen')
|
2
|
+
raise "You can't load this file. Please load the freshen file instead."
|
3
|
+
end
|
4
|
+
|
5
|
+
class Freshenary
|
6
|
+
# The statuses for the Freshenary class.
|
7
|
+
#
|
8
|
+
class Status
|
9
|
+
# This status indicates that a freshener is freshening.
|
10
|
+
#
|
11
|
+
FRESHENING = "FRESHENING"
|
12
|
+
|
13
|
+
# This status indicates that a freshener is cleaning up.
|
14
|
+
#
|
15
|
+
CLEANING_UP = "CLEANING_UP"
|
16
|
+
|
17
|
+
# This status indicates that a freshener has been freshened.
|
18
|
+
#
|
19
|
+
FRESHENED = "FRESHENED"
|
20
|
+
|
21
|
+
# This status indicates that a freshener has been skipped.
|
22
|
+
#
|
23
|
+
SKIPPED = "SKIPPED"
|
24
|
+
end
|
25
|
+
end
|
data/lib/freshenary.rb
CHANGED
@@ -13,86 +13,47 @@ class Freshenary
|
|
13
13
|
# >> Freshenary.freshen_up
|
14
14
|
# => nil
|
15
15
|
#
|
16
|
-
def self.freshen_up(*fresheners)
|
16
|
+
def self.freshen_up(*fresheners, &block)
|
17
17
|
if fresheners.empty?
|
18
18
|
fresheners = Freshener.all
|
19
19
|
else
|
20
|
-
|
21
|
-
begin
|
22
|
-
Freshener.ensure_installed!(*fresheners)
|
23
|
-
rescue Freshen::FreshenerNotInstalled => e
|
24
|
-
puts "#{String.ballot.red} #{e}"
|
25
|
-
exit! 1
|
26
|
-
end
|
27
|
-
end
|
20
|
+
Freshener.ensure_installed!(*fresheners)
|
28
21
|
|
29
22
|
fresheners = Freshener.instances_of(*fresheners)
|
30
23
|
end
|
31
24
|
|
32
|
-
status = {
|
33
|
-
successful: {
|
34
|
-
color: :green,
|
35
|
-
count: 0
|
36
|
-
},
|
37
|
-
skipped: {
|
38
|
-
color: :yellow,
|
39
|
-
count: 0
|
40
|
-
},
|
41
|
-
failed: {
|
42
|
-
color: :red,
|
43
|
-
count: 0
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
25
|
duration = Time.duration_of do
|
48
26
|
fresheners.each do |name, freshener|
|
49
27
|
if freshener.needs_freshening?
|
50
|
-
print "#{String.prefix.green} " if Freshen.cli?
|
51
|
-
puts "Freshening #{freshener.class.name}".bold if Freshen.cli?
|
52
|
-
|
53
28
|
cleaning = false
|
54
29
|
|
55
30
|
begin
|
31
|
+
yield name, freshener, Freshenary::Status::FRESHENING if block_given?
|
32
|
+
|
56
33
|
freshener.freshen
|
57
34
|
|
58
35
|
if freshener.respond_to? :cleanup
|
59
|
-
|
60
|
-
puts "Cleaning up #{freshener.class.name}".bold if Freshen.cli?
|
36
|
+
yield name, freshener, Freshenary::Status::CLEANING_UP if block_given?
|
61
37
|
|
62
38
|
cleaning = true
|
63
39
|
|
64
40
|
freshener.cleanup(true)
|
65
41
|
end
|
66
42
|
|
67
|
-
|
43
|
+
yield name, freshener, Freshenary::Status::FRESHENED if block_given?
|
68
44
|
rescue Freshen::ExecutableError => e
|
69
45
|
if false == cleaning and freshener.respond_to? :cleanup
|
70
|
-
|
71
|
-
puts "Cleaning up #{freshener.class.name}".bold if Freshen.cli?
|
46
|
+
yield name, freshener, Freshenary::Status::CLEANING_UP if block_given?
|
72
47
|
|
73
48
|
freshener.cleanup(false)
|
74
49
|
end
|
75
50
|
|
76
|
-
raise e
|
77
|
-
|
78
|
-
status[:failed][:count] += 1
|
51
|
+
raise e
|
79
52
|
end
|
80
53
|
else
|
81
|
-
|
82
|
-
puts "#{freshener.class.name} is already fresh".bold if Freshen.cli?
|
83
|
-
|
84
|
-
status[:skipped][:count] += 1
|
54
|
+
yield name, freshener, Freshenary::Status::SKIPPED if block_given?
|
85
55
|
end
|
86
|
-
|
87
|
-
puts ""
|
88
56
|
end
|
89
57
|
end
|
90
|
-
|
91
|
-
if Freshen.cli?
|
92
|
-
status.delete_if { |key, value| 0 == value[:count] }
|
93
|
-
status = status.map { |key, value| "#{value[:count]} #{key}".send(value[:color]) }
|
94
|
-
|
95
|
-
puts "#{status.join(" / ")} (%.2f sec)" % duration
|
96
|
-
end
|
97
58
|
end
|
98
59
|
end
|
data/lib/freshener.rb
CHANGED
@@ -12,7 +12,7 @@ class Freshener
|
|
12
12
|
#
|
13
13
|
# Example:
|
14
14
|
# >> Freshener.all
|
15
|
-
# => { "rubygems" => #<
|
15
|
+
# => { "rubygems" => #<RubyGems:0x00000000000000> }
|
16
16
|
#
|
17
17
|
def self.all
|
18
18
|
fresheners = Dir.glob(File.join(Freshen::FRESHENERS_DIR, "*.rb"))
|
@@ -24,8 +24,8 @@ class Freshener
|
|
24
24
|
# specified freshehers.
|
25
25
|
#
|
26
26
|
# Example:
|
27
|
-
# >> Freshener.instances_of :
|
28
|
-
# => { "rubygems" => #<
|
27
|
+
# >> Freshener.instances_of :ruby_gems
|
28
|
+
# => { "rubygems" => #<RubyGems:0x00000000000000> }
|
29
29
|
#
|
30
30
|
def self.instances_of(*fresheners)
|
31
31
|
fresheners.sort_by! do |name|
|
@@ -45,8 +45,8 @@ class Freshener
|
|
45
45
|
# name: (String)
|
46
46
|
#
|
47
47
|
# Example:
|
48
|
-
# >> Freshener.instance_of :
|
49
|
-
# => #<
|
48
|
+
# >> Freshener.instance_of :ruby_gems
|
49
|
+
# => #<RubyGems:0x00000000000000>
|
50
50
|
#
|
51
51
|
def self.instance_of(name)
|
52
52
|
load_by_name(name)
|
@@ -62,8 +62,8 @@ class Freshener
|
|
62
62
|
# name: (String)
|
63
63
|
#
|
64
64
|
# Example:
|
65
|
-
# >> Freshener.class_for :
|
66
|
-
# => "
|
65
|
+
# >> Freshener.class_for :ruby_gems
|
66
|
+
# => "RubyGems"
|
67
67
|
#
|
68
68
|
def self.class_for(name)
|
69
69
|
klass = name.to_s.capitalize
|
@@ -78,7 +78,7 @@ class Freshener
|
|
78
78
|
# name: (String)
|
79
79
|
#
|
80
80
|
# Example:
|
81
|
-
# >> Freshener.load_by_name :
|
81
|
+
# >> Freshener.load_by_name :ruby_gems
|
82
82
|
# => nil
|
83
83
|
#
|
84
84
|
# Raises:
|
@@ -91,6 +91,8 @@ class Freshener
|
|
91
91
|
rescue LoadError
|
92
92
|
raise Freshen::FreshenerLoadError.new(name)
|
93
93
|
end
|
94
|
+
|
95
|
+
nil
|
94
96
|
end
|
95
97
|
|
96
98
|
# Check that the specified fresheners are installed.
|
@@ -99,7 +101,7 @@ class Freshener
|
|
99
101
|
# fresheners: (Splat)
|
100
102
|
#
|
101
103
|
# Example:
|
102
|
-
# >> Freshener.installed? :
|
104
|
+
# >> Freshener.installed? :ruby_gems
|
103
105
|
# => true
|
104
106
|
#
|
105
107
|
def self.installed?(*fresheners)
|
@@ -113,7 +115,7 @@ class Freshener
|
|
113
115
|
# Ensure that the specified fresheners are installed.
|
114
116
|
#
|
115
117
|
# Arguments:
|
116
|
-
# >> Freshener.ensure_installed! :
|
118
|
+
# >> Freshener.ensure_installed! :ruby_gems
|
117
119
|
# => nil
|
118
120
|
#
|
119
121
|
def self.ensure_installed!(*fresheners)
|
@@ -122,6 +124,8 @@ class Freshener
|
|
122
124
|
raise Freshen::FreshenerNotInstalled.new(name)
|
123
125
|
end
|
124
126
|
end
|
127
|
+
|
128
|
+
nil
|
125
129
|
end
|
126
130
|
|
127
131
|
# Mark certain class methods as private
|
@@ -131,7 +135,7 @@ class Freshener
|
|
131
135
|
# freshening up.
|
132
136
|
#
|
133
137
|
# Example:
|
134
|
-
# >> rubygems =
|
138
|
+
# >> rubygems = RubyGems.new
|
135
139
|
# >> rubygems.needs_freshening?
|
136
140
|
# => true
|
137
141
|
#
|
@@ -142,7 +146,7 @@ class Freshener
|
|
142
146
|
# Freshen up the freshener!
|
143
147
|
#
|
144
148
|
# Example:
|
145
|
-
# >> rubygems =
|
149
|
+
# >> rubygems = RubyGems.new
|
146
150
|
# >> rubygems.freshen
|
147
151
|
# => nil
|
148
152
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freshen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nialto Services
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/freshen/system.rb
|
54
54
|
- lib/freshen/variables.rb
|
55
55
|
- lib/freshenary.rb
|
56
|
+
- lib/freshenary/status.rb
|
56
57
|
- lib/freshener.rb
|
57
58
|
homepage: http://rubygems.org/gems/freshen
|
58
59
|
licenses:
|