surrounded 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fcd5a235a5131c97780460591911ce275b460907
4
- data.tar.gz: e5662f4dfbfdae0f22f3832b7d259c7bb6daa9e0
3
+ metadata.gz: ea4a7bea400ebf873e76985cffb1ddff7aa481ff
4
+ data.tar.gz: 5baeada83ee58583aa93f3e5764565e18983f2a5
5
5
  SHA512:
6
- metadata.gz: 6ee26aa514d524c218dde785998a696b90686e3d3952a094613920ff987e2da1abf387c1d6e44b114e8f5093299979a9d7c26f721956ab036a4a67e55a32bcfb
7
- data.tar.gz: f16d747a27f0af4fdfe0b4b9376a87d3d1a2a026b91d6c8019fc89ca9256805a9ad6bc911405677b19c89d1089a5310f3fed375046d6734b5249b724ad5698f5
6
+ metadata.gz: f2d4bc4c9435035b92a93fb78f51942e1b8223c0012c5e48d61cb1b0a11c674144604e32e22c9c7a7e94b00721625e47c38b79e9157fb0e82d6a43ef686f3f3b
7
+ data.tar.gz: a5273eca6dbfb05540166d248ffb9d4b8434721f7e6241fc4682d051f823356f547f0ef4a25ebfa6f8a35d975e25c09a9d28257639fbcafef81c235b83d3fbed
@@ -16,7 +16,7 @@ module Surrounded
16
16
  end
17
17
  alias_method :guard, :disallow
18
18
 
