kelredd-useful 0.3.5 → 0.4.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.
data/Rakefile CHANGED
@@ -21,6 +21,7 @@ spec = Gem::Specification.new do |s|
21
21
 
22
22
  s.add_development_dependency("shoulda", [">= 2.10.2"])
23
23
  s.add_development_dependency("leftright", [">= 0.0.6"])
24
+ s.add_development_dependency("log4r", [">= 1.1.0"])
24
25
 
25
26
  s.add_dependency('json')
26
27
  end
@@ -0,0 +1,127 @@
1
+ module Useful; end
2
+ module Useful::RubyHelpers; end
3
+
4
+ require 'useful/ruby_extensions/object'
5
+
6
+ module Useful::RubyHelpers::Logger
7
+
8
+ module ClassMethods
9
+ def benchmark(*args, &block)
10
+ require 'benchmark'
11
+ name, msg, opts = handle_log_args(args)
12
+ result = nil
13
+ ms = Benchmark.measure { result = block.call }.real
14
+ name += ' ' unless name.empty?
15
+ name += '(%.1fms)' % [ms*1000]
16
+ log(name, msg, opts)
17
+ result
18
+ end
19
+
20
+ def log(*args)
21
+ name, msg, opts = handle_log_args(args)
22
+ opts[:level] ||= 'debug'
23
+ unless logger.respond_to?(opts[:level].to_s)
24
+ raise Exception, "no '#{opts[:level].to_s.upcase}' logger provided"
25
+ end
26
+ if name.empty? && msg.empty?
27
+ nil
28
+ else
29
+ returning formatted_log_msg(name, msg, opts) do |log_msg|
30
+ logger.send(opts[:level].to_s, log_msg)
31
+ end
32
+ end
33
+ end
34
+
35
+ [:debug, :info, :warn, :error].each do |level|
36
+ define_method(level) do |*args|
37
+ if args.last.kind_of?(::Hash)
38
+ args.last[:level] = level
39
+ else
40
+ args << {:level => level}
41
+ end
42
+ log(*args)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def logger
49
+ raise Exception, "to use these logging features, override the self.logger method and provide a log4r-style logger"
50
+ end
51
+
52
+ def formatted_log_msg(name, msg, opts)
53
+ opts[:newlines] ||= 0
54
+ opts[:color] = true if opts[:color].nil?
55
+ opts[:prefix] ||= case opts[:level].to_s
56
+ when 'info'
57
+ "*" # green
58
+ when 'warn'
59
+ "~" # cyan
60
+ when 'error'
61
+ "!" # red
62
+ else # debug
63
+ "-"
64
+ end
65
+ color_level = opts[:color] ? opts[:level].to_s : 'none'
66
+ color = case color_level
67
+ when 'debug'
68
+ "33;1" # yellow
69
+ when 'info'
70
+ "32;1" # green
71
+ when 'warn'
72
+ "36;1" # cyan
73
+ when 'error'
74
+ "31;1" # red
75
+ else
76
+ # white
77
+ "0"
78
+ end
79
+ color_reg = "0;#{color}"
80
+ color_underlined = "4;#{color}"
81
+ "\e[0m#{"\n"*opts[:newlines].to_i.abs} \e[#{color_reg}m#{opts[:prefix]}\e[0m#{opts[:prefix].empty? ? '' : ' '}\e[#{color_underlined}m#{name}\e[0m#{name.empty? ? '' : ' '}#{msg}"
82
+ end
83
+
84
+ def handle_log_args(args)
85
+ case (the_args = args.flatten).length
86
+ when 3
87
+ the_args
88
+ when 2
89
+ if the_args.last.kind_of?(::Hash)
90
+ ["", the_args.first, the_args.last]
91
+ else
92
+ [the_args.first, the_args.last, {}]
93
+ end
94
+ when 0
95
+ ["", "", {}]
96
+ else
97
+ ["", the_args.first, {}]
98
+ end
99
+ end
100
+ end
101
+
102
+
103
+
104
+ module InstanceMethods
105
+ def benchmark(*args, &block)
106
+ self.class.send(:benchmark, *args, &block)
107
+ end
108
+
109
+ def log(*args)
110
+ self.class.send(:log, *args)
111
+ end
112
+
113
+ [:debug, :info, :warn, :error].each do |level|
114
+ define_method(level) do |*args|
115
+ self.class.send(level, *args)
116
+ end
117
+ end
118
+ end
119
+
120
+
121
+
122
+ def self.included(receiver)
123
+ receiver.extend ClassMethods
124
+ receiver.send :include, InstanceMethods
125
+ end
126
+
127
+ end
@@ -2,8 +2,8 @@ module Useful
2
2
  module Version
3
3
 
4
4
  MAJOR = 0
5
- MINOR = 3
6
- TINY = 5
5
+ MINOR = 4
6
+ TINY = 0
7
7
 
8
8
  def self.to_s # :nodoc:
9
9
  [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kelredd-useful
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 5
10
- version: 0.3.5
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-28 00:00:00 -05:00
18
+ date: 2010-08-30 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -51,9 +51,25 @@ dependencies:
51
51
  type: :development
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- name: json
54
+ name: log4r
55
55
  prerelease: false
56
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 19
62
+ segments:
63
+ - 1
64
+ - 1
65
+ - 0
66
+ version: 1.1.0
67
+ type: :development
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: json
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
57
73
  none: false
58
74
  requirements:
59
75
  - - ">="
@@ -63,7 +79,7 @@ dependencies:
63
79
  - 0
64
80
  version: "0"
65
81
  type: :runtime
66
- version_requirements: *id003
82
+ version_requirements: *id004
67
83
  description:
68
84
  email: kelly@kelredd.com
69
85
  executables: []
@@ -107,6 +123,7 @@ files:
107
123
  - lib/useful/ruby_extensions/true_class.rb
108
124
  - lib/useful/ruby_extensions.rb
109
125
  - lib/useful/ruby_extensions_with_activesupport.rb
126
+ - lib/useful/ruby_helpers/logger.rb
110
127
  - lib/useful/shoulda_macros/test_unit/classes.rb
111
128
  - lib/useful/shoulda_macros/test_unit/context.rb
112
129
  - lib/useful/shoulda_macros/test_unit/files.rb