lspace 0.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
data/lib/lspace.rb CHANGED
@@ -65,7 +65,7 @@ class LSpace
65
65
  # Update the LSpace-variable with the given name.
66
66
  #
67
67
  # Bear in mind that any code using this LSpace will see this change, and consider
68
- # using {LSpace.with} instead to localize your changes.
68
+ # using {LSpace.with} or {LSpace.fork} instead to localize your changes.
69
69
  #
70
70
  # This method is mostly useful for setting up a new LSpace before any code is
71
71
  # using it, and has no effect on parent LSpaces.
@@ -76,6 +76,18 @@ class LSpace
76
76
  self.current = previous
77
77
  end
78
78
 
79
+ # Replace the current LSpace with a fork of it.
80
+ #
81
+ # Forking the Lspace means that values changed with LSpace#[]= no
82
+ # longer affect parent LSpaces.
83
+ #
84
+ # This should be used carefully - it may confuse around_filters,
85
+ # since they will see a different LSpace after the block is called
86
+ # than before.
87
+ def self.fork
88
+ self.current = LSpace.new({}, self.current)
89
+ end
90
+
79
91
  # Create a closure that will re-enter the current LSpace when the block is called.
80
92
  #
81
93
  # @example
data/lspace.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "lspace"
3
- s.version = "0.6"
3
+ s.version = "0.7"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.author = "Conrad Irwin"
6
6
  s.email = "conrad.irwin@gmail.com"
@@ -82,6 +82,30 @@ describe LSpace do
82
82
  end
83
83
  end
84
84
 
85
+ describe ".fork" do
86
+ it "should not propagate variable changes to the parent LSpace" do
87
+ LSpace.enter(@lspace) do
88
+ LSpace.fork
89
+ LSpace[:foo] = 5
90
+ LSpace[:foo].should == 5
91
+ end
92
+ @lspace[:foo].should be_nil
93
+ end
94
+
95
+ it "should show the new forked LSpace to around_filters after returning" do
96
+ @lspace.around_filter do |&block|
97
+ LSpace[:foo].should == 4
98
+ block.call
99
+ LSpace[:foo].should == 5
100
+ end
101
+ @lspace[:foo] = 4
102
+ @lspace.enter do
103
+ LSpace.fork
104
+ LSpace[:foo] = 5
105
+ end
106
+ end
107
+ end
108
+
85
109
  describe ".preserve" do
86
110
  it "should delegate to LSpace.current" do
87
111
  LSpace.current.should_receive(:wrap).once
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lspace
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.6'
4
+ version: '0.7'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,120 +9,120 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-07 00:00:00.000000000 Z
12
+ date: 2013-02-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rspec
15
+ type: :development
16
16
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
17
  requirements:
19
18
  - - ! '>='
20
19
  - !ruby/object:Gem::Version
21
20
  version: '0'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
21
  none: false
22
+ version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
27
+ none: false
28
+ prerelease: false
29
+ name: rspec
30
30
  - !ruby/object:Gem::Dependency
31
- name: pry-rescue
31
+ type: :development
32
32
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
33
  requirements:
35
34
  - - ! '>='
36
35
  - !ruby/object:Gem::Version
37
36
  version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
37
  none: false
38
+ version_requirements: !ruby/object:Gem::Requirement
42
39
  requirements:
43
40
  - - ! '>='
44
41
  - !ruby/object:Gem::Version
45
42
  version: '0'
43
+ none: false
44
+ prerelease: false
45
+ name: pry-rescue
46
46
  - !ruby/object:Gem::Dependency
47
- name: pry-stack_explorer
47
+ type: :development
48
48
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
49
  requirements:
51
50
  - - ! '>='
52
51
  - !ruby/object:Gem::Version
53
52
  version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
53
  none: false
54
+ version_requirements: !ruby/object:Gem::Requirement
58
55
  requirements:
59
56
  - - ! '>='
60
57
  - !ruby/object:Gem::Version
61
58
  version: '0'
59
+ none: false
60
+ prerelease: false
61
+ name: pry-stack_explorer
62
62
  - !ruby/object:Gem::Dependency
63
- name: eventmachine
63
+ type: :development
64
64
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
65
  requirements:
67
66
  - - ! '>='
68
67
  - !ruby/object:Gem::Version
69
68
  version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
69
  none: false
70
+ version_requirements: !ruby/object:Gem::Requirement
74
71
  requirements:
75
72
  - - ! '>='
76
73
  - !ruby/object:Gem::Version
77
74
  version: '0'
75
+ none: false
76
+ prerelease: false
77
+ name: eventmachine
78
78
  - !ruby/object:Gem::Dependency
79
- name: celluloid
79
+ type: :development
80
80
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
81
  requirements:
83
82
  - - ! '>='
84
83
  - !ruby/object:Gem::Version
85
84
  version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
85
  none: false
86
+ version_requirements: !ruby/object:Gem::Requirement
90
87
  requirements:
91
88
  - - ! '>='
92
89
  - !ruby/object:Gem::Version
93
90
  version: '0'
91
+ none: false
92
+ prerelease: false
93
+ name: celluloid
94
94
  - !ruby/object:Gem::Dependency
95
- name: yard
95
+ type: :development
96
96
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
97
  requirements:
99
98
  - - ! '>='
100
99
  - !ruby/object:Gem::Version
101
100
  version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
101
  none: false
102
+ version_requirements: !ruby/object:Gem::Requirement
106
103
  requirements:
107
104
  - - ! '>='
108
105
  - !ruby/object:Gem::Version
109
106
  version: '0'
107
+ none: false
108
+ prerelease: false
109
+ name: yard
110
110
  - !ruby/object:Gem::Dependency
111
- name: redcarpet
111
+ type: :development
112
112
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
113
  requirements:
115
114
  - - ! '>='
116
115
  - !ruby/object:Gem::Version
117
116
  version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
117
  none: false
118
+ version_requirements: !ruby/object:Gem::Requirement
122
119
  requirements:
123
120
  - - ! '>='
124
121
  - !ruby/object:Gem::Version
125
122
  version: '0'
123
+ none: false
124
+ prerelease: false
125
+ name: redcarpet
126
126
  description: Provides the convenience of global variables, without the safety concerns.
127
127
  email: conrad.irwin@gmail.com
128
128
  executables: []
@@ -155,20 +155,20 @@ rdoc_options: []
155
155
  require_paths:
156
156
  - lib
157
157
  required_ruby_version: !ruby/object:Gem::Requirement
158
- none: false
159
158
  requirements:
160
159
  - - ! '>='
161
160
  - !ruby/object:Gem::Version
162
161
  version: '0'
163
- required_rubygems_version: !ruby/object:Gem::Requirement
164
162
  none: false
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
164
  requirements:
166
165
  - - ! '>='
167
166
  - !ruby/object:Gem::Version
168
167
  version: '0'
168
+ none: false
169
169
  requirements: []
170
170
  rubyforge_project:
171
- rubygems_version: 1.8.24
171
+ rubygems_version: 1.8.25
172
172
  signing_key:
173
173
  specification_version: 3
174
174
  summary: Provides local global storage