19
- def trigger_return_content(name)
19
+ def trigger_return_content(name, *args, &block)
20
20
  %{
21
21
 
22
22
  method_restrictor = "disallow_#{name}?"
@@ -29,7 +29,8 @@ module Surrounded
29
29
  end
30
30
 
31
31
  def define_access_method(name, &block)
32
- class_eval {
32
+ mod = Module.new
33
+ mod.class_eval {
33
34
  define_method "disallow_#{name}?" do
34
35
  begin
35
36
  apply_roles if __apply_role_policy == :trigger
@@ -39,6 +40,8 @@ module Surrounded
39
40
  end
40
41
  end
41
42
  }
43
+ const_set("SurroundedAccess#{name}", mod)
44
+ include mod
42
45
  end
43
46
 
44
47
  module AccessMethods
@@ -0,0 +1,33 @@
1
+ module Surrounded
2
+ module Context
3
+ module Initializing
4
+ def new(*args, &block)
5
+ instance = allocate
6
+ instance.send(:preinitialize)
7
+ instance.send(:initialize, *args, &block)
8
+ instance.send(:postinitialize)
9
+ instance
10
+ end
11
+
12
+ # Shorthand for creating an instance level initialize method which
13
+ # handles the mapping of the given arguments to their named role.
14
+ def initialize(*setup_args)
15
+ private_attr_reader(*setup_args)
16
+
17
+ mod = Module.new
18
+ line = __LINE__
19
+ mod.class_eval "
20
+ def initialize(#{setup_args.join(',')})
21
+ preinitialize
22
+ arguments = method(__method__).parameters.map{|arg| eval(arg[1].to_s) }
23
+ @role_map = RoleMap.new
24
+ map_roles(#{setup_args}.zip(arguments))
25
+ postinitialize
26
+ end
27
+ ", __FILE__, line
28
+ const_set("ContextInitializer", mod)
29
+ include mod
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,64 @@
1
+ # Some features are only available in versions of Ruby
2
+ # where this method is true
3
+ unless defined?(module_method_rebinding?)
4
+ def module_method_rebinding?
5
+ return @__module_method_rebinding__ if defined?(@__module_method_rebinding__)
6
+ sample_method = Enumerable.instance_method(:to_a)
7
+ @__module_method_rebinding__ = begin
8
+ !!sample_method.bind(Object.new)
9
+ rescue TypeError
10
+ false
11
+ end
12
+ end
13
+ end
14
+
15
+ module Surrounded
16
+ module Context
17
+ module RoleBuilders
18
+
19
+ # Define behaviors for your role players
20
+ def role(name, type=nil, &block)
21
+ role_type = type || default_role_type
22
+ if role_type == :module
23
+ mod_name = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase }
24
+ mod = Module.new(&block)
25
+ mod.send(:include, ::Surrounded)
26
+ private_const_set(mod_name, mod)
27
+ else
28
+ meth = method(role_type)
29
+ meth.call(name, &block)
30
+ end
31
+ rescue NameError => e
32
+ raise e.extend(InvalidRoleType)
33
+ end
34
+ alias_method :role_methods, :role
35
+
36
+ # Create a named behavior for a role using the standard library SimpleDelegator.
37
+ def wrap(name, &block)
38
+ require 'delegate'
39
+ wrapper_name = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase }
40
+ klass = private_const_set(wrapper_name, Class.new(SimpleDelegator, &block))
41
+ klass.send(:include, Surrounded)
42
+ end
43
+ alias_method :wrapper, :wrap
44
+
45
+
46
+ if module_method_rebinding?
47
+ # Create an object which will bind methods to the role player
48
+ def interface(name, &block)
49
+ class_basename = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase }
50
+ interface_name = class_basename + 'Interface'
51
+
52
+ behavior = private_const_set(interface_name, Module.new(&block))
53
+
54
+ require 'surrounded/context/negotiator'
55
+ undef_method(name)
56
+ define_method(name) do
57
+ instance_variable_set("@#{name}", Negotiator.new(role_map.assigned_player(name), behavior))
58
+ end
59
+ end
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -1,23 +1,11 @@
1
1
  require 'set'
2
2
  require 'surrounded/context/role_map'
3
+ require 'surrounded/context/role_builders'
4
+ require 'surrounded/context/initializing'
3
5
  require 'surrounded/access_control'
4
6
  require 'surrounded/shortcuts'
5
7
  require 'surrounded/east_oriented'
6
8
 
7
- # Some features are only available in versions of Ruby
8
- # where this method is true
9
- unless defined?(module_method_rebinding?)
10
- def module_method_rebinding?
11
- return @__module_method_rebinding__ if defined?(@__module_method_rebinding__)
12
- sample_method = Enumerable.instance_method(:to_a)
13
- @__module_method_rebinding__ = begin
14
- !!sample_method.bind(Object.new)
15
- rescue TypeError
16
- false
17
- end
18
- end
19
- end
20
-
21
9
  # Extend your classes with Surrounded::Context to handle their
22
10
  # initialization and application of behaviors to the role players
23
11
  # passed into the constructor.
@@ -27,20 +15,13 @@ end
27
15
  module Surrounded
28
16
  module Context
29
17
  def self.extended(base)
18
+ base.extend RoleBuilders, Initializing
30
19
  base.class_eval {
31
20
  @triggers = Set.new
32
21
  include InstanceMethods
33
22
  }
34
23
  end
35
24
 
36
- def new(*args, &block)
37
- instance = allocate
38
- instance.send(:preinitialize)
39
- instance.send(:initialize, *args, &block)
40
- instance.send(:postinitialize)
41
- instance
42
- end
43
-
44
25
  # Provides a Set of all available trigger methods where
45
26
  # behaviors will be applied to the roles before execution
46
27
  # and removed afterward.
@@ -87,64 +68,6 @@ module Surrounded
87
68
  @__apply_role_policy ||= :trigger
88
69
  end
89
70
 
90
- # Shorthand for creating an instance level initialize method which
91
- # handles the mapping of the given arguments to their named role.
92
- def initialize(*setup_args)
93
- private_attr_reader(*setup_args)
94
-
95
- class_eval "
96
- def initialize(#{setup_args.join(',')})
97
- preinitialize
98
- arguments = method(__method__).parameters.map{|arg| eval(arg[1].to_s) }
99
- @role_map = RoleMap.new
100
- map_roles(#{setup_args}.zip(arguments))
101
- postinitialize
102
- end
103
- ", __FILE__, __LINE__
104
- end
105
-
106
- # Create a named behavior for a role using the standard library SimpleDelegator.
107
- def wrap(name, &block)
108
- require 'delegate'
109
- wrapper_name = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase }
110
- klass = private_const_set(wrapper_name, Class.new(SimpleDelegator, &block))
111
- klass.send(:include, Surrounded)
112
- end
113
- alias_method :wrapper, :wrap
114
-
115
- if module_method_rebinding?
116
- # Create an object which will bind methods to the role player
117
- def interface(name, &block)
118
- class_basename = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase }
119
- interface_name = class_basename + 'Interface'
120
-
121
- behavior = private_const_set(interface_name, Module.new(&block))
122
-
123
- require 'surrounded/context/negotiator'
124
- undef_method(name)
125
- define_method(name) do
126
- instance_variable_set("@#{name}", Negotiator.new(role_map.assigned_player(name), behavior))
127
- end
128
- end
129
- end
130
-
131
- # Define behaviors for your role players
132
- def role(name, type=nil, &block)
133
- role_type = type || default_role_type
134
- if role_type == :module
135
- mod_name = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase }
136
- mod = Module.new(&block)
137
- mod.send(:include, ::Surrounded)
138
- private_const_set(mod_name, mod)
139
- else
140
- meth = method(role_type)
141
- meth.call(name, &block)
142
- end
143
- rescue NameError => e
144
- raise e.extend(InvalidRoleType)
145
- end
146
- alias_method :role_methods, :role
147
-
148
71
  # Creates a context instance method which will apply behaviors to role players
