brassbound-dci 0.5.1 → 0.5.2

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.
@@ -30,12 +30,12 @@ module Brassbound::Context
30
30
 
31
31
  require 'brassbound/util'
32
32
 
33
+ # The currently executing context. Stored as a thread-local variable, so
34
+ # each thread can have its own current context.
33
35
  def self.current
34
36
  Thread.current[:brassbound_context]
35
37
  end
36
38
 
37
- RoleMapping = Struct.new(:role_module, :data_object)
38
-
39
39
  # A Hash containing all of the declared role mappings for this context.
40
40
  # The keys of the Hash are the declared role names, while the values
41
41
  # are the associated RoleMapping objects.
@@ -149,15 +149,25 @@ module Brassbound::Context
149
149
  # After the #execute method has returned, it will unapply all role mappings
150
150
  # and set the current context back to its previous value.
151
151
  def call(*args)
152
+ in_context do
153
+ self.execute(*args)
154
+ end
155
+ end
156
+
157
+ private
158
+
159
+ def in_context(&block)
152
160
  old_context = ::Brassbound::Context.current
153
161
  Thread.current[:brassbound_context] = self
154
162
 
155
163
  roles.each_key(&method(:apply_role))
156
164
  begin
157
- self.execute(*args)
165
+ block.call
158
166
  ensure
159
167
  roles.each_key(&method(:unapply_role))
160
168
  Thread.current[:brassbound_context] = old_context
161
169
  end
162
170
  end
171
+
172
+ RoleMapping = Struct.new(:role_module, :data_object)
163
173
  end
@@ -1,4 +1,5 @@
1
1
  module Util
2
+ # Convert a CamelCaseString to an underscore_string.
2
3
  def self.underscore(str)
3
4
  str.gsub(/::/, '/').
4
5
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
@@ -1,3 +1,3 @@
1
1
  module Brassbound
2
- VERSION = "0.5.1"
2
+ VERSION = "0.5.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brassbound-dci
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-05 00:00:00.000000000 Z
12
+ date: 2012-05-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70224871995420 !ruby/object:Gem::Requirement
16
+ requirement: &70188456933260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 2.10.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70224871995420
24
+ version_requirements: *70188456933260
25
25
  description: Brassbound is a simple but strict implementation of the Data, Context,
26
26
  and Interaction (DCI) paradigm for Ruby.
27
27
  email: