scriptster 0.0.2 → 0.1.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
  SHA1:
3
- metadata.gz: 3ff178ac24fe6fe8fb4f9eb396e39cb7b4a1cc1e
4
- data.tar.gz: c15498f312425b65f839202d4819e25a2b32d3db
3
+ metadata.gz: 717f92265d71abf28271c0da1d1c743d642d7c0d
4
+ data.tar.gz: b7c73d085a0686d41f40a18649264f9396515bc8
5
5
  SHA512:
6
- metadata.gz: e9a2fbf770f6a418a62ea92c8e33bbd996149a7f5be5da75b2874f979e1a94a1f3eecfa5721c09eaa080c0ef7ddd47a5aacd4c2bea734f384085c59d5e3952a5
7
- data.tar.gz: 2ef139f858f2d6b791f2873ce4990ee8e8b1157dd1c398c3318062a25985b5905b2ae0cb2c67b1f53b17ac126e345f70c4d9f7e8d13b439df141507328a7c42c
6
+ metadata.gz: be02f5207e7ea2e71c87e1543628f9ffe40514ee72960e696af84e3277d4d7f780d544af1ec063195a39f4401bec540c1d0b98ed4a251436a92a368f37da2c17
7
+ data.tar.gz: f623e30ac8bf6ab3c371fb720c741770f96902787f5b02ad73c8b6790a10aad47ff537bbf9edf5e46089887d3a9d85c23645f45c3cd796d2fde787ad2be207ba
data/lib/scriptster.rb CHANGED
@@ -1,4 +1,4 @@
1
- # scriptster - A small library to make your scipts nicer
1
+ # scriptster - A small library to make your scipts a bit nicer
2
2
  # Copyright (c) 2014 Radek Pazdera
3
3
 
4
4
  # MIT License
@@ -23,24 +23,28 @@
23
23
  require "scriptster/version"
24
24
  require "scriptster/logger"
25
25
  require "scriptster/shellcmd"
26
+ require "scriptster/configuration"
26
27
 
27
28
  module Scriptster
28
- class << self
29
- include Logger
29
+ def self.log(*args)
30
+ Logger::log *args
30
31
  end
31
32
 
32
- def self.configure
33
- c = {
34
- :name => "scriptster",
35
- :verbosity => :informative,
36
- :file => nil,
37
- :time => true
38
- }
33
+ def log(*args)
34
+ Logger::log *args
35
+ end
39
36
 
40
- yield c
37
+ def self.cmd(*args)
38
+ ShellCmd.new *args
39
+ end
41
40
 
42
- Logger.set_script_name c[:name]
43
- Logger.set_verbosity c[:verbosity]
44
- Logger.set_file c[:file]
41
+ def cmd(*args)
42
+ ShellCmd.new *args
43
+ end
44
+
45
+ def self.configure
46
+ c = Configuration.new
47
+ yield c
48
+ c.apply
45
49
  end
46
50
  end
