rubyperf 1.3.7 → 1.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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.7
1
+ 1.4.0
@@ -1,4 +1,5 @@
1
1
  require "rubyperf"
2
+ require "singleton"
2
3
 
3
4
  module Perf
4
5
 
@@ -9,14 +10,10 @@ module Perf
9
10
  # either creating a factory that fulfills your needs, or create Perf::Meter objects and pass them around or use
10
11
  # this factory will well planned out key values so that you won't have conflicts and overrides.
11
12
  #
12
- # MeterFactory works keeping a global cache of Perf::Meter objects by key. Multiple independent parts
13
- # of your code using this factory could get into trouble and trample on each other if they use the same key, or the
14
- # default key.
15
- #
16
13
  # Example of usage where it would be inconvenient to pass around the Perf::Meter object from example to function2:
17
14
  #
18
15
  # def example
19
- # Perf::MeterFactory.get.measure(:function1)
16
+ # Perf::MeterFactory.instance.get.measure(:function1)
20
17
  # function1()
21
18
  # end
22
19
  # end
@@ -29,7 +26,7 @@ module Perf
29
26
  #
30
27
  # def function2()
31
28
  # ..
32
- # Perf::MeterFactory.get.measure(:some_hot_code_in_function2)
29
+ # Perf::MeterFactory.instance.get.measure(:some_hot_code_in_function2)
33
30
  # ...
34
31
  # end
35
32
  # ..
@@ -37,87 +34,86 @@ module Perf
37
34
  #
38
35
 
39
36
  class MeterFactory
37
+ include Singleton
40
38
 
41
39
  DEFAULT_METER = :default
42
40
 
43
- @@perf_meters = nil
44
- @@new_meter_options = {}
45
- @@factory_options = {:noop=>false}
41
+ def initialize
42
+ @perf_meters = {}
43
+ @new_meter_options = {}
44
+ @factory_options = {:noop=>false}
45
+ end
46
46
 
47
47
  # Returns a Perf::Meter with a given key, and creates it lazily if it doesn't exist'.
48
48
  # NOTE: The options are set ONLY the first time that get is called on a specific key.
49
49
  # After that the options will be ignored!
50
50
 
51
- def self.get(key=DEFAULT_METER,new_meter_options=nil)
52
- @@perf_meters ||= {}
53
- if !@@factory_options[:noop]
51
+ def get(key=DEFAULT_METER,new_meter_options=nil)
52
+ if !@factory_options[:noop]
54
53
  # Creates a real meter
55
- @@perf_meters[key] ||= Perf::Meter.new(new_meter_options || @@new_meter_options)
54
+ @perf_meters[key] ||= Perf::Meter.new(new_meter_options || @new_meter_options)
56
55
  else
57
56
  # If noop is set, creates a no-nop version of the meter, unless a meter with this key has already been
58
57
  # created.
59
- @@perf_meters[key] ||= Perf::NoOpMeter.new
58
+ @perf_meters[key] ||= Perf::NoOpMeter.new
60
59
  end
61
60
  end
62
61
 
63
62
  # meter is like get, but if the meter doesn't already exists it returns a NoOpMeter. You can use this every time
64
63
  # that you want "somebody else" make the decision of what meter to use.
65
64
 
66
- def self.meter(key=DEFAULT_METER)
67
- @@perf_meters ||= {}
68
- @@perf_meters[key] ||= Perf::NoOpMeter.new
65
+ def meter(key=DEFAULT_METER)
66
+ @perf_meters[key] ||= Perf::NoOpMeter.new
69
67
  end
70
68
 
71
69
  # To set options for new meters created by get, when specific options are not passed, you can do so with this
72
70
  # method.
73
71
 
74
- def self.set_new_meters_options(options)
75
- @@new_meter_options.merge(options)
72
+ def set_new_meters_options(options)
73
+ @new_meter_options.merge(options)
76
74
  end
77
75
 
78
76
  # Set options for the factory behaviour.
79
77
 
80
- def self.set_factory_options(options)
81
- @@factory_options.merge!(options)
78
+ def set_factory_options(options)
79
+ @factory_options.merge!(options)
82
80
  end
83
81
 
84
82
  # If you use set_new_meters_options, or if you pass options to Perf::MeterFactory.get, you are setting options
85
83
  # only for if the meter is created. For this reason you might need to find out if the meter already exist.
86
84
 
87
85
  def exists?(key=DEFAULT_METER)
88
- !@@perf_meters[key].nil?
86
+ !@perf_meters[key].nil?
89
87
  end
90
88
 
91
89
  # Pushes a Perf::Meter into a key
92
90
 
93
- def self.set_meter(key,meter)
94
- @@perf_meters ||= {}
95
- @@perf_meters[key]=meter
91
+ def set_meter(key,meter)
92
+ @perf_meters[key]=meter
96
93
  end
97
94
 
98
95
  # Sets the default meter.
99
96
 
100
- def self.set_default(meter)
97
+ def set_default(meter)
101
98
  set_meter(DEFAULT_METER,meter)
102
99
  end
103
100
 
104
101
  # Returns a hash of existing meters.
105
102
 
