mole 1.0.2 → 1.0.3
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/History.txt +16 -3
- data/Manifest.txt +0 -1
- data/README.txt +3 -3
- data/Rakefile +1 -2
- data/lib/mole/logger.rb +10 -7
- data/lib/mole/module.rb +20 -20
- data/lib/mole/version.rb +1 -1
- data/spec/data/blee.rb +10 -4
- data/spec/models/mole_log_spec.rb +1 -0
- data/spec/module_spec.rb +73 -23
- metadata +3 -14
- data/bin/mole +0 -8
data/History.txt
CHANGED
@@ -1,4 +1,17 @@
|
|
1
|
-
== 1.0.0 / 2008-02-
|
1
|
+
== 1.0.0 / 2008-02-04
|
2
2
|
|
3
|
-
* 1
|
4
|
-
*
|
3
|
+
* 1 Initial drop
|
4
|
+
* Converted from rails plugin into gem
|
5
|
+
* Retrofited to work with pure ruby, merb and rails env
|
6
|
+
|
7
|
+
== 1.0.1 / 2008-02-04
|
8
|
+
|
9
|
+
* 1 Documentation enhancements
|
10
|
+
|
11
|
+
== 1.0.2 / 2008-02-04
|
12
|
+
|
13
|
+
* 1 Added Snitch support
|
14
|
+
|
15
|
+
== 1.0.3 / 2008-02-05
|
16
|
+
|
17
|
+
* 1 Bug Fixes
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -97,7 +97,7 @@ The MOle allows you to easily
|
|
97
97
|
any media you'll find suitable. In a rails/merb context, you'll be able to extract session/params information
|
98
98
|
as in this case.
|
99
99
|
|
100
|
-
Posts.mole_after( :feature => :show ) { |context, feature, ret,
|
100
|
+
Posts.mole_after( :feature => :show ) { |context, feature, ret, block, *args|
|
101
101
|
# Records the interaction to the database
|
102
102
|
Mole::Moler.mole_it( context, feature,
|
103
103
|
context.session[:user_id], # Retrieves which user performed this action
|
@@ -115,7 +115,7 @@ The MOle allows you to easily
|
|
115
115
|
the feature that causes the performance threshold to be triggered. Setting the :email option
|
116
116
|
to true will also send out an email alert.
|
117
117
|
|
118
|
-
Posts.mole_perf( :features => merb_actions ) do |context, feature, elapsed_time,
|
118
|
+
Posts.mole_perf( :features => merb_actions ) do |context, feature, elapsed_time, ret, block, *args|
|
119
119
|
user = context.instance_variable_get( "@user" )
|
120
120
|
key = context.params[:key], "N/A"
|
121
121
|
request = context.request.nil? ? "N/A" : context.request.remote_ip,
|
@@ -132,7 +132,7 @@ The MOle allows you to easily
|
|
132
132
|
The unchecked exception trap works very similarly to the mole_perf trap. It will pass in
|
133
133
|
the context of the method that triggered the exception.
|
134
134
|
|
135
|
-
Posts.mole_unchecked( :features => merb_actions ) do |context, action, boom,
|
135
|
+
Posts.mole_unchecked( :features => merb_actions ) do |context, action, boom, block, *args|
|
136
136
|
sub = context.instance_variable_get("@sub")
|
137
137
|
user_id = "N/A"
|
138
138
|
user_id = sub.user.id if sub and sub.user
|
data/Rakefile
CHANGED
@@ -27,7 +27,6 @@ PROJ.executables = ['molify']
|
|
27
27
|
|
28
28
|
PROJ.exclude << %w[.DS_Store$ .swo$ .swp$]
|
29
29
|
PROJ.tests = FileList['test/**/test_*.rb']
|
30
|
-
PROJ.dependencies = [ ["logging"] ]
|
31
30
|
PROJ.annotation_tags << 'BOZO'
|
32
31
|
|
33
32
|
desc "Clean up artifact directories"
|
@@ -43,5 +42,5 @@ end
|
|
43
42
|
task 'gem:package' => 'manifest:assert'
|
44
43
|
|
45
44
|
|
46
|
-
depend_on "logging" , "= 0.7.
|
45
|
+
depend_on "logging" , "= 0.7.1"
|
47
46
|
depend_on "activerecord", "= 2.0.2"
|
data/lib/mole/logger.rb
CHANGED
@@ -40,10 +40,10 @@ module Mole
|
|
40
40
|
# email. If that is not reached before the program
|
41
41
|
# exists then the at_exit handler for logging will flush
|
42
42
|
# the log to smtp.
|
43
|
-
:email_alerts_to => nil
|
44
|
-
:email_alert_level => :error
|
45
|
-
:email_alert_server =>
|
46
|
-
:email_alert_buffsize => 200
|
43
|
+
:email_alerts_to => nil ,
|
44
|
+
:email_alert_level => :error ,
|
45
|
+
:email_alert_server => nil ,
|
46
|
+
:email_alert_buffsize => 200 ,
|
47
47
|
}
|
48
48
|
end
|
49
49
|
|
@@ -122,10 +122,13 @@ module Mole
|
|
122
122
|
def log_it( context, feature, user_id, args )
|
123
123
|
args ||= "no args"
|
124
124
|
user_id ||= "N/A"
|
125
|
-
ip_addr, browser_type = MoleLog.log_details( context )
|
125
|
+
ip_addr, browser_type = MoleLog.log_details( context )
|
126
126
|
info = []
|
127
|
-
args.keys.sort { |a,b| a.to_s <=> b.to_s }.each { |k| info << "#{k}=>#{args[k]}" }
|
128
|
-
|
127
|
+
args.keys.sort { |a,b| a.to_s <=> b.to_s }.each { |k| info << "#{k}=>#{args[k]}" }
|
128
|
+
buff = ""
|
129
|
+
buff << "[#{ip_addr}/#{browser_type}]--" if ip_addr and browser_type
|
130
|
+
buff << "#{context.class.name}(#{feature}) --- #{user_id} -> #{info.join( ', ' ) }"
|
131
|
+
self.info( buff )
|
129
132
|
end
|
130
133
|
end
|
131
134
|
end
|
data/lib/mole/module.rb
CHANGED
@@ -10,7 +10,7 @@ class Module
|
|
10
10
|
#
|
11
11
|
# Example:
|
12
12
|
#
|
13
|
-
# MyClass.mole_perf do |context, action, elapsed_time, args|
|
13
|
+
# MyClass.mole_perf do |context, action, elapsed_time, ret, block, *args|
|
14
14
|
# Mole::DbMole.perf_it( context.session[:user_id],
|
15
15
|
# :controller => context.class.name,
|
16
16
|
# :action => action,
|
@@ -27,8 +27,8 @@ class Module
|
|
27
27
|
# <tt>:interceptor</tt>:: The class name of your interceptor class
|
28
28
|
# <tt>:method</tt>:: The name of the method to callback the interceptor on
|
29
29
|
# once a perf condition has been trapped.
|
30
|
-
def mole_perf( opts={}, &
|
31
|
-
opts[:interceptor] ||=
|
30
|
+
def mole_perf( opts={}, &interceptor )
|
31
|
+
opts[:interceptor] ||= interceptor
|
32
32
|
opts[:method] ||= :call
|
33
33
|
opts[:features] ||= instance_methods( false )
|
34
34
|
opts[:features].each do |feature|
|
@@ -43,7 +43,7 @@ class Module
|
|
43
43
|
#
|
44
44
|
# Example:
|
45
45
|
#
|
46
|
-
# MyClass.mole_unchecked do |context, action, boom, args|
|
46
|
+
# MyClass.mole_unchecked do |context, action, boom, block, *args|
|
47
47
|
# Mole::Moler.check_it( context.session[:user_id],
|
48
48
|
# :controller => context.class.name,
|
49
49
|
# :action => action,
|
@@ -62,8 +62,8 @@ class Module
|
|
62
62
|
# <tt>:interceptor</tt>:: The class name of your interceptor class
|
63
63
|
# <tt>:method</tt>:: The name of the method to callback the interceptor on
|
64
64
|
# once an exception condition has been trapped.
|
65
|
-
def mole_unchecked( opts={}, &
|
66
|
-
opts[:interceptor] ||=
|
65
|
+
def mole_unchecked( opts={}, &interceptor )
|
66
|
+
opts[:interceptor] ||= interceptor
|
67
67
|
opts[:method] ||= :call
|
68
68
|
opts[:features] ||= instance_methods( false )
|
69
69
|
opts[:features].each do |feature|
|
@@ -78,7 +78,7 @@ class Module
|
|
78
78
|
#
|
79
79
|
# Example:
|
80
80
|
#
|
81
|
-
# MyClass.mole_before( :feature => :blee ) do |context, feature, *args|
|
81
|
+
# MyClass.mole_before( :feature => :blee ) do |context, feature, block, *args|
|
82
82
|
# Mole::Moler.mole_it( context, feature, context.session[:user_id],
|
83
83
|
# :args => args )
|
84
84
|
# end
|
@@ -93,9 +93,9 @@ class Module
|
|
93
93
|
# <tt>:interceptor</tt>:: The class name of your interceptor class. If no interceptor block is specified
|
94
94
|
# <tt>:method</tt>:: The name of the method to callback the interceptor on
|
95
95
|
# once an exception condition has been trapped.
|
96
|
-
def mole_before(opts
|
96
|
+
def mole_before(opts={}, &interceptor)
|
97
97
|
raise "Missing :feature option" if opts[:feature].nil? or opts[:feature].to_s.empty?
|
98
|
-
opts[:interceptor] ||=
|
98
|
+
opts[:interceptor] ||= interceptor
|
99
99
|
opts[:method] ||= :call
|
100
100
|
feature = opts[:feature].to_s
|
101
101
|
if before_mole_filters[feature].empty?
|
@@ -110,7 +110,7 @@ class Module
|
|
110
110
|
#
|
111
111
|
# Example:
|
112
112
|
#
|
113
|
-
# MyClass.mole_after( :feature => :blee ) do |context, feature, ret_val, *args|
|
113
|
+
# MyClass.mole_after( :feature => :blee ) do |context, feature, ret_val, block, *args|
|
114
114
|
# Mole::Moler.mole_it( context, feature, context.session[:user_id],
|
115
115
|
# :args => args )
|
116
116
|
# end
|
@@ -194,7 +194,7 @@ class Module
|
|
194
194
|
between = instance_method( method )
|
195
195
|
rescue
|
196
196
|
# between = find_public_class_method( method )
|
197
|
-
raise
|
197
|
+
raise "Unable to find moled feature `#{method}" unless(between)
|
198
198
|
end
|
199
199
|
code = <<-code
|
200
200
|
def #{method}_with_mole (*a, &b)
|
@@ -205,14 +205,14 @@ class Module
|
|
205
205
|
klass.apply_before_filters( klass.before_mole_filters[key], self, key, *a, &b )
|
206
206
|
begin
|
207
207
|
elapsed = Benchmark::realtime do
|
208
|
-
ret_val = between.bind(self).call(*a)
|
208
|
+
ret_val = between.bind(self).call( *a, &b )
|
209
209
|
end
|
210
|
-
klass.apply_perf_filters( elapsed, klass.perf_mole_filters[key], self, key, *a, &b )
|
210
|
+
klass.apply_perf_filters( elapsed, klass.perf_mole_filters[key], self, key, ret_val, *a, &b )
|
211
211
|
rescue => boom
|
212
212
|
klass.apply_unchecked_filters( boom, klass.unchecked_mole_filters[key], self, key, *a, &b )
|
213
213
|
raise boom
|
214
214
|
end
|
215
|
-
klass.apply_after_filters( klass.after_mole_filters[key], self, key, *a, &b )
|
215
|
+
klass.apply_after_filters( klass.after_mole_filters[key], self, key, ret_val, *a, &b )
|
216
216
|
ret_val
|
217
217
|
end
|
218
218
|
code
|
@@ -224,26 +224,26 @@ class Module
|
|
224
224
|
|
225
225
|
def apply_before_filters( filters, clazz, key, *a, &b ) #:nodoc:
|
226
226
|
begin
|
227
|
-
filters.each { |r,m| r.send(m, clazz, key, *a
|
227
|
+
filters.each { |r,m| r.send( m, clazz, key, b, *a ) }
|
228
228
|
rescue => ca_boom
|
229
229
|
::Mole.logger.error ">>> Mole Error: Before-Filter -- " + ca_boom
|
230
230
|
# ca_boom.backtrace.each { |l| ::Mole.logger.error l }
|
231
231
|
end
|
232
232
|
end
|
233
233
|
|
234
|
-
def apply_after_filters( filters, clazz, key, *a, &b )
|
234
|
+
def apply_after_filters( filters, clazz, key, ret_val, *a, &b ) #:nodoc:
|
235
235
|
begin
|
236
|
-
filters.each { |r,m| r.send(m, clazz, key, *a
|
236
|
+
filters.each { |r,m| r.send( m, clazz, key, ret_val, b, *a ) }
|
237
237
|
rescue => ca_boom
|
238
238
|
::Mole.logger.error ">>> Mole Error: After-Filter -- " + ca_boom
|
239
239
|
# ca_boom.backtrace.each { |l| ::Mole.logger.error l }
|
240
240
|
end
|
241
241
|
end
|
242
242
|
|
243
|
-
def apply_perf_filters( elapsed, filters, clazz, key, *a ) #:nodoc:
|
243
|
+
def apply_perf_filters( elapsed, filters, clazz, key, ret_val, *a, &b ) #:nodoc:
|
244
244
|
begin
|
245
245
|
if ( elapsed >= Mole.perf_threshold )
|
246
|
-
filters.each { |r,m| r.send(m, clazz, key, elapsed, *a) }
|
246
|
+
filters.each { |r,m| r.send( m, clazz, key, elapsed, ret_val, b, *a ) }
|
247
247
|
end
|
248
248
|
rescue => ca_boom
|
249
249
|
::Mole.logger.error ">>> Mole Error: Perf-Filter -- " + ca_boom
|
@@ -253,7 +253,7 @@ class Module
|
|
253
253
|
|
254
254
|
def apply_unchecked_filters( boom, filters, clazz, key, *a, &b ) #:nodoc:
|
255
255
|
begin
|
256
|
-
filters.each { |r,m| r.send(m, clazz, key, boom, *a
|
256
|
+
filters.each { |r,m| r.send( m, clazz, key, boom, b, *a ) }
|
257
257
|
rescue => ca_boom
|
258
258
|
::Mole.logger.error ">>> Mole Error: Unchecked-Filter -- " + ca_boom
|
259
259
|
# ca_boom.backtrace.each { |l| ::Mole.logger.error l }
|
data/lib/mole/version.rb
CHANGED
data/spec/data/blee.rb
CHANGED
@@ -14,12 +14,18 @@ class Blee
|
|
14
14
|
# puts ">>> Blee_No_Args"
|
15
15
|
end
|
16
16
|
|
17
|
-
def blee_args(
|
18
|
-
# puts ">>>
|
17
|
+
def blee_args( a, b, c, d )
|
18
|
+
# puts ">>> Blee Many Args #{[a,b,c,d].join( "--" )}"
|
19
|
+
20
|
19
20
|
end
|
20
21
|
|
21
|
-
def
|
22
|
-
"
|
22
|
+
def blee_block( a, b, c, d, &block )
|
23
|
+
# puts ">>> Blee Many Block #{[a,b,c,d,block].join( "--" )}"
|
24
|
+
10
|
25
|
+
end
|
26
|
+
|
27
|
+
def blee_args_ret( a )
|
28
|
+
"Hello #{a}"
|
23
29
|
end
|
24
30
|
|
25
31
|
def blee_raise
|
data/spec/module_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), "spec_helper" )
|
|
3
3
|
|
4
4
|
describe Module do
|
5
5
|
before( :all ) do
|
6
|
-
::Mole.initialize( :perf_threshold => 1 )
|
6
|
+
::Mole.initialize( :perf_threshold => 1, :log_level => :info )
|
7
7
|
require File.join( File.dirname(__FILE__), %w[data blee] )
|
8
8
|
end
|
9
9
|
|
@@ -48,19 +48,20 @@ describe Module do
|
|
48
48
|
CallStackChecker.should_not be_called
|
49
49
|
end
|
50
50
|
|
51
|
-
it "should trap mole handler exceptions" do
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
51
|
+
# it "should trap mole handler exceptions" do
|
52
|
+
# Blee.mole_before( :feature => :crap_out ) { |context, feature, *args|
|
53
|
+
# raise "Something did crap out"
|
54
|
+
# CallStackChecker.called
|
55
|
+
# }
|
56
|
+
# @blee.crap_out
|
57
|
+
# CallStackChecker.should_not be_called
|
58
|
+
# end
|
59
59
|
|
60
60
|
it "should correctly setup a before call" do
|
61
|
-
Blee.mole_before( :feature => :blee_no_args ) { |context, feature, *args|
|
61
|
+
Blee.mole_before( :feature => :blee_no_args ) { |context, feature, block, *args|
|
62
62
|
context.class.should == Blee
|
63
63
|
feature.should == "blee_no_args"
|
64
|
+
block.should be_nil
|
64
65
|
args.should have(0).items
|
65
66
|
CallStackChecker.called
|
66
67
|
}
|
@@ -69,7 +70,7 @@ describe Module do
|
|
69
70
|
end
|
70
71
|
|
71
72
|
it "should correctly setup an after call" do
|
72
|
-
Blee.mole_after( :feature => :blee_no_args ) { |context, feature, *args|
|
73
|
+
Blee.mole_after( :feature => :blee_no_args ) { |context, feature, ret_val, block, *args|
|
73
74
|
context.class.should == Blee
|
74
75
|
feature.should == "blee_no_args"
|
75
76
|
args.should have(0).items
|
@@ -91,40 +92,83 @@ describe Module do
|
|
91
92
|
end
|
92
93
|
|
93
94
|
it "should not trap a before call" do
|
94
|
-
@blee.blee_args( "Hello", "World" )
|
95
|
+
@blee.blee_args( "Hello", "World", "Good", "Day" )
|
95
96
|
CallStackChecker.should_not be_called
|
96
97
|
end
|
97
98
|
|
98
99
|
it "should correctly trap the before call arguments" do
|
99
|
-
Blee.mole_before( :feature => :blee_args ) { |context, feature, *args|
|
100
|
+
Blee.mole_before( :feature => :blee_args ) { |context, feature, block, *args|
|
100
101
|
context.class.should == Blee
|
101
102
|
feature.should == "blee_args"
|
102
|
-
args.should have(
|
103
|
+
args.should have(4).items
|
103
104
|
args[0].should == "Hello"
|
104
105
|
args[1].should == "World"
|
106
|
+
args[2].should == "Good"
|
107
|
+
args[3].should == "Day"
|
105
108
|
CallStackChecker.called
|
106
109
|
}
|
107
|
-
@blee.blee_args( "Hello", "World" )
|
110
|
+
@blee.blee_args( "Hello", "World", "Good", "Day" )
|
108
111
|
CallStackChecker.should be_called
|
109
112
|
end
|
113
|
+
|
114
|
+
it "should correctly trap a before call with a block" do
|
115
|
+
Blee.mole_before( :feature => :blee_block ) do |context, feature, block, *args|
|
116
|
+
context.class.should == Blee
|
117
|
+
feature.should == "blee_block"
|
118
|
+
block.should_not be_nil
|
119
|
+
block.call.should == "Do it already!!"
|
120
|
+
args.size.should == 4
|
121
|
+
args[0].should == "Hello"
|
122
|
+
args[1].should == "World"
|
123
|
+
args[2].should == "Good"
|
124
|
+
args[3].should == "Day"
|
125
|
+
CallStackChecker.called
|
126
|
+
end
|
127
|
+
@blee.blee_block( "Hello", "World", "Good", "Day" ) { "Do it already!!" } rescue nil
|
128
|
+
CallStackChecker.should be_called
|
129
|
+
end
|
110
130
|
|
111
|
-
it "should correctly trap the after call arguments" do
|
112
|
-
Blee.mole_after( :feature => :blee_args ) { |context, feature, *args|
|
131
|
+
it "should correctly trap the after call with many arguments" do
|
132
|
+
Blee.mole_after( :feature => :blee_args ) { |context, feature, ret_val, block, *args|
|
113
133
|
context.class.should == Blee
|
114
134
|
feature.should == "blee_args"
|
115
|
-
|
135
|
+
ret_val.should == 20
|
136
|
+
args.size.should == 4
|
116
137
|
args[0].should == "Hello"
|
117
138
|
args[1].should == "World"
|
139
|
+
args[2].should == "Good"
|
140
|
+
args[3].should == "Day"
|
118
141
|
CallStackChecker.called
|
119
142
|
}
|
120
|
-
@blee.blee_args( "Hello", "World" )
|
143
|
+
@blee.blee_args( "Hello", "World", "Good", "Day" )
|
121
144
|
CallStackChecker.should be_called
|
122
145
|
end
|
146
|
+
|
147
|
+
it "should correctly trap the after call with a block" do
|
148
|
+
Blee.mole_after( :feature => :blee_block ) do |context, feature, ret_val, block, *args|
|
149
|
+
context.class.should == Blee
|
150
|
+
feature.should == "blee_block"
|
151
|
+
block.should_not be_nil
|
152
|
+
block.call.should == "Do it already!!"
|
153
|
+
ret_val.should == 10
|
154
|
+
args.size.should == 4
|
155
|
+
args[0].should == "Hello"
|
156
|
+
args[1].should == "World"
|
157
|
+
args[2].should == "Good"
|
158
|
+
args[3].should == "Day"
|
159
|
+
CallStackChecker.called
|
160
|
+
end
|
161
|
+
@blee.blee_block( "Hello", "World", "Good", "Day" ) { "Do it already!!" } rescue nil
|
162
|
+
CallStackChecker.should be_called
|
163
|
+
end
|
123
164
|
|
124
165
|
it "should correctly trap a slow call" do
|
125
|
-
Blee.mole_perf( :features => [:blee_slow] ) do |context, feature, elapsed_time,
|
166
|
+
Blee.mole_perf( :features => [:blee_slow] ) do |context, feature, elapsed_time, ret_val, block, *args|
|
126
167
|
context.class.should == Blee
|
127
168
|
feature.should == "blee_slow"
|
169
|
+
ret_val.should == 1
|
170
|
+
block.should be_nil
|
171
|
+
args.size.should == 0
|
128
172
|
elapsed_time.should > 1
|
129
173
|
CallStackChecker.called
|
130
174
|
end
|
@@ -133,9 +177,11 @@ describe Module do
|
|
133
177
|
end
|
134
178
|
|
135
179
|
it "should trap a private method correctly" do
|
136
|
-
Blee.mole_after( :feature => :blee_private ) { |context, feature, *args|
|
180
|
+
Blee.mole_after( :feature => :blee_private ) { |context, feature, ret_val, block, *args|
|
137
181
|
context.class.should == Blee
|
138
182
|
feature.should == "blee_private"
|
183
|
+
ret_val.should == "Hello"
|
184
|
+
block.should be_nil
|
139
185
|
args.size.should == 1
|
140
186
|
args[0].should == "Hello"
|
141
187
|
CallStackChecker.called
|
@@ -145,9 +191,11 @@ describe Module do
|
|
145
191
|
end
|
146
192
|
|
147
193
|
it "should trap a protected method correctly" do
|
148
|
-
Blee.mole_after( :feature => :blee_protected ) { |context, feature, *args|
|
194
|
+
Blee.mole_after( :feature => :blee_protected ) { |context, feature, ret_val, block, *args|
|
149
195
|
context.class.should == Blee
|
150
196
|
feature.should == "blee_protected"
|
197
|
+
ret_val.should == "Hello"
|
198
|
+
block.should be_nil
|
151
199
|
args.size.should == 1
|
152
200
|
args[0].should == "Hello"
|
153
201
|
CallStackChecker.called
|
@@ -158,9 +206,11 @@ describe Module do
|
|
158
206
|
|
159
207
|
it "should mole a static method correctly" do
|
160
208
|
pending do
|
161
|
-
Blee.mole_after( :feature => :blee_static ) { |context, feature, *args|
|
209
|
+
Blee.mole_after( :feature => :blee_static ) { |context, feature, ret_val, block, *args|
|
162
210
|
context.class.should == Blee
|
163
211
|
feature.should == "blee_static"
|
212
|
+
ret_val.should be_nil
|
213
|
+
block.should be_nil
|
164
214
|
args.size.should == 0
|
165
215
|
CallStackChecker.called
|
166
216
|
}
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: mole
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0.
|
7
|
-
date: 2008-03-
|
6
|
+
version: 1.0.3
|
7
|
+
date: 2008-03-06 00:00:00 -07:00
|
8
8
|
summary: A flexible way to track user's interactions within your ruby web applications
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -33,7 +33,6 @@ files:
|
|
33
33
|
- Manifest.txt
|
34
34
|
- README.txt
|
35
35
|
- Rakefile
|
36
|
-
- bin/mole
|
37
36
|
- bin/molify
|
38
37
|
- config/database.yml
|
39
38
|
- config/test_database.yml
|
@@ -82,7 +81,6 @@ rdoc_options:
|
|
82
81
|
extra_rdoc_files:
|
83
82
|
- History.txt
|
84
83
|
- README.txt
|
85
|
-
- bin/mole
|
86
84
|
- bin/molify
|
87
85
|
executables:
|
88
86
|
- molify
|
@@ -91,15 +89,6 @@ extensions: []
|
|
91
89
|
requirements: []
|
92
90
|
|
93
91
|
dependencies:
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: logging
|
96
|
-
version_requirement:
|
97
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
98
|
-
requirements:
|
99
|
-
- - ">"
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: 0.0.0
|
102
|
-
version:
|
103
92
|
- !ruby/object:Gem::Dependency
|
104
93
|
name: logging
|
105
94
|
version_requirement:
|
@@ -107,7 +96,7 @@ dependencies:
|
|
107
96
|
requirements:
|
108
97
|
- - "="
|
109
98
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.7.
|
99
|
+
version: 0.7.1
|
111
100
|
version:
|
112
101
|
- !ruby/object:Gem::Dependency
|
113
102
|
name: activerecord
|