@@ -0,0 +1,184 @@
1
+ # scriptster - A small library to make your scipts a bit nicer
2
+ # Copyright (c) 2014 Radek Pazdera
3
+
4
+ # MIT License
5
+
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+
23
+ require "scriptster/logger"
24
+ require "scriptster/shellcmd"
25
+
26
+ module Scriptster
27
+ class Configuration
28
+ attr_writer :name, :verbosity, :file, :timestamps, :scheme
29
+
30
+ def initialize
31
+ @name = File.basename($0)
32
+ @verbosity = :verbose
33
+ @file = nil
34
+ @timestamps = true
35
+ @scheme = :dark
36
+ end
37
+
38
+ # Put the settings from this object in effect
39
+ def apply
40
+ Logger.set_name @name if @name
41
+ Logger.set_verbosity @verbosity if @verbosity
42
+ Logger.set_file @file if @file
43
+ Logger.show_timestamps if @timestamps
44
+
45
+ ColourSchemes.send @scheme
46
+ end
47
+ end
48
+
49
+ module ColourSchemes
50
+ def self.dark
51
+ Tco::configure do |conf|
52
+ conf.names["green"] = "#99ad6a"
53
+ conf.names["yellow"] = "#d8ad4c"
54
+ conf.names["red"] = "#cc333f"
55
+ conf.names["light-grey"] = "#ababab"
56
+ conf.names["medium-grey"] = "#444444"
57
+ conf.names["dark-grey"] = "#2b2b2b"
58
+ conf.names["purple"] = "#90559e"
59
+ conf.names["blue"] = "#4d9eeb"
60
+ conf.names["orange"] = "#ff842a"
61
+
62
+ conf.styles["info"] = {
63
+ :fg => "green", :bg => "dark-grey",
64
+ :bright => false, :underline => false
65
+ }
66
+ conf.styles["info-message"] = {
67
+ :fg => "default", :bg => "default",
68
+ :bright => false, :underline => false
69
+ }
70
+
71
+ conf.styles["warn"] = {
72
+ :fg => "dark-grey", :bg => "yellow",
73
+ :bright => false, :underline => false
74
+ }
75
+ conf.styles["warn-message"] = {
76
+ :fg => "default", :bg => "default",
77
+ :bright => false, :underline => false
78
+ }
79
+
80
+ conf.styles["err"] = {
81
+ :fg => "dark-grey", :bg => "red",
82
+ :bright => false, :underline => false
83
+ }
84
+ conf.styles["err-message"] = {
85
+ :fg => "default", :bg => "default",
86
+ :bright => false, :underline => false
87
+ }
88
+
89
+ conf.styles["debug"] = {
90
+ :fg => "light-grey", :bg => "dark-grey",
91
+ :bright => false, :underline => false
92
+ }
93
+ conf.styles["debug-message"] = {
94
+ :fg => "medium-grey", :bg => "default",
95
+ :bright => false, :underline => false
96
+ }
97
+
98
+ conf.styles["name"] = {
99
+ :fg => "purple", :bg => "dark-grey",
100
+ :bright => false, :underline => false
101
+ }
102
+ conf.styles["highlight"] = {
103
+ :fg => "orange", :bg => "default",
104
+ :bright => false, :underline => false
105
+ }
106
+ conf.styles["cmd"] = {
107
+ :fg => "blue", :bg => "dark-grey",
108
+ :bright => false, :underline => false
109
+ }
110
+ conf.styles["timestamp"] = {
111
+ :fg => "medium-grey", :bg => "default",
112
+ :bright => false, :underline => false
113
+ }
114
+ end
115
+ end
116
+
117
+ def self.light
118
+ Tco::configure do |conf|
119
+ conf.names["green"] = "#99ad6a"
120
+ conf.names["yellow"] = "#d8ad4c"
121
+ conf.names["red"] = "#cc333f"
122
+ conf.names["light-grey"] = "#eeeeee"
123
+ conf.names["medium-grey"] = "#cccccc"
124
+ conf.names["dark-grey"] = "#2b2b2b"
125
+ conf.names["purple"] = "#90559e"
126
+ conf.names["blue"] = "#4d9eeb"
127
+ conf.names["orange"] = "#ff842a"
128
+
129
+ conf.styles["info"] = {
130
+ :fg => "green", :bg => "default",
131
+ :bright => false, :underline => false
132
+ }
133
+ conf.styles["info-message"] = {
134
+ :fg => "default", :bg => "default",
135
+ :bright => false, :underline => false
136
+ }
137
+
138
+ conf.styles["warn"] = {
139
+ :fg => "dark-grey", :bg => "yellow",
140
+ :bright => false, :underline => false
141
+ }
142
+ conf.styles["warn-message"] = {
143
+ :fg => "default", :bg => "default",
144
+ :bright => false, :underline => false
145
+ }
146
+
147
+ conf.styles["err"] = {
148
+ :fg => "dark-grey", :bg => "red",
149
+ :bright => false, :underline => false
150
+ }
151
+ conf.styles["err-message"] = {
152
+ :fg => "default", :bg => "default",
153
+ :bright => false, :underline => false
154
+ }
155
+
156
+ conf.styles["debug"] = {
157
+ :fg => "dark-grey", :bg => "default",
158
+ :bright => false, :underline => false
159
+ }
160
+ conf.styles["debug-message"] = {
161
+ :fg => "medium-grey", :bg => "default",
162
+ :bright => false, :underline => false
163
+ }
164
+
165
+ conf.styles["name"] = {
166
+ :fg => "purple", :bg => "light-grey",
167
+ :bright => false, :underline => false
168
+ }
169
+ conf.styles["highlight"] = {
170
+ :fg => "orange", :bg => "default",
171
+ :bright => false, :underline => false
172
+ }
173
+ conf.styles["cmd"] = {
174
+ :fg => "blue", :bg => "light-grey",
175
+ :bright => false, :underline => false
176
+ }
177
+ conf.styles["timestamp"] = {
178
+ :fg => "medium-grey", :bg => "default",
179
+ :bright => false, :underline => false
180
+ }
181
+ end
182
+ end
183
+ end
184
+ end
@@ -1,4 +1,4 @@
1
- # scriptster - A small library to make your scipts nicer
1
+ # scriptster - A small library to make your scipts a bit nicer
2
2
  # Copyright (c) 2014 Radek Pazdera