106
- def self.all
107
- @@perf_meters ||= {}
108
- return @@perf_meters.clone
103
+ def all
104
+ @perf_meters.dup
109
105
  end
110
106
 
111
107
  # Removes an existing meter from the cache
112
108
 
113
- def self.clear_meter(key=DEFAULT_METER)
114
- @@perf_meters.delete(key) if @@perf_meters
109
+ def clear_meter(key=DEFAULT_METER)
110
+ @perf_meters.delete(key) if @perf_meters
115
111
  end
116
112
 
117
113
  # Clears the entire cache of meters.
118
114
 
119
- def self.clear_all!
120
- @@perf_meters=nil
115
+ def clear_all!
116
+ @perf_meters.clear
121
117
  end
122
118
 
123
119
  end
data/rubyperf.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rubyperf}
8
- s.version = "1.3.7"
8
+ s.version = "1.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["lpasqualis"]
12
- s.date = %q{2012-01-18}
12
+ s.date = %q{2012-01-19}
13
13
  s.description = %q{Used to easily measure the performance of blocks of Ruby code, expressions and methods; provides reporting in various formats}
14
14
  s.email = %q{lpasqualis@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -43,14 +43,13 @@ Gem::Specification.new do |s|
43
43
  s.homepage = %q{http://github.com/lpasqualis/rubyperf}
44
44
  s.licenses = ["MIT"]
45
45
  s.require_paths = ["lib"]
46
- s.rubygems_version = %q{1.3.6}
46
+ s.rubygems_version = %q{1.4.2}
47
47
  s.summary = %q{rubyperf helps you measure ruby code performance}
48
48
 
49
49
  if s.respond_to? :specification_version then
50
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
51
50
  s.specification_version = 3
52
51
 
53
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
53
  s.add_development_dependency(%q<shoulda>, [">= 0"])
55
54
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
56
55
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
@@ -10,17 +10,17 @@ require 'perf_test_example'
10
10
  class TestMeterFactory < Test::Unit::TestCase
11
11
 
12
12
  def setup()
13
- Perf::MeterFactory.clear_all!
13
+ Perf::MeterFactory.instance.clear_all!
14
14
  end
15
15
 
16
16
  def teardown()
17
- Perf::MeterFactory.clear_all!
18
- Perf::MeterFactory.set_factory_options(:noop=>false)
17
+ Perf::MeterFactory.instance.clear_all!
18
+ Perf::MeterFactory.instance.set_factory_options(:noop=>false)
19
19
  end
20
20
 
21
21
  def test_noop
22
- Perf::MeterFactory.set_factory_options(:noop=>true)
23
- m1=Perf::MeterFactory.get()
22
+ Perf::MeterFactory.instance.set_factory_options(:noop=>true)
23
+ m1=Perf::MeterFactory.instance.get()
24
24
  assert m1.is_a? Perf::NoOpMeter
25
25
  m1.measure(:something) do
26
26
  # ...
@@ -29,18 +29,18 @@ class TestMeterFactory < Test::Unit::TestCase
29
29
  end
30
30
 
31
31
  def test_meter
32
- m=Perf::MeterFactory.meter
32
+ m=Perf::MeterFactory.instance.meter
33
33
  assert m.is_a? Perf::NoOpMeter
34
34
 
35
- Perf::MeterFactory.clear_all!
36
- m=Perf::MeterFactory.get
37
- m=Perf::MeterFactory.meter
35
+ Perf::MeterFactory.instance.clear_all!
36
+ m=Perf::MeterFactory.instance.get
37
+ m=Perf::MeterFactory.instance.meter
38
38
  assert m.is_a? Perf::Meter
39
39
  end
40
40
 
41
41
  def test_noop2
42
- Perf::MeterFactory.set_factory_options(:noop=>true)
43
- m=Perf::MeterFactory.get()
42
+ Perf::MeterFactory.instance.set_factory_options(:noop=>true)
43
+ m=Perf::MeterFactory.instance.get()
44
44
  assert m.is_a? Perf::NoOpMeter
45
45
  m.measure(:string_operations) do
46
46
  m.measure(:ciao) do
@@ -88,9 +88,9 @@ class TestMeterFactory < Test::Unit::TestCase
88
88
  end
89
89
 
90
90
  def test_basic
91
- Perf::MeterFactory.clear_all!
92
- m1=Perf::MeterFactory.get()
93
- m2=Perf::MeterFactory.get()
91
+ Perf::MeterFactory.instance.clear_all!
92
+ m1=Perf::MeterFactory.instance.get()
93
+ m2=Perf::MeterFactory.instance.get()
94
94
 
95
95
  m1.measure(:a) {}
96
96
  m1.measure(:b) {}
@@ -98,27 +98,27 @@ class TestMeterFactory < Test::Unit::TestCase
98
98
  assert m1.eql?(m2)
99
99
  assert_equal 3, m2.measurements.count
100
100
  assert_equal 3, m1.measurements.count
101
- assert_equal 1,Perf::MeterFactory.all.length
101
+ assert_equal 1,Perf::MeterFactory.instance.all.length
102
102
 
103
- m3=Perf::MeterFactory.get(:some_meter)
104
- m4=Perf::MeterFactory.get(:some_meter)
103
+ m3=Perf::MeterFactory.instance.get(:some_meter)
104
+ m4=Perf::MeterFactory.instance.get(:some_meter)
105
105
 
106
106
  assert m3.eql? m4
107
107
  assert !(m1.eql? m3)
108
- assert_equal 2,Perf::MeterFactory.all.length
108
+ assert_equal 2,Perf::MeterFactory.instance.all.length
109
109
 
110
- Perf::MeterFactory.clear_meter(:some_meter)
111
- assert_equal 1,Perf::MeterFactory.all.length
110
+ Perf::MeterFactory.instance.clear_meter(:some_meter)
111
+ assert_equal 1,Perf::MeterFactory.instance.all.length
112
112
 
113
- Perf::MeterFactory.clear_all!
114
- assert_equal 0,Perf::MeterFactory.all.length
113
+ Perf::MeterFactory.instance.clear_all!
114
+ assert_equal 0,Perf::MeterFactory.instance.all.length
115
115
 
116
116
  ameter = Perf::Meter.new
117
- Perf::MeterFactory.set_meter(:ameter,ameter)
118
- assert (ameter.eql? Perf::MeterFactory.get(:ameter))
117
+ Perf::MeterFactory.instance.set_meter(:ameter,ameter)
118
+ assert (ameter.eql? Perf::MeterFactory.instance.get(:ameter))
119
119
 
120
- Perf::MeterFactory.set_default(ameter)
121
- assert (ameter.eql? Perf::MeterFactory.get)
120
+ Perf::MeterFactory.instance.set_default(ameter)
121
+ assert (ameter.eql? Perf::MeterFactory.instance.get)
122
122
  end
123
123
 
124
124
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyperf
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 7
5
+ prerelease:
5
6
  segments:
6
7
  - 1
7
- - 3
8
- - 7
9
- segments_generated: true
10
- version: 1.3.7
8
+ - 4
9
+ - 0
10
+ version: 1.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - lpasqualis
@@ -15,65 +15,69 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-18 00:00:00 -08:00
18
+ date: 2012-01-19 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false
23
- type: :development
24
- name: shoulda
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
28
+ hash: 3
29
29
  segments:
30
30
  - 0
31
- segments_generated: true
32
31
  version: "0"
33
- requirement: *id001
32
+ type: :development
33
+ name: shoulda
34
+ version_requirements: *id001
34
35
  - !ruby/object:Gem::Dependency
35
36
  prerelease: false
36
- type: :development
37
- name: bundler
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
39
  requirements:
40
40
  - - ~>
41
41
  - !ruby/object:Gem::Version
42
+ hash: 23
42
43
  segments:
43
44
  - 1
44
45
  - 0
45
46
  - 0
46
- segments_generated: true
47
47
  version: 1.0.0
48
- requirement: *id002
48
+ type: :development
49
+ name: bundler
50
+ version_requirements: *id002
49
51
  - !ruby/object:Gem::Dependency
50
52
  prerelease: false
51
- type: :development
52
- name: jeweler
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
54
55
  requirements:
55
56
  - - ~>
56
57
  - !ruby/object:Gem::Version
58
+ hash: 7
57
59
  segments:
58
60
  - 1
59
61
  - 6
60
62
  - 4
61
- segments_generated: true
62
63
  version: 1.6.4
63
- requirement: *id003
64
+ type: :development
65
+ name: jeweler
66
+ version_requirements: *id003
64
67
  - !ruby/object:Gem::Dependency
65
68
  prerelease: false
66
- type: :development
67
- name: rcov
68
- version_requirements: &id004 !ruby/object:Gem::Requirement
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
69
71
  requirements:
70
72
  - - ">="
71
73
  - !ruby/object:Gem::Version
74
+ hash: 3
72
75
  segments:
73
76
  - 0
74
- segments_generated: true
75
77
  version: "0"
76
- requirement: *id004
78
+ type: :development
79
+ name: rcov
80
+ version_requirements: *id004
77
81
  description: Used to easily measure the performance of blocks of Ruby code, expressions and methods; provides reporting in various formats
78
82
  email: lpasqualis@gmail.com
79
83
  executables: []
@@ -116,25 +120,27 @@ rdoc_options: []
116
120
  require_paths:
117
121
  - lib
118
122
  required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
119
124
  requirements:
120
125
  - - ">="
121
126
  - !ruby/object:Gem::Version
127
+ hash: 3
122
128
  segments:
123
129
  - 0
124
- segments_generated: true
125
130
  version: "0"
126
131
  required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
127
133
  requirements:
128
134
  - - ">="
129
135
  - !ruby/object:Gem::Version
136
+ hash: 3
130
137
  segments:
131
138
  - 0
132
- segments_generated: true
133
139
  version: "0"
134
140
  requirements: []
135
141
 
136
142
  rubyforge_project:
137
- rubygems_version: 1.3.6
143
+ rubygems_version: 1.4.2
138
144
  signing_key:
139
145
  specification_version: 3
140
146
  summary: rubyperf helps you measure ruby code performance