scrolls 0.0.9 → 0.1.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.
@@ -1,3 +1,3 @@
1
1
  module Scrolls
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/scrolls.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "thread"
2
+ require "atomic"
2
3
 
3
4
  require "scrolls/version"
4
5
 
@@ -13,8 +14,12 @@ module Scrolls
13
14
  Log.log_exception(data, e)
14
15
  end
15
16
 
17
+ def global_context(data)
18
+ Log.global_context = data
19
+ end
20
+
16
21
  def context(data, &blk)
17
- Log.set_context(data, &blk)
22
+ Log.with_context(data, &blk)
18
23
  end
19
24
 
20
25
  module Log
@@ -34,7 +39,15 @@ module Scrolls
34
39
  "debug" => 7
35
40
  }
36
41
 
37
- attr_accessor :stream, :context
42
+ attr_accessor :stream
43
+
44
+ def context
45
+ Thread.current[:scrolls_context] ||= {}
46
+ end
47
+
48
+ def context=(hash)
49
+ Thread.current[:scrolls_context] = hash
50
+ end
38
51
 
39
52
  def start(out = nil)
40
53
  # This allows log_exceptions below to pick up the defined output,
@@ -42,6 +55,7 @@ module Scrolls
42
55
  @defined = out.nil? ? false : true
43
56
 
44
57
  sync_stream(out)
58
+ @global_context = Atomic.new({})
45
59
  end
46
60
 
47
61
  def sync_stream(out = nil)
@@ -87,11 +101,8 @@ module Scrolls
87
101
  end
88
102
 
89
103
  def log(data, &blk)
90
- if @context
91
- logdata = @context.merge(data)
92
- else
93
- logdata = data
94
- end
104
+ merged_context = @global_context.value.merge(context)
105
+ logdata = merged_context.merge(data)
95
106
 
96
107
  unless blk
97
108
  write(logdata)
@@ -145,23 +156,16 @@ module Scrolls
145
156
  end
146
157
  end
147
158
 
148
- def set_context(prefix, &blk)
149
- # Initialize an empty context if the variable doesn't exist
150
- @context = {} unless @context
151
- @stash = [] unless @stash
152
- @stash << @context
153
- # Why isn't this merging
154
- @context = @context.merge(prefix)
155
-
156
- if blk
157
- yield
158
- @context = @stash.pop
159
- end
159
+ def with_context(prefix)
160
+ return unless block_given?
161
+ old_context = context
162
+ self.context = old_context.merge(prefix)
163
+ yield if block_given?
164
+ self.context = old_context
160
165
  end
161
166
 
162
- def clear_context
163
- @stash = []
164
- @context = {}
167
+ def global_context=(data)
168
+ @global_context.update { |_| data }
165
169
  end
166
170
 
167
171
  end
data/scrolls.gemspec CHANGED
@@ -13,4 +13,5 @@ Gem::Specification.new do |gem|
13
13
  gem.name = "scrolls"
14
14
  gem.require_paths = ["lib"]
15
15
  gem.version = Scrolls::VERSION
16
+ gem.add_dependency("atomic", "~> 1.0.0")
16
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scrolls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,19 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-25 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-04-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: atomic
16
+ requirement: &70343059161980 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70343059161980
14
25
  description: Logging, easier, more consistent.
15
26
  email:
16
27
  - curt@heroku.com