3
3
 
4
4
  # MIT License
@@ -23,78 +23,35 @@
23
23
 
24
24
  require "tco"
25
25
 
26
- Tco::configure do |conf|
27
- conf.names["green"] = "#99ad6a"
28
- conf.names["yellow"] = "#d8ad4c"
29
- conf.names["red"] = "#cc333f"
30
- conf.names["light-grey"] = "#ababab"
31
- conf.names["dark-grey"] = "#2b2b2b"
32
- conf.names["purple"] = "#90559e"
33
- conf.names["blue"] = "#4D9EEB"
34
- conf.names["orange"] = "#ff842a"
35
- conf.names["brown"] = "#6a4a3c"
36
-
37
- conf.styles["info"] = {
38
- :fg => "green",
39
- :bg => "dark-grey",
40
- :bright => false,
41
- :underline => false
42
- }
43
- conf.styles["warn"] = {
44
- :fg => "dark-grey",
45
- :bg => "yellow",
46
- :bright => false,
47
- :underline => false
48
- }
49
- conf.styles["err"] = {
50
- :fg => "dark-grey",
51
- :bg => "red",
52
- :bright => false,
53
- :underline => false
54
- }
55
- conf.styles["debug"] = {
56
- :fg => "light-grey",
57
- :bg => "dark-grey",
58
- :bright => false,
59
- :underline => false
60
- }
61
-
62
- conf.styles["script-name"] = {
63
- :fg => "purple",
64
- :bg => "dark-grey",
65
- :bright => false,
66
- :underline => false
67
- }
68
- end
69
-
70
26
  module Scriptster
71
27
  module Logger
72
- @@script_name = "scriptster"
28
+ @@name = nil
73
29
  @@file = nil
74
- @@time = false
30
+ @@timestamps = false
75
31
 
76
32
  @@message_types = {
77
33
  :info => "info",
78
- :warn => "warn",
79
- :err => "err",
80
- :debug => "debug"
34
+ :warn => "WARN",
35
+ :err => "ERR!",
36
+ :debug => "dbg?"
81
37
  }
82
38
 
83
39
  @@verbosity = :verbose