149
72
  # before execution and remove the behaviors after execution.
150
73
  #
@@ -188,8 +111,10 @@ module Surrounded
188
111
  end
189
112
 
190
113
  def define_trigger_wrap_method(name)
191
- class_eval %{
192
- def #{name}
114
+ mod = Module.new
115
+ line = __LINE__
116
+ mod.class_eval %{
117
+ def #{name}(*args, &block)
193
118
  begin
194
119
  apply_roles if __apply_role_policy == :trigger
195
120
 
@@ -199,11 +124,13 @@ module Surrounded
199
124
  remove_roles if __apply_role_policy == :trigger
200
125
  end
201
126
  end
202
- }, __FILE__, __LINE__
127
+ }, __FILE__, line
128
+ const_set("SurroundedTrigger#{name.to_s.upcase.sub(/\?\z/,'Query')}", mod)
129
+ include mod
203
130
  end
204
131
 
205
- def trigger_return_content(name)
206
- %{self.send("__trigger_#{name}")}
132
+ def trigger_return_content(name, *args, &block)
133
+ %{self.send("__trigger_#{name}", *args, &block)}
207
134
  end
208
135
 
209
136
  # === Utility shortcuts
@@ -225,11 +152,15 @@ module Surrounded
225
152
 
226
153
  # Conditional const_get for a named role behavior
227
154
  def role_const(name)
228
- if const_defined?(name)
155
+ if role_const_defined?(name)
229
156
  const_get(name)
230
157
  end
231
158
  end
232
159
 
160
+ def role_const_defined?(name)
161
+ const_defined?(name, false)
162
+ end
163
+
233
164
  module InstanceMethods
234
165
  # Check whether a given name is a role inside the context.
235
166
  # The provided block is used to evaluate whether or not the caller
@@ -266,22 +197,28 @@ module Surrounded
266
197
 
267
198
  def map_roles(role_object_array)
268
199
  role_object_array.each do |role, object|
269
- map_role(role, role_behavior_name(role), object)
270
-
271
- singular_role_name = singularize_name(role)
272
- singular_behavior_name = singularize_name(role_behavior_name(role))
200
+ if self.respond_to?("map_role_#{role}")
201
+ self.send("map_role_#{role}", object)
202
+ else
203
+ map_role(role, role_behavior_name(role), object)
204
+ map_role_collection(role, role_behavior_name(role), object)
205
+ end
206
+ end
207
+ end
273
208
 
