activefacts-api 1.7.1 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/activefacts/tracer.rb +54 -26
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3bea91791db9be24a0d7dbb300fd657c4945bd9c
4
- data.tar.gz: b81af550504897b814940f439a046741718fc880
3
+ metadata.gz: 99ba306878626910f3539a86a128e850c02ed902
4
+ data.tar.gz: 050b900183c93c6ba9227e6ccf2fb8329481b090
5
5
  SHA512:
6
- metadata.gz: 21fca201df25802d84e33b537cc6afafd761c5b35ea8904b5ea74336ed4727e0384abec38b8ef179817a3ff5c7eb929b4037c2c31ebde21d2bd8f4166b5e67d9
7
- data.tar.gz: b007443b14e1030ac500a59b667d94599ccaee429da3f242f42dff66d03c7fe315f46609f462898e6b3b9245d31a55979a11dff78276a3e11daea70705baf0c4
6
+ metadata.gz: 7a83fa68aceea56997e9fe409bab5aa4db70af7e34a85ba032a3e03064f63527f29336a6849d4356b1f252581769e6d962d763d92f0857a788d022200f6ea431
7
+ data.tar.gz: ecceb3e5b2f746258de072f105f88ac3b18bedf2c49b8755715cb74c9820d801ba9350e5ed95cfbfd2409437b0050b3ee792988437d73efc4732c939fbb8bb82
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.1
1
+ 1.8.0
@@ -3,31 +3,39 @@
3
3
  #
4
4
  # The trace() method supports indented tracing.
5
5
  #
6
+ # Trace keys:
6
7
  # The first argument is normally a symbol which is the key for related trace calls.
7
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)
8
10
  #
11
+ # Message arguments:
9
12
  # Each subsequent argument is either
10
13
  # - a String (or anything that can be join()ed), or
11
14
  # - a Proc (or anything that can be called) that returns such a string.
12
15
  # Proc arguments will be called only if the trace key is enabled.
13
16
  # If the key is enabled (or not present) the Trace strings will be joined and emitted.
14
17
  #
18
+ # Trace blocks:
15
19
  # A block passed to the trace method will always be called, and trace will always return its value.
16
20
  # Any trace emitted from within such a block will be indented if the current trace key is enabled.
17
21
  #
18
- # As a special case, a call to trace with a key ending in _ is enabled if the base key is
19
- # enabled, but enabled all nested calls to trace whether or not their key is enabled.
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
20
27
  #
28
+ # Testing whether a trace key is enabled:
21
29
  # A call to trace with a key but without a block will return true if the key is enabled
22
30
  #
23
31
  # A call to trace with no arguments returns the Tracer object itself.
24
32
  #
25
- # Built-in trace key behaviour:
33
+ # Built-in trace keys and behaviour:
26
34
  # help - list (at exit) all trace keys that became available during the run
27
35
  # all - enable all trace keys
28
- # keys - display trace keys on every trace message (automatically enabled by :all)
36
+ # keys - display the trace key for every trace message (automatically enabled by :all)
29
37
  # debug - prepare a Ruby debugger at the start of the run, so it has the full context available
30
- # firstaid - stop inside the constructor for any exception so you can inspect the local context of the cause
38
+ # firstaid - enter the debugger inside the Exception constructor so you can inspect the local context
31
39
  # trap - trap SIGINT (^C) in a block that allows inspecting or continuing execution (not all debuggers support this)
32
40
  # flame - use ruby-prof-flamegraph to display the performance profile as a flame graph using SVG
33
41
  #
@@ -45,6 +53,7 @@ module ActiveFacts
45
53
  @indent = 0 # Current nesting level of enabled trace blocks
46
54
  @nested = false # Set when a block enables all enclosed tracing
47
55
  @available = {} # Hash of available trace keys, accumulated during the run
56
+ @delayed = nil # A delayed message, emitted only if the enclosed block emits tracing
48
57
 
49
58
  @keys = {}
50
59
  if (e = ENV["TRACE"])
@@ -54,11 +63,11 @@ module ActiveFacts
54
63
 
