tracing 2.0.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.
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: []