274
- if object.respond_to?(:each_with_index) && role_const_defined?(singular_behavior_name)
275
- object.each_with_index do |item, index|
276
- map_role(:"#{singular_role_name}_#{index + 1}", singular_behavior_name, item)
277
- end
209
+ def map_role_collection(role, mod_name, collection)
210
+ singular_role_name = singularize_name(role)
211
+ singular_behavior_name = singularize_name(role_behavior_name(role))
212
+ if collection.respond_to?(:each_with_index) && role_const_defined?(singular_behavior_name)
213
+ collection.each_with_index do |item, index|
214
+ map_role(:"#{singular_role_name}_#{index + 1}", singular_behavior_name, item)
278
215
  end
279
216
  end
280
217
  end
281
218
 
282
219
  def map_role(role, mod_name, object)
283
220
  instance_variable_set("@#{role}", object)
284
- role_map.update(role, mod_name, object)
221
+ role_map.update(role, role_module_basename(mod_name), object)
285
222
  end
286
223
 
287
224
  def __apply_role_policy
@@ -289,12 +226,13 @@ module Surrounded
289
226
  end
290
227
 
291
228
  def add_interface(role, behavior, object)
292
- applicator = behavior.is_a?(Class) ? method(:add_class_interface) : method(:add_module_interface)
229
+ if behavior && role_const_defined?(behavior)
230
+ applicator = role_const(behavior).is_a?(Class) ? method(:add_class_interface) : method(:add_module_interface)
293
231
 
294
- role_player = applicator.call(object, behavior)
295
- map_role(role, role_module_basename(behavior), role_player) if behavior
296
- role_player.send(:store_context, self){}
297
- role_player
232
+ role_player = applicator.call(object, role_const(behavior))
233
+ map_role(role, behavior, role_player)
234
+ end
235
+ role_player || object
298
236
  end
299
237
 
300
238
  def add_module_interface(obj, mod)
@@ -308,34 +246,34 @@ module Surrounded
308
246
  def add_class_interface(obj, klass)
309
247
  wrapper_name = wrap_methods.find{|meth| klass.respond_to?(meth) }
310
248
  return obj if !wrapper_name
311
-
312
249
  klass.method(wrapper_name).call(obj)
313
250
  end
314
251
 
315
252
  def remove_interface(role, behavior, object)
316
- remover_name = (module_removal_methods + unwrap_methods).find{|meth| object.respond_to?(meth) }
317
- object.send(:remove_context) do; end
253
+ if behavior && role_const_defined?(behavior)
254
+ remover_name = (module_removal_methods + unwrap_methods).find{|meth| object.respond_to?(meth) }
255
+ end
318
256
 
319
257
  if remover_name
320
258
  role_player = object.send(remover_name)
321
259
  end
322
260
 
323
- return role_player || object
261
+ role_player || object
324
262
  end
325
263
 
326
264
  def apply_roles
327
- traverse_map method(:add_interface)
265
+ role_map.each do |role, mod_name, object|
266
+ player = add_interface(role, mod_name, object)
267
+ player.send(:store_context, self) do; end
268
+ end
328
269
  end
329
270
 
330
271
  def remove_roles
331
- traverse_map method(:remove_interface)
332
- end
333
-
334
- def traverse_map(applicator)
335
- role_map.each do |role, mod_name, object|
336
- if role_const_defined?(mod_name)
337
- applicator.call(role, role_const(mod_name), object)
272
+ role_map.each do |role, mod_name, player|
273
+ if player.respond_to?(:remove_context, true)
274
+ player.send(:remove_context) do; end
338
275
  end
276
+ remove_interface(role, mod_name, player)
339
277
  end
340
278
  end
341
279
 
@@ -372,7 +310,7 @@ module Surrounded
372
310
  end
373
311
 
374
312
  def role_const_defined?(name)
375
- self.class.const_defined?(name)
313
+ self.class.send(:role_const_defined?, name)
376
314
  end
377
315
 
378
316
  def singularize_name(name)
@@ -2,7 +2,7 @@ module Surrounded
2
2
  module EastOriented
3
3
  # Always return the context object to ensure that a context may
4
4
  # not be asked for information.