55
64
  def trace(*args, &block)
56
65
  begin
57
- old_indent, old_nested, enabled = @indent, @nested, show(*args)
58
- # Apologies for this monstrosity, but it reduces the steps when single-stepping:
59
- block ? yield : (args.size == 0 ? self : (enabled == 1 ? true : false))
66
+ old_indent, old_nested, old_delayed, enabled = @indent, @nested, @delayed, show(*args)
67
+ # This monstrosity reduces the steps when single-stepping:
68
+ block ? yield : (args.size == 0 ? self : enabled)
60
69
  ensure
61
- @indent, @nested = old_indent, old_nested
70
+ @indent, @nested, @delayed = old_indent, old_nested, old_delayed
62
71
  end
63
72
  end
64
73
 
@@ -179,18 +188,28 @@ module ActiveFacts
179
188
 
180
189
  private
181
190
  def show(*args)
182
- enabled, key_to_show = selected?(args)
191
+ enabled_prefix = selected?(args)
183
192
 
184
193
  # Emit the message if enabled or a parent is:
185
- if args.size > 0 && enabled == 1
186
- puts "\##{key_to_show} " +
194
+ if enabled_prefix && args.size > 0
195
+ message =
196
+ "\##{enabled_prefix} " +
187
197
  ' '*@indent +
188
198
  args.
189
- map{|a| a.respond_to?(:call) ? a.call : a}.
199
+ map{|a| a.respond_to?(:call) ? a.call : a}.
190
200
  join(' ')
201
+
202
+ if @delayed == true
203
+ @delayed = message # Arrange to display this message later, if necessary
204
+ elsif @delayed
205
+ puts @delayed # Display a delayed message, then the current one
206
+ puts message
207
+ else
208
+ puts message
209
+ end
191
210
  end
192
- @indent += enabled
193
- enabled
211
+ @indent += (enabled_prefix ? 1 : 0)
212
+ !!enabled_prefix
194
213
  end
195
214
 
196
215
  def selected?(args)
@@ -198,9 +217,13 @@ module ActiveFacts
198
217
  key =
199
218
  if Symbol === args[0]
200
219
  control = args.shift
201
- if (s = control.to_s) =~ /_\Z/
220
+ case s = control.to_s
221
+ when /_\Z/ # Enable all nested trace calls
202
222
  nested = true
203
- s.sub(/_\Z/, '').to_sym # Avoid creating new strings willy-nilly
223
+ s.sub(/_\Z/, '').to_sym
224
+ when /\?\Z/ # Delay this message until a nested active trace
225
+ @delayed = true
226
+ s.sub(/\?\Z/, '').to_sym
204
227
  else
205
228
  control
206
229
  end
@@ -208,15 +231,20 @@ module ActiveFacts
208
231
  :all
209
232
  end
210
233
 
211
- @available[key] ||= key # Remember that this trace was requested, for help
212
- enabled = @nested || # This trace is enabled because it's in a nested block
213
- @keys[key] || # This trace is enabled in its own right
214
- @keys[:all] # This trace is enabled because all are
215
- @nested = nested
216
- [
217
- (enabled ? 1 : 0),
218
- @keys[:keys] || @keys[:all] ? " %-15s"%control : nil
219
- ]
234
+ @available[key] ||= key # Remember that this trace was requested, for help
235
+ @nested ||= nested # Activate nesting, if requested
236
+ if @nested || # This trace is enabled because it's in a nested block
237
+ @keys[key] || # This trace is enabled in its own right
238
+ @keys[:all] # This trace is enabled because all are
239
+ if @keys[:keys] || @keys[:all] # Use a formatting prefix?
240
+ enabled_prefix = " %-15s"%key
241
+ @keys[key] = enabled_prefix if @keys[key] == true # Save the formatting prefix
242
+ else
243
+ enabled_prefix = ''
244
+ end
245
+ end
246
+
247
+ enabled_prefix
220
248
  end
221
249
 
222
250
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activefacts-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clifford Heath
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-25 00:00:00.000000000 Z
11
+ date: 2015-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbtree-pure