84
- @@logger_verbosity_levels = {
85
- :essential => 0,
86
- :important => 1,
87
- :informative => 2,
88
- :verbose => 3
40
+ @@verbosity_levels = {
41
+ :quiet => 0,
42
+ :essential => 1,
43
+ :important => 2,
44
+ :informative => 3,
45
+ :verbose => 4
89
46
  }
90
47
 
91
- def self.set_script_name(name)
92
- @@script_name = name
48
+ def self.set_name(name)
49
+ @@name = name
93
50
  end
94
51
 
95
52
  def self.set_verbosity(level)
96
53
  msg = "Message verbosity level not recognised (#{})."
97
- raise msg unless @@logger_verbosity_levels.has_key? level.to_sym
54
+ raise msg unless @@verbosity_levels.has_key? level.to_sym
98
55
 
99
56
  @@verbosity = level.to_sym
100
57
  end
@@ -102,54 +59,45 @@ module Scriptster
102
59
  def self.set_file(file)
103
60
  @@file.close if @@file
104
61
  @@file = nil
105
- @@file = File.open file, "w" if @@file
62
+ @@file = File.open file, "w" if file
106
63
  end
107
64
 
108
- def self.set_time(time_enabled)
109
- @@time = time_enabled
65
+ def self.show_timestamps
66
+ @@timestamps = true
110
67
  end
111
68
 
112
- def self.log(msg_type, msg, verbosity=nil)
113
- now = Time.now.strftime "%Y-%m-%d %H-%M "
114
- out = now + @@script_name.style("script-name") << " "
115
- file = now + @@script_name + " "
116
-
117
- case msg_type
118
- when :info
119
- out << "info".style(@@message_types[:info])
120
- file << "info"
121
- verbosity = :informative unless verbosity
122
- when :warn
123
- out << "WARN".style(@@message_types[:warn])
124
- file << "WARN"
125
- verbosity = :informative unless verbosity
126
- when :err
127
- out << "ERR!".style(@@message_types[:err])
128
- file << "ERR!"
129
- verbosity = :essential unless verbosity
130
- when :debug
131
- out << "dbg?".style(@@message_types[:debug])
132
- file << "dbg?"
133
- verbosity = :verbose unless verbosity
134
- end
135
-
136
- if verbosity <= @@verbosity
137
- out << " " << msg.chomp
138
- puts out
69
+ def self.log(msg_type, msg, verbosity=:informative)
70
+ if @@verbosity_levels[verbosity] <= @@verbosity_levels[@@verbosity]
71
+ ts = if @@timestamps
72
+ Time.now.strftime("%Y-%m-%d %H:%M").style("timestamp") + " "
73
+ else
74
+ ""
75
+ end
76
+
77
+ name = if @@name != nil && @@name.length > 0
78
+ @@name.style("name") + " "
79
+ else
80
+ ""
81
+ end
82
+
83
+ msg.chomp!
84
+ msg = Tco::parse msg, Tco::get_style("#{msg_type.to_s}-message")
85
+
86
+ line = ts << name.style("name") <<
87
+ @@message_types[msg_type].style(msg_type.to_s) <<
88
+ " " << msg
89
+ puts line
139
90
  STDOUT.flush
140
91
 
141
- # Strip colours from the message before writing to a file
142
- file << " " << msg.chomp.gsub(/\033\[[0-9]+(;[0-9]+){0,2}m/, "")
143
- @@file.puts file if @@file
92
+ if @@file
93
+ # Strip colours from the message before writing to a file
94
+ @@file.puts line.gsub(/\033\[[0-9]+(;[0-9]+){0,2}m/, "")
95
+ end
144
96
  end
145
97
  end
146
98
 
147
- def log(msg_type, msg, verbosity=nil)
148
- Logger::log msg_type, msg
149
- end
150
-
151
- def tag(tag, msg)
152
- tag.fg("blue").bg("dark-grey") << " " << msg
99
+ def log(msg_type, msg, verbosity=:informative)
100
+ Logger::log msg_type, msg, verbosity
153
101
  end
154
102
  end
155
103
  end
@@ -1,4 +1,4 @@
1
- # scriptster - A small library to make your scipts nicer
1
+ # scriptster - A small library to make your scipts a bit nicer
2
2
  # Copyright (c) 2014 Radek Pazdera
3
3
 
4
4
  # MIT License
@@ -37,8 +37,8 @@ module Scriptster
37
37
 
38
38
  @show_out = false
39
39
  @show_err = true
40
- @raise_on_error = true
41
- @tag = "shell"
40
+ @raise = true
41
+ @tag = cmd.split[0]
42
42
  @expect = 0
43
43
 
44
44
  opts.each do |k, v|
@@ -54,45 +54,46 @@ module Scriptster
54
54
  private
55
55
  def run
56
56
  Open3.popen3(@cmd) do |stdin, stdout, stderr, wait_thr|
57
- pid = wait_thr.pid
58
-
59
57
  stdout_buffer=""
60
58
  stderr_buffer=""
61
59
 
62
- begin
63
- loop do
64
- IO.select([stdout,stderr]).flatten.compact.each do |io|
65
- stdout_buffer += io.readpartial(1) if io.fileno == stdout.fileno
66
- stderr_buffer += io.readpartial(1) if io.fileno == stderr.fileno
60
+ streams = [stdout, stderr]
61
+ while streams.length > 0
62
+ IO.select(streams).flatten.compact.each do |io|
63
+ if io.eof?
64
+ streams.delete io
65
+ next
67
66
  end
68
- break if stdout.closed? && stderr.closed?
69
-
70
- stdout_buffer.sub!(/.*\n/m) do
71
- @out += $&
72
- if @show_out
73
- $&.strip.split("\n").each do |line|
74
- line = tag(@tag, line) if @tag
75
- log(:info, line)
76
- end
77
- end
78
67
 
79
- ''
80
- end
68
+ stdout_buffer += io.readpartial(1) if io.fileno == stdout.fileno
69
+ stderr_buffer += io.readpartial(1) if io.fileno == stderr.fileno
70
+ end
81
71
 
82
- stderr_buffer.sub!(/.*\n/m) do
83
- @err += $&
84
- if @show_err
85
- $&.strip.split("\n").each do |line|
86
- line = tag(@tag, line) if @tag
87
- log(:err, line)
88
- end
72
+ # Remove and process all the finished lines from the output buffer
73
+ stdout_buffer.sub!(/.*\n/m) do
74
+ @out += $&
75
+ if @show_out
76
+ $&.strip.split("\n").each do |line|
77
+ line = @tag.style("cmd") + " " + line if @tag
78
+ log(:info, line)
89
79
  end
80
+ end
90
81
 
91
- ''
82
+ ''
83
+ end
84
+
85
+ # Remove and process all the finished lines from the error buffer
86
+ stderr_buffer.sub!(/.*\n/m) do
87
+ @err += $&
88
+ if @show_err
89
+ $&.strip.split("\n").each do |line|
90
+ line = @tag.style("cmd") + " " + line if @tag
91
+ log(:err, line)
92
+ end
92
93
  end
94
+
95
+ ''
93
96
  end
94
- rescue EOFError
95
- ;
96
97
  end
97
98
 
98
99
  @status = wait_thr.value
@@ -103,11 +104,11 @@ module Scriptster
103
104
  unless @show_err
104
105
  err_lines = @err.split "\n"
105
106
  err_lines.each do |l|
106
- l = tag(@tag, l.fg("red")) if @tag
107
+ l = @tag.style("cmd") + " " + l if @tag
107
108
  log(:err, l.chomp)
108
109
  end
109
110
  end
110
- raise "'#{@cmd}' failed!".fg("red") if @raise_on_error
111
+ raise "'#{@cmd}' failed!" if @raise
111
112
  end
112
113
  end
113
114
  end
@@ -1,3 +1,3 @@
1
1
  module Scriptster
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
data/scriptster.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Scriptster::VERSION
9
9
  spec.authors = ["Radek Pazdera"]
10
10
  spec.email = ["radek@pazdera.co.uk"]
11
- spec.summary = %q{Make your Ruby scipts hip.}
11
+ spec.summary = %q{Making your Ruby scipts hip.}
12
12
  spec.description = %q{A simple library for making your scipts a bit nicer.}
13
13
  spec.homepage = "https://github.com/pazdera/scriptster"
14
14
  spec.license = "MIT"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scriptster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Radek Pazdera
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-23 00:00:00.000000000 Z
11
+ date: 2014-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tco
@@ -65,6 +65,7 @@ files:
65
65
  - README.md
66
66
  - Rakefile
67
67
  - lib/scriptster.rb
68
+ - lib/scriptster/configuration.rb
68
69
  - lib/scriptster/logger.rb
69
70
  - lib/scriptster/shellcmd.rb
70
71
  - lib/scriptster/version.rb
@@ -92,5 +93,5 @@ rubyforge_project:
92
93
  rubygems_version: 2.2.2
93
94
  signing_key:
94
95
  specification_version: 4
95
- summary: Make your Ruby scipts hip.
96
+ summary: Making your Ruby scipts hip.
96
97
  test_files: []