5
- def trigger_return_content(name)
5
+ def trigger_return_content(name, *args, &block)
6
6
  %{
7
7
  #{super}
8
8
 
@@ -1,3 +1,7 @@
1
1
  module Surrounded
2
- VERSION = "0.8.3"
2
+ VERSION = "0.8.4"
3
+
4
+ def self.version
5
+ VERSION
6
+ end
3
7
  end
@@ -14,6 +14,8 @@ class ProxyContext
14
14
  "hello from #{name}, the admin interface!"
15
15
  end
16
16
  end
17
+ wrap :task do
18
+ end
17
19
 
18
20
  trigger :do_something do
19
21
  admin.some_admin_method
@@ -29,6 +31,7 @@ class ProxyContext
29
31
  end
30
32
 
31
33
  ProxyUser = Struct.new(:name)
34
+ ProxyUser.send(:include, Surrounded)
32
35
 
33
36
  describe ProxyContext do
34
37
  let(:user){
@@ -4,7 +4,6 @@ require 'test_helper'
4
4
  class WrapperContext
5
5
  extend Surrounded::Context
6
6
 
7
- apply_roles_on(:trigger)
8
7
  initialize(:admin, :task)
9
8
 
10
9
  wrap :admin do
@@ -12,6 +11,7 @@ class WrapperContext
12
11
  'hello from the admin wrapper!'
13
12
  end
14
13
  end
14
+ wrap :task do; end
15
15
 
16
16
  trigger :do_something do
17
17
  admin.some_admin_method
@@ -62,6 +62,7 @@ describe Surrounded::Context, '.role' do
62
62
  end
63
63
 
64
64
  class Hello
65
+ include Surrounded
65
66
  def hello
66
67
  'hello'
67
68
  end
@@ -43,6 +43,20 @@ describe Surrounded::Context, '.trigger' do
43
43
  }
44
44
  assert_equal "Guille", context.access_other_object
45
45
  end
46
+
47
+ it 'preserves arguments and blocks' do
48
+ result = context.block_method('argument') do |*args, obj|
49
+ "Having an #{args.first} with #{obj}"
50
+ end
51
+ end
52
+
53
+ it 'allows usage of regular methods for triggers' do
54
+ assert context.regular_method_trigger
55
+ end
56
+
57
+ it 'ignores nil trigger names' do
58
+ assert context.class.send(:trigger)
59
+ end
46
60
  end
47
61
 
48
62
  describe Surrounded::Context, '#role?' do
@@ -110,11 +124,7 @@ class RoleAssignmentContext
110
124
  user.respond_to?(:a_method!)
111
125
  end
112
126
 
113
- def regular_method_trigger
114
- user.respond_to?(:a_method!)
115
- end
116
-
117
- trigger :user_ancestors, :other_user_ancestors, :regular_method_trigger
127
+ trigger :user_ancestors, :other_user_ancestors
118
128
 
119
129
  module User
120
130
  def a_method!; end
@@ -124,14 +134,47 @@ class RoleAssignmentContext
124
134
  end
125
135
  end
126
136
 
137
+ class Special; end
138
+ class IgnoreExternalConstantsContext
139
+ extend Surrounded::Context
140
+
141
+ initialize :user, :special, :other
142
+
143
+ role :other do
144
+ def something_or_other; end
145
+ end
146
+
147
+ trigger :check_special do
148
+ special.class
149
+ end
150
+ end
151
+
127
152
  describe Surrounded::Context, '.initialize' do
128
153
  it 'defines an initialize method accepting the same arguments' do
129
154
  assert_equal 2, RoleAssignmentContext.instance_method(:initialize).arity
130
155
  end
131
156
  end
132
157
 
158
+ class ClassRoleAssignmentContext
159
+ extend Surrounded::Context
160
+
161
+ initialize(:thing, :the_test)
162
+
163
+ trigger :check_user_response do
164
+ the_test.assert_respond_to thing, :method_from_class
165
+ end
166
+
167
+ class Thing
168
+ include Surrounded
169
+ def initialize(obj); end
170
+ def method_from_class; end
171
+ end
172
+
173
+ end
174
+
133
175
  describe Surrounded::Context, 'assigning roles' do
134
- include Surrounded
176
+ include Surrounded # the test must be context-aware
177
+
135
178
  let(:user){ User.new("Jim") }
136
179
  let(:other_user){ CastingUser.new("Guille") }
137
180
  let(:context){ RoleAssignmentContext.new(user, other_user) }
@@ -150,23 +193,6 @@ describe Surrounded::Context, 'assigning roles' do
150
193
  end
151
194
 
152
195
  it 'will use classes as roles' do
153
- ClassRoleAssignmentContext = Class.new do
154
- extend Surrounded::Context
155
-
156
- initialize(:thing, :the_test)
157
-
158
- trigger :check_user_response do
159
- the_test.assert_respond_to thing, :method_from_class
160
- end
161
-
162
- class Thing
163
- include Surrounded
164
- def initialize(obj); end
165
- def method_from_class; end
166
- end
167
-
168
- end
169
-
170
196
  user = User.new('Jim')
171
197
 
172
198
  context = ClassRoleAssignmentContext.new(user, self)
@@ -174,12 +200,11 @@ describe Surrounded::Context, 'assigning roles' do
174
200
  assert context.check_user_response
175
201
  end
176
202
 
177
- it 'allows usage of regular methods for triggers' do
178
- assert context.regular_method_trigger
179
- end
180
-
181
- it 'ignores nil trigger names' do
182
- assert context.class.send(:trigger)
203
+ it 'does not use constants defined outside the context class' do
204
+ special = User.new('Special')
205
+ other = User.new('Other')
206
+ context = IgnoreExternalConstantsContext.new(user, special, other)
207
+ assert_equal User, context.check_special
183
208
  end
184
209
  end
185
210
 
@@ -208,6 +233,9 @@ class CollectionContext
208
233
  end
209
234
  end
210
235
 
236
+ role :others do; end
237
+ role :other do; end
238
+
211
239
  end
212
240
 
213
241
  describe Surrounded::Context, 'auto-assigning roles for collections' do
data/test/test_helper.rb CHANGED
@@ -25,6 +25,16 @@ class TestContext
25
25
  trigger :access_other_object do
26
26
  user.other_user.name
27
27
  end
28
+
29
+ def block_method(*args, &block)
30
+ block.call(*args, self)
31
+ end
32
+ trigger :block_method
33
+
34
+ def regular_method_trigger
35
+ true
36
+ end
37
+ trigger :regular_method_trigger
28
38
  end
29
39
 
30
40
  # This is a different implementation of module_method_rebinding?
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surrounded
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
- - '''Jim Gay'''
7
+ - "'Jim Gay'"
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-10 00:00:00.000000000 Z
11
+ date: 2014-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: triad
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.1.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.1.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: Gives an object implicit access to other objects in it's environment.
@@ -59,9 +59,9 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
63
- - .simplecov
64
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".simplecov"
64
+ - ".travis.yml"
65
65
  - Gemfile
66
66
  - LICENSE.txt
67
67
  - README.md
@@ -70,7 +70,9 @@ files:
70
70
  - lib/surrounded.rb
71
71
  - lib/surrounded/access_control.rb
72
72
  - lib/surrounded/context.rb
73
+ - lib/surrounded/context/initializing.rb
73
74
  - lib/surrounded/context/negotiator.rb
75
+ - lib/surrounded/context/role_builders.rb
74
76
  - lib/surrounded/context/role_map.rb
75
77
  - lib/surrounded/context_errors.rb
76
78
  - lib/surrounded/east_oriented.rb
@@ -97,17 +99,17 @@ require_paths:
97
99
  - lib
98
100
  required_ruby_version: !ruby/object:Gem::Requirement
99
101
  requirements:
100
- - - '>='
102
+ - - ">="
101
103
  - !ruby/object:Gem::Version
102
104
  version: '0'
103
105
  required_rubygems_version: !ruby/object:Gem::Requirement
104
106
  requirements:
105
- - - '>='
107
+ - - ">="
106
108
  - !ruby/object:Gem::Version
107
109
  version: '0'
108
110
  requirements: []
109
111
  rubyforge_project:
110
- rubygems_version: 2.0.14
112
+ rubygems_version: 2.2.0
111
113
  signing_key:
112
114
  specification_version: 4
113
115
  summary: Create encapsulated environments for your objects.