surrounded 0.7.2 → 0.7.3
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.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/surrounded/access_control.rb +1 -11
- data/lib/surrounded/context.rb +27 -22
- data/lib/surrounded/shortcuts.rb +19 -0
- data/lib/surrounded/version.rb +1 -1
- data/test/context_shortcuts_test.rb +26 -0
- data/test/surrounded_context_test.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c237237d5cefc3b8d15c8c93e1b1835f53b16aa3
|
4
|
+
data.tar.gz: ffc1902273df1fad262c481b65a804e2eb1b8753
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5faa7eae255b50a89451a223d92b0e2988a187c8e5925b6a999d615ac07f1a61ff0b0f6d2ba574e46815e16b291b26121f97adaad01417a018c7f766b0c83d8b
|
7
|
+
data.tar.gz: deb7040f3cb066916086750e32dfe62584759110eba328a242011b5155aba0b070ce7c6533b24729caeb89840950b203b27d51a9f5e3e80c4caf569d5b8cd192
|
data/README.md
CHANGED
@@ -538,6 +538,17 @@ class ActiviatingAccount
|
|
538
538
|
def disallow_some_trigger_method?
|
539
539
|
# whatever conditional code for the instance of the context
|
540
540
|
end
|
541
|
+
|
542
|
+
# Create shortcuts for triggers as class methods
|
543
|
+
# so you can do ActiviatingAccount.some_trigger_method(activator, account)
|
544
|
+
# This will make all triggers shortcuts.
|
545
|
+
shortcut_triggers
|
546
|
+
# Alterantively, you could implement shortcuts individually:
|
547
|
+
def self.some_trigger_method(activator, account)
|
548
|
+
instance = self.new(activator.account)
|
549
|
+
instance.some_trigger_method
|
550
|
+
end
|
551
|
+
|
541
552
|
end
|
542
553
|
```
|
543
554
|
|
@@ -30,12 +30,11 @@ module Surrounded
|
|
30
30
|
remove_roles if __apply_role_policy == :trigger
|
31
31
|
end
|
32
32
|
end
|
33
|
-
}
|
33
|
+
}, __FILE__, __LINE__
|
34
34
|
end
|
35
35
|
|
36
36
|
def define_access_method(name, &block)
|
37
37
|
class_eval {
|
38
|
-
meth = AccessMethods.instance_method(:with_roles)
|
39
38
|
define_method "disallow_#{name}?" do
|
40
39
|
begin
|
41
40
|
apply_roles if __apply_role_policy == :trigger
|
@@ -58,15 +57,6 @@ module Surrounded
|
|
58
57
|
!self.respond_to?(method_restrictor, true) || !self.send(method_restrictor)
|
59
58
|
}.to_set
|
60
59
|
end
|
61
|
-
|
62
|
-
def with_roles(policy = :trigger)
|
63
|
-
begin
|
64
|
-
apply_roles if __apply_role_policy == policy
|
65
|
-
yield
|
66
|
-
ensure
|
67
|
-
remove_roles if __apply_role_policy == policy
|
68
|
-
end
|
69
|
-
end
|
70
60
|
end
|
71
61
|
end
|
72
62
|
end
|
data/lib/surrounded/context.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'set'
|
2
2
|
require 'surrounded/context/role_map'
|
3
3
|
require 'surrounded/access_control'
|
4
|
+
require 'surrounded/shortcuts'
|
4
5
|
|
5
6
|
# Some features are only available in versions of Ruby
|
6
7
|
# where this method is true
|
@@ -21,19 +22,6 @@ module Surrounded
|
|
21
22
|
@triggers = Set.new
|
22
23
|
include InstanceMethods
|
23
24
|
}
|
24
|
-
base.singleton_class.send(:alias_method, :setup, :initialize)
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.default_role_type
|
28
|
-
@default_role_type ||= :module
|
29
|
-
end
|
30
|
-
|
31
|
-
class << self
|
32
|
-
attr_writer :default_role_type
|
33
|
-
end
|
34
|
-
|
35
|
-
def protect_triggers
|
36
|
-
self.extend(::Surrounded::AccessControl)
|
37
25
|
end
|
38
26
|
|
39
27
|
def new(*args, &block)
|
@@ -50,6 +38,18 @@ module Surrounded
|
|
50
38
|
|
51
39
|
private
|
52
40
|
|
41
|
+
def self.default_role_type
|
42
|
+
@default_role_type ||= :module
|
43
|
+
end
|
44
|
+
|
45
|
+
class << self
|
46
|
+
attr_writer :default_role_type
|
47
|
+
end
|
48
|
+
|
49
|
+
# Additional Features
|
50
|
+
def protect_triggers; self.extend(::Surrounded::AccessControl); end
|
51
|
+
def shortcut_triggers; self.extend(::Surrounded::Shortcuts); end
|
52
|
+
|
53
53
|
def private_const_set(name, const)
|
54
54
|
const = const_set(name, const)
|
55
55
|
private_constant name.to_sym
|
@@ -115,10 +115,11 @@ module Surrounded
|
|
115
115
|
def initialize(#{setup_args.join(',')})
|
116
116
|
preinitialize
|
117
117
|
arguments = method(__method__).parameters.map{|arg| eval(arg[1].to_s) }
|
118
|
+
@role_map = RoleMap.new
|
118
119
|
map_roles(#{setup_args}.zip(arguments))
|
119
120
|
postinitialize
|
120
121
|
end
|
121
|
-
"
|
122
|
+
", __FILE__, __LINE__
|
122
123
|
end
|
123
124
|
|
124
125
|
def private_attr_reader(*method_names)
|
@@ -129,13 +130,7 @@ module Surrounded
|
|
129
130
|
def trigger(*names, &block)
|
130
131
|
if block.nil?
|
131
132
|
names.each do |name|
|
132
|
-
|
133
|
-
alias_method :"__trigger_#{name}", :"#{name}"
|
134
|
-
private :"__trigger_#{name}"
|
135
|
-
remove_method :"#{name}"
|
136
|
-
redo_method(name)
|
137
|
-
store_trigger(name)
|
138
|
-
end
|
133
|
+
define_trigger_method(name, &block)
|
139
134
|
end
|
140
135
|
else
|
141
136
|
name = names.first
|
@@ -158,6 +153,16 @@ module Surrounded
|
|
158
153
|
const_get(name)
|
159
154
|
end
|
160
155
|
end
|
156
|
+
|
157
|
+
def define_trigger_method(name, &block)
|
158
|
+
unless triggers.include?(name) || name.nil?
|
159
|
+
alias_method :"__trigger_#{name}", :"#{name}"
|
160
|
+
private :"__trigger_#{name}"
|
161
|
+
remove_method :"#{name}"
|
162
|
+
redo_method(name)
|
163
|
+
store_trigger(name)
|
164
|
+
end
|
165
|
+
end
|
161
166
|
|
162
167
|
def redo_method(name)
|
163
168
|
class_eval %{
|
@@ -171,7 +176,7 @@ module Surrounded
|
|
171
176
|
remove_roles if __apply_role_policy == :trigger
|
172
177
|
end
|
173
178
|
end
|
174
|
-
}
|
179
|
+
}, __FILE__, __LINE__
|
175
180
|
end
|
176
181
|
|
177
182
|
module InstanceMethods
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Surrounded
|
2
|
+
module Shortcuts
|
3
|
+
private
|
4
|
+
|
5
|
+
def define_shortcut(name)
|
6
|
+
singleton_class.send(:define_method, name) do |*args|
|
7
|
+
instance = self.new(*args)
|
8
|
+
instance.public_send(name)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def store_trigger(*names)
|
13
|
+
names.each do |name|
|
14
|
+
define_shortcut(name)
|
15
|
+
end
|
16
|
+
@triggers.merge(names)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/surrounded/version.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ShortcutContext
|
4
|
+
extend Surrounded::Context
|
5
|
+
shortcut_triggers
|
6
|
+
|
7
|
+
initialize :user, :other
|
8
|
+
|
9
|
+
trigger :shorty do
|
10
|
+
user.speak
|
11
|
+
end
|
12
|
+
|
13
|
+
role :user do
|
14
|
+
def speak
|
15
|
+
'it works, shorty!'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe Surrounded::Context, 'shortcuts' do
|
21
|
+
let(:user){ User.new("Jim") }
|
22
|
+
let(:other){ User.new("Guille") }
|
23
|
+
it 'creates shortcut class methods for triggers' do
|
24
|
+
assert_equal 'it works, shorty!', ShortcutContext.shorty(user, other)
|
25
|
+
end
|
26
|
+
end
|
@@ -124,7 +124,7 @@ class RoleAssignmentContext
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
-
describe Surrounded::Context, '.
|
127
|
+
describe Surrounded::Context, '.initialize' do
|
128
128
|
it 'defines an initialize method accepting the same arguments' do
|
129
129
|
assert_equal 2, RoleAssignmentContext.instance_method(:initialize).arity
|
130
130
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: surrounded
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- '''Jim Gay'''
|
@@ -73,9 +73,11 @@ files:
|
|
73
73
|
- lib/surrounded/context/negotiator.rb
|
74
74
|
- lib/surrounded/context/role_map.rb
|
75
75
|
- lib/surrounded/context_errors.rb
|
76
|
+
- lib/surrounded/shortcuts.rb
|
76
77
|
- lib/surrounded/version.rb
|
77
78
|
- surrounded.gemspec
|
78
79
|
- test/context_access_test.rb
|
80
|
+
- test/context_shortcuts_test.rb
|
79
81
|
- test/example_proxy_test.rb
|
80
82
|
- test/example_threaded_test.rb
|
81
83
|
- test/example_wrapper_test.rb
|
@@ -109,6 +111,7 @@ specification_version: 4
|
|
109
111
|
summary: Create encapsulated environments for your objects.
|
110
112
|
test_files:
|
111
113
|
- test/context_access_test.rb
|
114
|
+
- test/context_shortcuts_test.rb
|
112
115
|
- test/example_proxy_test.rb
|
113
116
|
- test/example_threaded_test.rb
|
114
117
|
- test/example_wrapper_test.rb
|