scriptster 0.0.2 → 0.1.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
  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: []