tracing 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 20ef811dadb9ee19941f4848e9ba99ae47f705c1
4
+ data.tar.gz: a6f2ee9abc71081e56b8f1a1c6d85e526952d284
5
+ SHA512:
6
+ metadata.gz: b7f5e1d033b5d162496945ba150ebb692f89766bd902e5629a2bd8dac33f1aecacbf17d6bc60988d8d3e91771bd21fab82b42a3e58e5610723be1e2b01ad4915
7
+ data.tar.gz: d68c6e4611334cb883756fefeeeb36cb4768461aaffdc4fdaf34f51ee87cb5f247b2d655b16164c708f5eb674ef0bff6ccf42a4c975255b093f5893a2d40ae15
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ # rcov 1.0.0 is broken for jruby, so 0.9.11 is the only one available.
7
+ #gem 'rcov', '~> 0.9.11', :platforms => [:jruby, :mri_18], :require => false
8
+ #gem 'simplecov', '~> 0.6', '>= 0.6.4', :platforms => :mri_19, :require => false
9
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2015 Clifford Heath.
2
+
3
+ This software is provided 'as-is', without any express or implied warranty.
4
+ In no event will the authors be held liable for any damages arising from the
5
+ use of this software.
6
+
7
+ Permission is granted to anyone to use this software for any purpose,
8
+ including commercial applications, and to alter it and redistribute it
9
+ freely, subject to the following restrictions:
10
+
11
+ 1. The origin of this software must not be misrepresented; you must not
12
+ claim that you wrote the original software. If you use this software
13
+ in a product, an acknowledgment in the product documentation would be
14
+ appreciated but is not required.
15
+
16
+ 2. Altered source versions must be plainly marked as such, and must not be
17
+ misrepresented as being the original software.
18
+
19
+ 3. This notice may not be removed or altered from any source distribution.
data/README.rdoc ADDED
@@ -0,0 +1,86 @@
1
+ = tracing
2
+
3
+ Tracing provides a single method call *trace* which is used in a number of ways
4
+ to generated highly configurable nested tracing output from your program.
5
+ Each trace key is defined by a symbolic keyword, which is enabled by
6
+ including it in a comma-separated list in the TRACE environment variable.
7
+
8
+ == INSTALL:
9
+
10
+ * sudo gem install tracing
11
+
12
+ == USAGE:
13
+
14
+ require 'tracing'
15
+
16
+ When *trace* is called with no arguments, it returns the Tracer singleton object.
17
+ The API of this object is defined below. You probably don't need to use this.
18
+
19
+ If called with one argument, that should be a Symbol, which is the trace key.
20
+ Nothing is printed, and the return value is true if this trace key is enabled.
21
+
22
+ Normal calls to *trace* take two or more arguments, and an optional block.
23
+
24
+ The first argument is a Symbol, which is the trace key.
25
+
26
+ The second and any subsequent arguments are either a String (or anything that can be *join*ed)
27
+ or a Proc (or anything which can be called), which is evaluated and printed
28
+ if the trace key is enabled.
29
+
30
+ If a block is passed, the nesting level is increased (if this key was enabled),
31
+ the block is called, and *trace* returns its return value (restoring the nesting).
32
+
33
+ == SPECIAL TRACE KEYS
34
+
35
+ Specific TRACE keys configure internal behaviour:
36
+
37
+ * *debug* pre-loads a Ruby debugger at the start of the run, so it has the full context available
38
+
39
+ * *help* runs the program, and at exit, prints all trace keys that were available during that run.
40
+
41
+ * *keys* causes each output line to be prefixed by its trace key
42
+
43
+ * *all* enables all trace keys (this also enables *keys*)
44
+
45
+ * *firstaid* enter the debugger inside the Exception constructor so you can inspect the local context
46
+
47
+ * *trap* trap SIGINT (^C) in a block that allows inspecting or continuing execution (not all debuggers support this)
48
+
49
+ * *flame* - use ruby-prof-flamegraph to display the performance profile as a flame graph using SVG
50
+
51
+ The debugger is chosen from ENV['DEBUG_PREFERENCE'] or the first to load of: byebug, pry. debugger, ruby-trace
52
+
53
+ == TRACER API
54
+
55
+ The Tracer supports the following methods:
56
+
57
+ * *reinitialize*() clear all trace keys and re-initialise from the TRACE enfironment variable
58
+
59
+ * *available_keys*() returns an array of the keys seen so far this run
60
+
61
+ * *enabled?*(key) returns true if key is enabled
62
+
63
+ * *enabled*() returns an array of all enabked keys
64
+
65
+ * *enable*(key) enables that key
66
+
67
+ * *disable*(key) disables that key
68
+
69
+ * *toggle*(key) toggles that key
70
+
71
+ * *display*(string) prints the string to standard output. You can monkey-patch this to divert the output.
72
+
73
+ == Contributing to tracing
74
+
75
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
76
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
77
+ * Fork the project
78
+ * Start a feature/bugfix branch
79
+ * Commit and push until you are happy with your contribution
80
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
81
+ * Please try not to mess with the Rakefile or gem version.rb
82
+
83
+ == Copyright
84
+
85
+ Copyright (c) 2016 Clifford Heath. See LICENSE.txt for further details.
86
+
data/Rakefile ADDED
@@ -0,0 +1,89 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require 'rdoc/task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
8
+
9
+ desc "Bump gem version patch number"
10
+ task :bump do
11
+ path = File.expand_path('../lib/activefacts/api/version.rb', __FILE__)
12
+ lines = File.open(path) do |fp| fp.readlines; end
13
+ File.open(path, "w") do |fp|
14
+ fp.write(
15
+ lines.map do |line|
16
+ line.gsub(/(VERSION *= *"[0-9.]*\.)([0-9]+)"\n/) do
17
+ version = "#{$1}#{$2.to_i+1}"
18
+ puts "Version bumped to #{version}\""
19
+ version+"\"\n"
20
+ end
21
+ end*''
22
+ )
23
+ end
24
+ end
25
+
26
+ desc "Run Rspec tests"
27
+ RSpec::Core::RakeTask.new(:spec) do |t|
28
+ t.rspec_opts = %w{-f d}
29
+ end
30
+
31
+ namespace :spec do
32
+ namespace :rubies do
33
+ SUPPORTED_RUBIES = %w{ 1.9.2 1.9.3 2.0.0 jruby-1.7.0 }
34
+
35
+ desc "Run Rspec tests on all supported rubies"
36
+ task :all_tasks => [:install_gems, :exec]
37
+
38
+ desc "Run `bundle install` on all rubies"
39
+ task :install_gems do
40
+ sh %{ rvm #{SUPPORTED_RUBIES.join(',')} exec bundle install }
41
+ end
42
+
43
+ desc "Run `bundle exec rake` on all rubies"
44
+ task :exec do
45
+ sh %{ rvm #{SUPPORTED_RUBIES.join(',')} exec bundle exec rake spec }
46
+ end
47
+
48
+ SUPPORTED_RUBIES.each do |ruby|
49
+ desc "Run `bundle install` on #{ruby}"
50
+ task :"install_gems_#{ruby}" do
51
+ sh %{ rvm #{ruby} exec bundle install }
52
+ end
53
+
54
+ desc "Run `bundle exec rake` on #{ruby}"
55
+ task :"exec_#{ruby}" do
56
+ sh %{ rvm #{ruby} exec bundle exec rake spec }
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+
63
+ desc "Run RSpec tests and produce coverage files (results viewable in coverage/index.html)"
64
+ RSpec::Core::RakeTask.new(:coverage) do |spec|
65
+ if RUBY_VERSION < '1.9'
66
+ spec.rcov_opts = %{ --exclude spec --exclude lib/activefacts/tracer.rb --exclude gem/* }
67
+ spec.rcov = true
68
+ else
69
+ spec.rspec_opts = %w{ --require simplecov_helper }
70
+ end
71
+ end
72
+
73
+ task :cov => :coverage
74
+ task :rcov => :coverage
75
+ task :simplecov => :coverage
76
+
77
+ Rake::RDocTask.new do |rdoc|
78
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
79
+
80
+ rdoc.rdoc_dir = 'rdoc'
81
+ rdoc.title = "activefacts-api #{version}"
82
+ rdoc.rdoc_files.include('README*')
83
+ rdoc.rdoc_files.include('lib/**/*.rb')
84
+ end
85
+
86
+ task :wait do
87
+ print "Waiting for you to hit Enter"
88
+ $stdin.gets
89
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.8.2
@@ -0,0 +1,3 @@
1
+ module Tracing
2
+ VERSION = "2.0.0"
3
+ end
data/lib/tracing.rb ADDED
@@ -0,0 +1,281 @@
1
+ #
2
+ # Tracer.
3
+ #
4
+ # The trace() method supports indented tracing.
5
+ #
6
+ # Trace keys:
7
+ # The first argument is normally a symbol which is the key for related trace calls.
8
+ # Set the TRACE environment variable to enable it, or add trace.enable(:key) to a CLI.
9
+ # A call to trace without a first symbol argument is always enabled (as if by :all)
10
+ #
11
+ # Message arguments:
12
+ # Each subsequent argument is either
13
+ # - a String (or anything that can be join()ed), or
14
+ # - a Proc (or anything that can be called) that returns such a string.
15
+ # Proc arguments will be called only if the trace key is enabled.
16
+ # If the key is enabled (or not present) the Trace strings will be joined and emitted.
17
+ #
18
+ # Trace blocks:
19
+ # A block passed to the trace method will always be called, and trace will always return its value.
20
+ # Any trace emitted from within such a block will be indented if the current trace key is enabled.
21
+ #
22
+ # Special trace key options for nesting blocks:
23
+ # - A trace key ending in ! is enabled if the base key is enabled, but enables all
24
+ # nested trace calls whether or not their key is enabled.
25
+ # - A trace key ending in ? is enabled if the base key is enabled, but is emitted
26
+ # only if (and just before) the nested block emits a trace message
27
+ #
28
+ # Testing whether a trace key is enabled:
29
+ # A call to trace with a key but without a block will return true if the key is enabled
30
+ #
31
+ # A call to trace with no arguments returns the Tracer object itself.
32
+ #
33
+ # Built-in trace keys and behaviour:
34
+ # help - list (at exit) all trace keys that became available during the run
35
+ # all - enable all trace keys
36
+ # keys - display the trace key for every trace message (automatically enabled by :all)
37
+ # debug - prepare a Ruby debugger at the start of the run, so it has the full context available
38
+ # firstaid - enter the debugger inside the Exception constructor so you can inspect the local context
39
+ # trap - trap SIGINT (^C) in a block that allows inspecting or continuing execution (not all debuggers support this)
40
+ # flame - use ruby-prof-flamegraph to display the performance profile as a flame graph using SVG
41
+ #
42
+ # The debugger is chosen from ENV['DEBUG_PREFERENCE'] or the first to load of: byebug, pry. debugger, ruby-trace
43
+ #
44
+ # Copyright (c) 2009-2015 Clifford Heath. Read the LICENSE file.
45
+ #
46
+ module Tracing
47
+ (class << self; self; end).class_eval do
48
+ attr_accessor :tracer
49
+ end
50
+
51
+ class Tracer
52
+ def initialize
53
+ reinitialize
54
+ end
55
+
56
+ def reinitialize
57
+ @indent = 0 # Current nesting level of enabled trace blocks
58
+ @nested = false # Set when a block enables all enclosed tracing
59
+ @available = {} # Hash of available trace keys, accumulated during the run
60
+ @delayed = nil # A delayed message, emitted only if the enclosed block emits tracing
61
+
62
+ @keys = {}
63
+ if (e = ENV["TRACE"])
64
+ e.split(/[^_a-zA-Z0-9]/).each{|k| enable(k) }
65
+ end
66
+ end
67
+
68
+ def trace(*args, &block)
69
+ begin
70
+ old_indent, old_nested, old_delayed, enabled = @indent, @nested, @delayed, show(*args)
71
+ # This monstrosity reduces the steps when single-stepping:
72
+ block ? yield : (args.size == 0 ? self : enabled)
73
+ ensure
74
+ @indent, @nested, @delayed = old_indent, old_nested, old_delayed
75
+ end
76
+ end
77
+
78
+ def available_keys
79
+ @available.keys
80
+ end
81
+
82
+ def enabled? key
83
+ !key.empty? && @keys[key.to_sym]
84
+ end
85
+
86
+ def enabled
87
+ @keys.keys
88
+ end
89
+
90
+ def enable key
91
+ if !key.empty? && !@keys[s = key.to_sym]
92
+ @keys[s] = true
93
+ setup_help if s == :help
94
+ setup_flame if s == :flame
95
+ else
96
+ true
97
+ end
98
+ end
99
+
100
+ def disable key
101
+ !key.empty? and @keys.delete(key.to_sym)
102
+ end
103
+
104
+ def toggle key
105
+ if !key.empty?
106
+ if enabled?(key)
107
+ disable(key)
108
+ false
109
+ else
110
+ enable(key)
111
+ true
112
+ end
113
+ end
114
+ end
115
+
116
+ def setup_help
117
+ at_exit {
118
+ $stderr.puts "---\nTracing keys available: #{@available.keys.map{|s| s.to_s}.sort*", "}"
119
+ }
120
+ end
121
+
122
+ def setup_flame
123
+ require 'ruby-prof'
124
+ require 'ruby-prof-flamegraph'
125
+ profile_result = RubyProf.start
126
+ at_exit {
127
+ profile_result2 = RubyProf.stop
128
+ printer = RubyProf::FlameGraphPrinter.new(profile_result2)
129
+ data_file = "/tmp/flamedata_#{Process.pid}.txt"
130
+ svg_file = "/tmp/flamedata_#{Process.pid}.svg"
131
+ flamegraph = File.dirname(__FILE__)+"/flamegraph.pl"
132
+ File.popen("tee #{data_file} | perl #{flamegraph} --countname=ms --width=4800 > #{svg_file}", "w") { |f|
133
+ printer.print(f, {})
134
+ }
135
+ STDERR.puts("Flame graph dumped to file:///#{svg_file}")
136
+ }
137
+ end
138
+
139
+ def setup_debugger
140
+ begin
141
+ require 'ruby-trace '
142
+ Debugger.start # (:post_mortem => true) # Some Ruby versions crash on post-mortem debugging
143
+ rescue LoadError
144
+ # Ok, no debugger, tough luck.
145
+ end
146
+
147
+ if trace :trap
148
+ trap('SIGINT') do
149
+ puts "Stopped at:\n\t"+caller*"\n\t"
150
+ debugger
151
+ true # Stopped on SIGINT
152
+ end
153
+ end
154
+
155
+ errors = []
156
+ (
157
+ [ENV["DEBUG_PREFERENCE"]].compact +
158
+ [
159
+ 'byebug',
160
+ 'pry',
161
+ 'debugger',
162
+ 'ruby-trace '
163
+ ]
164
+ ).each do |debugger|
165
+ begin
166
+ require debugger
167
+ if debugger == 'byebug'
168
+ Kernel.class_eval do
169
+ alias_method :debugger, :byebug
170
+ end
171
+ end
172
+ ::Debugger.start if (const_get(::Debugger) rescue nil)
173
+ return
174
+ rescue LoadError => e
175
+ errors << e
176
+ end
177
+ end
178
+
179
+ # Report when we couldn't load any debugger
180
+ $stderr.p errors
181
+ end
182
+
183
+ def setup_firstaid
184
+ if trace :firstaid
185
+ puts "Preparing first aid kit"
186
+ ::Exception.class_eval do
187
+ alias_method :firstaid_initialize, :initialize
188
+
189
+ def initialize *args, &b
190
+ send(:firstaid_initialize, *args, &b)
191
+ return if NoMethodError === self && message =~ /^undefined method `to_ary' for \#<Gem::Specification/
192
+ return if LoadError == self
193
+ puts "Stopped due to #{self.class}: #{message} at "+caller*"\n\t"
194
+ debugger
195
+ true # Stopped in Exception constructor
196
+ end
197
+ end
198
+ end
199
+ end
200
+
201
+ def display key, msg
202
+ puts msg
203
+ end
204
+
205
+ private
206
+ def show(*args)
207
+ key, enabled_prefix = *selected?(args)
208
+
209
+ # Emit the message if enabled or a parent is:
210
+ if enabled_prefix && args.size > 0
211
+ message =
212
+ "\##{enabled_prefix} " +
213
+ ' '*@indent +
214
+ args.
215
+ map{|a| a.respond_to?(:call) ? a.call : a}.
216
+ join(' ')
217
+
218
+ if @delayed == true
219
+ @delayed = message # Arrange to display this message later, if necessary
220
+ elsif @delayed
221
+ display key, @delayed # Display a delayed message, then the current one
222
+ @delayed = nil
223
+ display key, message
224
+ else
225
+ display key, message
226
+ end
227
+ end
228
+ @indent += (enabled_prefix ? 1 : 0)
229
+ !!enabled_prefix
230
+ end
231
+
232
+ def selected?(args)
233
+ # Figure out whether this trace is enabled (itself or by :all), if it nests, and if we should print the key:
234
+ key =
235
+ if Symbol === args[0]
236
+ control = args.shift
237
+ case s = control.to_s
238
+ when /!\Z/ # Enable all nested trace calls
239
+ nested = true
240
+ s.sub(/!\Z/, '').to_sym
241
+ when /\?\Z/ # Delay this message until a nested active trace
242
+ @delayed = true
243
+ s.sub(/\?\Z/, '').to_sym
244
+ else
245
+ control
246
+ end
247
+ else
248
+ :all
249
+ end
250
+
251
+ @available[key] ||= key # Remember that this trace was requested, for help
252
+ if @nested || # This trace is enabled because it's in a nested block
253
+ @keys[key] || # This trace is enabled in its own right
254
+ @keys[:all] # This trace is enabled because all are
255
+ if @keys[:keys] || @keys[:all] # Use a formatting prefix?
256
+ enabled_prefix = " %-15s"%key
257
+ @keys[key] = enabled_prefix if @keys[key] == true # Save the formatting prefix
258
+ else
259
+ enabled_prefix = ''
260
+ end
261
+ @nested ||= nested # Activate nesting, if requested
262
+ end
263
+
264
+ [key, enabled_prefix]
265
+ end
266
+
267
+ end
268
+ end
269
+
270
+ # Make the trace method globally available:
271
+ class Object
272
+ def trace *args, &block
273
+ (Tracing.tracer ||= Tracing::Tracer.new).trace(*args, &block)
274
+ end
275
+ end
276
+
277
+ # Load the ruby debugger before everything else, if requested
278
+ if trace(:debug) or trace(:firstaid) or trace(:trap)
279
+ trace.setup_debugger
280
+ trace.setup_firstaid
281
+ end
data/tracing.gemspec ADDED
@@ -0,0 +1,44 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tracing/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "tracing"
8
+ spec.version = Tracing::VERSION
9
+ spec.authors = ["Clifford Heath"]
10
+ spec.email = ["clifford.heath@gmail.com"]
11
+ spec.date = "2015-10-02"
12
+
13
+ spec.summary = "A nested tracing API for user defined trace classes"
14
+ spec.description = %q{
15
+ Enable tracing by setting the TRACE environment variable to a list of the
16
+ names of trace classes you want to investigate. The enabled tracing is
17
+ generated in a nested format, with significant support for exceptions and
18
+ debugging.
19
+ }
20
+ spec.homepage = "https://github.com/cjheath/tracing"
21
+ spec.license = "MIT"
22
+
23
+ spec.bindir = "exe"
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ["lib"]
26
+
27
+ spec.extra_rdoc_files = [
28
+ "LICENSE.txt",
29
+ "README.rdoc"
30
+ ]
31
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
32
+
33
+ spec.add_runtime_dependency(%q<rbtree-pure>, [">= 0.1.1", "~> 0"])
34
+
35
+ spec.add_development_dependency "bundler", ">= 1.10", "~> 1.10.6"
36
+ spec.add_development_dependency "rake", "~> 10.0"
37
+ spec.add_development_dependency "rspec", "~> 3.3"
38
+
39
+ spec.add_runtime_dependency(%q<ruby-debug>, ["~> 0"]) if RUBY_VERSION < "1.9"
40
+ spec.add_runtime_dependency(%q<debugger>, ["~> 1"]) if RUBY_VERSION =~ /^1\.9/ or RUBY_VERSION =~ /^2\.0/
41
+ spec.add_runtime_dependency(%q<byebug>, ["~> 1"]) if RUBY_VERSION =~ /^2\.1/
42
+ # spec.add_development_dependency(%q<pry>, ["~> 0"]) # rbx, jruby
43
+ end
44
+
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tracing
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Clifford Heath
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-10-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rbtree-pure
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.1
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.1.1
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.10'
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: 1.10.6
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '1.10'
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: 1.10.6
53
+ - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '10.0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '10.0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rspec
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '3.3'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '3.3'
81
+ - !ruby/object:Gem::Dependency
82
+ name: byebug
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '1'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '1'
95
+ description: |2
96
+
97
+ Enable tracing by setting the TRACE environment variable to a list of the
98
+ names of trace classes you want to investigate. The enabled tracing is
99
+ generated in a nested format, with significant support for exceptions and
100
+ debugging.
101
+ email:
102
+ - clifford.heath@gmail.com
103
+ executables: []
104
+ extensions: []
105
+ extra_rdoc_files:
106
+ - LICENSE.txt
107
+ - README.rdoc
108
+ files:
109
+ - Gemfile
110
+ - LICENSE.txt
111
+ - README.rdoc
112
+ - Rakefile
113
+ - VERSION
114
+ - lib/tracing.rb
115
+ - lib/tracing/version.rb
116
+ - tracing.gemspec
117
+ homepage: https://github.com/cjheath/tracing
118
+ licenses:
119
+ - MIT
120
+ metadata: {}
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubyforge_project:
137
+ rubygems_version: 2.2.2
138
+ signing_key:
139
+ specification_version: 4
140
+ summary: A nested tracing API for user defined trace classes
141
+ test_files: []