critique 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/critique.rb CHANGED
@@ -9,16 +9,25 @@ module Critique
9
9
  base.extend(ClassMethods)
10
10
  end
11
11
 
12
- def profile(base)
12
+ def profile(*)
13
13
  yield
14
14
  end
15
15
 
16
16
  def disable!
17
- module_eval("def self.profile(base) ; yield ; end")
17
+ module_eval <<-RUBY, __FILE__, __LINE__+1
18
+ def self.profile(*)
19
+ yield
20
+ end
21
+ RUBY
22
+ @_enabled = false
18
23
  end
19
24
 
20
25
  def enable!
21
- module_eval("def self.profile(base, &block) ; Profiling.profile(base, 2, &block) ; end")
26
+ module_eval <<-RUBY, __FILE__, __LINE__+1
27
+ def self.profile(*args, &block)
28
+ Profiling.profile(*(args.insert(1,2)), &block)
29
+ end
30
+ RUBY
22
31
  @_enabled = true
23
32
  end
24
33
 
@@ -40,12 +49,12 @@ module Critique
40
49
  end
41
50
 
42
51
  module ClassMethods
43
- def critique(&block)
44
- Critique.profile(self, &block)
52
+ def critique(*args, &block)
53
+ Critique.profile(*([self] + args), &block)
45
54
  end
46
55
  end
47
56
 
48
- def critique(&block)
49
- Critique.profile(self, &block)
57
+ def critique(*args, &block)
58
+ Critique.profile(*([self] + args), &block)
50
59
  end
51
60
  end
@@ -1,12 +1,16 @@
1
1
  module Critique
2
2
  module Profiling
3
- def self.profile(base, caller_offset = 0)
4
- method_name = caller[caller_offset] =~ /`([^']*)'/ && $1
3
+ def self.profile(*args)
4
+ base = args.shift
5
+ offset = args.shift
6
+ interests = args
7
+
8
+ method_name = caller[offset] =~ /`([^']*)'/ && $1
5
9
  method_text = label_for(base, method_name)
6
10
 
7
- Profiler.enter(method_text)
11
+ Profiler.enter(method_text, interests)
8
12
  result = yield # (Profiler)
9
- Profiler.leave(method_text)
13
+ Profiler.leave(method_text, interests)
10
14
 
11
15
  result
12
16
  end
@@ -17,25 +21,28 @@ module Critique
17
21
  Critique.logger.info(['X', padding, message].join)
18
22
  end
19
23
 
20
- def enter(label)
24
+ def enter(label, interests)
21
25
  padding(:+)
26
+
22
27
  before = stack.push(system_usage.push(label)).last
28
+ found = (interests.map { |mod| [mod, ObjectSpace.each_object(mod).count].join(':') })
23
29
 
24
- info(([label, '-->', filler(label)] + pretty(before)).join(' '))
30
+ info(([label, '-->', filler(label)] + pretty(before, found)).join(' '))
25
31
  end
26
32
 
27
- def leave(label)
33
+ def leave(label, interests)
34
+ found = (interests.map { |mod| [mod, ObjectSpace.each_object(mod).count].join(':') })
28
35
  before = stack.pop
29
36
  after = system_usage
30
37
 
31
- info(([label, '<--', filler(label)] + pretty(after)).join(' '))
38
+ info(([label, '<--', filler(label)] + pretty(after, found)).join(' '))
32
39
 
33
40
  padding(:-)
34
41
  end
35
42
 
36
43
  private
37
44
 
38
- def pretty(stats, diff_with = nil)
45
+ def pretty(stats, interests, diff_with = nil)
39
46
  used = stats[0]
40
47
  free = stats[1]
41
48
  swap = stats[2]
@@ -44,6 +51,7 @@ module Critique
44
51
  sprintf("free: %.2f GB", free / conversion_gb),
45
52
  sprintf("swap: %.2f GB", swap / conversion_gb)
46
53
  ]
54
+ result << "interests: #{interests.join(', ')}" if interests.length > 0
47
55
 
48
56
  # WIP:
49
57
  # if diff_with
@@ -1,3 +1,3 @@
1
1
  module Critique
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: critique
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-24 00:00:00.000000000 Z
12
+ date: 2012-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &70169926773220 !ruby/object:Gem::Requirement
16
+ requirement: &70281239721440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70169926773220
24
+ version_requirements: *70281239721440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70169926772740 !ruby/object:Gem::Requirement
27
+ requirement: &70281239720960 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70169926772740
35
+ version_requirements: *70281239720960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70169926772280 !ruby/object:Gem::Requirement
38
+ requirement: &70281239720540 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70169926772280
46
+ version_requirements: *70281239720540
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rr
49
- requirement: &70169926771800 !ruby/object:Gem::Requirement
49
+ requirement: &70281239720040 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70169926771800
57
+ version_requirements: *70281239720040
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &70169926771340 !ruby/object:Gem::Requirement
60
+ requirement: &70281239719560 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70169926771340
68
+ version_requirements: *70281239719560
69
69
  description: critiques your code
70
70
  email:
71
71
  - corey@coolerator.net
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  version: '0'
109
109
  segments:
110
110
  - 0
111
- hash: -3723307256638907563
111
+ hash: 2381292961732916691
112
112
  requirements: []
113
113
  rubyforge_project:
114
114
  rubygems_version: 1.8.11