dlog 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.
- data/.gitignore +4 -0
- data/Rakefile +19 -0
- data/gem.yml +10 -0
- data/init.rb +3 -0
- data/lib/dlog.rb +238 -0
- data/script/console +5 -0
- data/test/test.rb +10 -0
- data/vex/gem.rake +36 -0
- data/vex/gem.rb +95 -0
- metadata +76 -0
data/.gitignore
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
load "#{File.dirname __FILE__}/vex/gem.rake"
|
2
|
+
|
3
|
+
task :default => :test
|
4
|
+
|
5
|
+
task :test do
|
6
|
+
sh "ruby test/test.rb"
|
7
|
+
end
|
8
|
+
|
9
|
+
task :rcov do
|
10
|
+
sh "cd test; rcov -o ../coverage -x ruby/.*/gems -x ^test.rb test.rb"
|
11
|
+
end
|
12
|
+
|
13
|
+
task :rdoc do
|
14
|
+
sh "rdoc -o doc/rdoc"
|
15
|
+
end
|
16
|
+
|
17
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext|
|
18
|
+
puts ext
|
19
|
+
load ext }
|
data/gem.yml
ADDED
data/init.rb
ADDED
data/lib/dlog.rb
ADDED
@@ -0,0 +1,238 @@
|
|
1
|
+
require "logger"
|
2
|
+
|
3
|
+
module Dlog
|
4
|
+
module Color
|
5
|
+
extend self
|
6
|
+
|
7
|
+
def color(id)
|
8
|
+
"\e[#{id}m"
|
9
|
+
end
|
10
|
+
|
11
|
+
RED = color 31
|
12
|
+
GREEN = color 32
|
13
|
+
YELLOW = color 33
|
14
|
+
BLUE = color 34
|
15
|
+
MAGENTA = color 35
|
16
|
+
CYAN = color 36
|
17
|
+
DARK_GREY = color "1;30"
|
18
|
+
LIGHT_RED = color "1;31"
|
19
|
+
LIGHT_GREEN = color "1;32"
|
20
|
+
LIGHT_YELLOW = color "1;33"
|
21
|
+
LIGHT_BLUE = color "1;34"
|
22
|
+
LIGHT_MAGENTA = color "1;35"
|
23
|
+
LIGHT_CYAN = color "1;36"
|
24
|
+
|
25
|
+
CLEAR = color 0
|
26
|
+
|
27
|
+
def error(msg); "#{LIGHT_RED}#{msg}#{CLEAR}"; end
|
28
|
+
def warn(msg); "#{LIGHT_YELLOW}#{msg}#{CLEAR}"; end
|
29
|
+
def info(msg); "#{GREEN}#{msg}#{CLEAR}"; end
|
30
|
+
def debug(msg); msg; end
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# The logger device.
|
35
|
+
def self.logger=(logger)
|
36
|
+
@logger = logger
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.logger
|
40
|
+
@logger ||= if defined?(RAILS_DEFAULT_LOGGER)
|
41
|
+
RAILS_DEFAULT_LOGGER
|
42
|
+
else
|
43
|
+
logger = Logger.new(STDERR)
|
44
|
+
logger.formatter = StderrFormatter
|
45
|
+
logger
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.log(severity, args, source_offset = 1)
|
50
|
+
msg = ""
|
51
|
+
was_string = true
|
52
|
+
args.map do |s|
|
53
|
+
msg += was_string ? " " : ", " unless msg.empty?
|
54
|
+
msg += ((was_string = s.is_a?(String)) ? s : s.inspect)
|
55
|
+
end
|
56
|
+
|
57
|
+
source = caller[source_offset]
|
58
|
+
msg = "#{release? ? rlog_caller(source) : dlog_caller(source)} #{msg}"
|
59
|
+
msg = Color.send severity, msg
|
60
|
+
|
61
|
+
logger = self.logger
|
62
|
+
logger.send severity, msg
|
63
|
+
|
64
|
+
if irb? && !log_to_stderr?
|
65
|
+
STDERR.puts msg
|
66
|
+
end
|
67
|
+
|
68
|
+
args.first
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.irb?
|
72
|
+
caller.detect do |s| s =~ /irb\/workspace.rb/ end != nil
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.log_to_stderr?
|
76
|
+
logdev = logger.instance_variable_get("@logdev")
|
77
|
+
logdev.dev == STDERR if logdev.respond_to?(:dev)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Logging formatter
|
81
|
+
module Formatter
|
82
|
+
# formatter#call is invoked with 4 arguments: severity, time, progname
|
83
|
+
# and msg for each log. Bear in mind that time is a Time and msg is an
|
84
|
+
# Object that user passed and it could not be a String.
|
85
|
+
def self.call(severity, time, progname, msg)
|
86
|
+
time.strftime("%Y-%m-%d %H:%M:%S #{severity}: #{msg}")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
module StderrFormatter
|
91
|
+
# formatter#call is invoked with 4 arguments: severity, time, progname
|
92
|
+
# and msg for each log. Bear in mind that time is a Time and msg is an
|
93
|
+
# Object that user passed and it could not be a String.
|
94
|
+
def self.call(severity, time, progname, msg)
|
95
|
+
"#{msg}\n"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# get a caller description, for release mode
|
101
|
+
def self.rlog_caller(source)
|
102
|
+
if source =~ /^(.*):(\d+)/
|
103
|
+
file, line = $1, $2
|
104
|
+
file, line = $1, $2
|
105
|
+
if file == "(irb)"
|
106
|
+
"[irb]:"
|
107
|
+
else
|
108
|
+
"[" + File.basename(file).sub(/\.[^\.]*$/, "") + "]:"
|
109
|
+
end
|
110
|
+
else
|
111
|
+
"[log]"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# get a caller description, for debug mode
|
117
|
+
def self.dlog_caller(source)
|
118
|
+
if source =~ /^(.*):(\d+)/
|
119
|
+
file, line = $1, $2
|
120
|
+
if file == "(irb)"
|
121
|
+
"[irb]:"
|
122
|
+
else
|
123
|
+
file = File.expand_path(file)
|
124
|
+
|
125
|
+
file.gsub!(ROOT, ".") or
|
126
|
+
file.gsub!(HOME, "~/")
|
127
|
+
|
128
|
+
"#{file}(#{line}):"
|
129
|
+
end
|
130
|
+
else
|
131
|
+
"[dlog]:"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
#
|
136
|
+
# The applications ROOT dir, to shorten the source line
|
137
|
+
ROOT = if defined?(RAILS_ROOT)
|
138
|
+
RAILS_ROOT
|
139
|
+
else
|
140
|
+
File.expand_path(Dir.getwd)
|
141
|
+
end
|
142
|
+
|
143
|
+
# The user's HOME dir, to shorten the source line
|
144
|
+
HOME = ENV["HOME"] + "/"
|
145
|
+
|
146
|
+
# -- dlog modi ------------------------------------------------------
|
147
|
+
|
148
|
+
@@mode = :debug
|
149
|
+
|
150
|
+
def self.release!(&block); set_mode :release, █ end
|
151
|
+
def self.debug!(&block); set_mode :debug, █ end
|
152
|
+
def self.quiet!(&block); set_mode :quiet, █ end
|
153
|
+
|
154
|
+
def self.release?; @@mode == :release; end
|
155
|
+
def self.debug?; @@mode == :debug; end
|
156
|
+
def self.quiet?; @@mode == :quiet; end
|
157
|
+
|
158
|
+
def self.set_mode(mode, &block)
|
159
|
+
if !block_given?
|
160
|
+
old = mode
|
161
|
+
else
|
162
|
+
old, @@mode = @@mode, mode
|
163
|
+
yield
|
164
|
+
end
|
165
|
+
ensure
|
166
|
+
@@mode = old
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.error(*args)
|
170
|
+
log :error, args
|
171
|
+
end
|
172
|
+
|
173
|
+
def self.warn(*args)
|
174
|
+
log :warn, args
|
175
|
+
end
|
176
|
+
|
177
|
+
def self.info(*args)
|
178
|
+
log :info, args
|
179
|
+
end
|
180
|
+
|
181
|
+
def self.debug(*args)
|
182
|
+
log :debug, args
|
183
|
+
end
|
184
|
+
|
185
|
+
module Nolog
|
186
|
+
extend self
|
187
|
+
|
188
|
+
def error(*args); args.first; end
|
189
|
+
def warn(*args); args.first; end
|
190
|
+
def info(*args); args.first; end
|
191
|
+
def debug(*args); args.first; end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
class Object
|
196
|
+
def dlog(*args)
|
197
|
+
quiet = Dlog.quiet? || Dlog.release?
|
198
|
+
|
199
|
+
if args.empty?
|
200
|
+
quiet ? Dlog::Nolog : Dlog
|
201
|
+
else
|
202
|
+
Dlog.log :info, args unless quiet
|
203
|
+
args.first
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def rlog(*args)
|
208
|
+
quiet = Dlog.quiet? || Dlog.release?
|
209
|
+
|
210
|
+
if args.empty?
|
211
|
+
quiet ? Dlog::Nolog : Dlog
|
212
|
+
else
|
213
|
+
Dlog.log :warn, args unless quiet
|
214
|
+
args.first
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def benchmark(*args, &block)
|
219
|
+
if Dlog.quiet?
|
220
|
+
return yield
|
221
|
+
end
|
222
|
+
|
223
|
+
start = Time.now
|
224
|
+
r = yield
|
225
|
+
args.push ": %3d msecs" % (1000 * (Time.now - start))
|
226
|
+
Dlog.log :warn, args
|
227
|
+
r
|
228
|
+
rescue
|
229
|
+
args.push ": exception raised after #{"%3d msecs" % (1000 * (Time.now - start)) }"
|
230
|
+
args.push :source => caller[0]
|
231
|
+
rlog *args
|
232
|
+
raise
|
233
|
+
end
|
234
|
+
|
235
|
+
private
|
236
|
+
|
237
|
+
def dlogger; nil; end
|
238
|
+
end
|
data/script/console
ADDED
data/test/test.rb
ADDED
data/vex/gem.rake
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
def sys(*args)
|
2
|
+
STDERR.puts "#{args.join(" ")}"
|
3
|
+
system *args
|
4
|
+
end
|
5
|
+
|
6
|
+
namespace :gem do
|
7
|
+
task :build => :spec do
|
8
|
+
options = []
|
9
|
+
sys "gem build .gemspec #{options.join(" ")} && mkdir -p pkg && mv *.gem pkg"
|
10
|
+
end
|
11
|
+
|
12
|
+
task :spec do
|
13
|
+
File.open ".gemspec", "w" do |file|
|
14
|
+
file.write <<-TXT
|
15
|
+
require "vex/gem"
|
16
|
+
Gem.spec File.dirname(__FILE__)
|
17
|
+
TXT
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
task :install => :build do
|
22
|
+
file = Dir.glob("pkg/*.gem").sort.last
|
23
|
+
sys "sudo gem install #{file}"
|
24
|
+
end
|
25
|
+
|
26
|
+
task :push => :build do
|
27
|
+
file = Dir.glob("pkg/*.gem").sort.last
|
28
|
+
puts "To push the gem to gemcutter please run"
|
29
|
+
puts
|
30
|
+
puts "\tgem push #{file}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Build gem"
|
35
|
+
# task :gem => %w(test gem:install)
|
36
|
+
task :gem => %w(gem:install gem:push)
|
data/vex/gem.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
module Gem
|
2
|
+
(class << self; self; end).class_eval do
|
3
|
+
def default_attributes
|
4
|
+
%w(name version date files executables)
|
5
|
+
end
|
6
|
+
|
7
|
+
def set_root(root)
|
8
|
+
@root = File.expand_path(root)
|
9
|
+
@name = File.basename(@root)
|
10
|
+
@conf ||= YAML.load File.read("#{@root}/gem.yml")
|
11
|
+
@attributes ||= (default_attributes + @conf.keys.map(&:to_s)).uniq
|
12
|
+
end
|
13
|
+
|
14
|
+
# attr_reader :root, :conf, :attributes,
|
15
|
+
attr_reader :name
|
16
|
+
|
17
|
+
def attribute(name)
|
18
|
+
if @conf.key?(name) && !%w(dependencies).include?(name)
|
19
|
+
@conf[name]
|
20
|
+
else
|
21
|
+
self.send(name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# create a new Gem::Specification object for this gem.
|
27
|
+
def spec(root)
|
28
|
+
self.set_root root
|
29
|
+
|
30
|
+
Gem::Specification.new do |s|
|
31
|
+
@attributes.each do |attr|
|
32
|
+
v = attribute(attr)
|
33
|
+
next if v.nil?
|
34
|
+
|
35
|
+
log attr, v
|
36
|
+
|
37
|
+
s.send attr + "=", v
|
38
|
+
end
|
39
|
+
|
40
|
+
%w(pre_uninstall post_install).each do |hook|
|
41
|
+
next unless File.exists?("#{root}/hooks/#{hook}.rb")
|
42
|
+
log hook, "yes"
|
43
|
+
Gem.send(hook) {
|
44
|
+
load "hooks/#{hook}.rb"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def log(attr, v)
|
51
|
+
v = case attr
|
52
|
+
when "files" then "#{v.length} files"
|
53
|
+
else v.inspect
|
54
|
+
end
|
55
|
+
|
56
|
+
STDERR.puts "#{"%20s" % attr}:\t#{v}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def dependencies
|
60
|
+
return nil unless @conf["dependencies"]
|
61
|
+
|
62
|
+
@conf["dependencies"].map do |d|
|
63
|
+
Gem::Dependency.new d, ">= 0"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def head(file)
|
68
|
+
File.open(file) do |f|
|
69
|
+
f.readline
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def executables
|
74
|
+
r = Dir.glob("#{@root}/bin/**/*").map do |file|
|
75
|
+
next unless head(file) =~ /^#!/
|
76
|
+
file[@root.length + 5 .. -1]
|
77
|
+
end.compact
|
78
|
+
|
79
|
+
return nil if r.empty?
|
80
|
+
r
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# get files from git
|
85
|
+
def files
|
86
|
+
r = `git ls-files`.split("\n")
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# return the date
|
91
|
+
def date
|
92
|
+
Date.today.to_s
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dlog
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 15
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: "0.2"
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- pboy
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-07-29 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: |
|
22
|
+
A logging library mainly for development purposes.
|
23
|
+
|
24
|
+
email: eno-pboy@open-lab.org
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Rakefile
|
34
|
+
- gem.yml
|
35
|
+
- init.rb
|
36
|
+
- lib/dlog.rb
|
37
|
+
- script/console
|
38
|
+
- test/test.rb
|
39
|
+
- vex/gem.rake
|
40
|
+
- vex/gem.rb
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: http://github.com/pboy/dlog
|
43
|
+
licenses: []
|
44
|
+
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
hash: 3
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
hash: 3
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.3.7
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: "{d,r}log"
|
75
|
+
test_files: []
|
76
|
+
|