pebblebed 0.0.26 → 0.0.27

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.
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ group :development, :test do
4
+ gem "memcache_mock", :git => "git://github.com/fguillen/MemcacheMock.git"
5
+ end
6
+
3
7
  # Specify your gem's dependencies in pebblebed.gemspec
4
8
  gemspec
@@ -9,7 +9,7 @@ require 'pathbuilder'
9
9
  require 'active_support'
10
10
 
11
11
  module Pebblebed
12
- class HttpError < Exception
12
+ class HttpError < StandardError
13
13
  attr_reader :status, :message
14
14
 
15
15
  def initialize(message, status = nil)
@@ -74,8 +74,8 @@ module Pebblebed
74
74
  memberships_record['memberships'].each do |membership|
75
75
  @group_ids << membership['membership']['group_id']
76
76
  end
77
- memberships_record['groups'].each do |group|
78
- group['group']['subtrees'].each do |subtree|
77
+ memberships_record['access_groups'].each do |group|
78
+ group['access_group']['subtrees'].each do |subtree|
79
79
  @subtrees << subtree.split('.')
80
80
  end
81
81
  end
@@ -6,7 +6,9 @@ module Pebblebed
6
6
 
7
7
  def initialize(options)
8
8
  @app_name = options[:app_name]
9
- @handlers = {:group => {}, :group_membership => {}, :group_subtree => {}}
9
+ @handlers = {:access_group => {},
10
+ :access_group_membership => {},
11
+ :access_group_subtree => {}}
10
12
  end
11
13
 
12
14
  def start
@@ -21,30 +23,30 @@ module Pebblebed
21
23
  end
22
24
 
23
25
  def on_group_declared(&block)
24
- @handlers[:group][:create] = block
25
- @handlers[:group][:update] = block
26
+ @handlers[:access_group][:create] = block
27
+ @handlers[:access_group][:update] = block
26
28
  end
27
29
 
28
30
  def on_group_removed(&block)
29
- @handlers[:group][:delete] = block
31
+ @handlers[:access_group][:delete] = block
30
32
  end
31
33
 
32
34
  def on_subtree_declared(&block)
33
- @handlers[:group_subtree][:create] = block
34
- @handlers[:group_subtree][:update] = block
35
+ @handlers[:access_group_subtree][:create] = block
36
+ @handlers[:access_group_subtree][:update] = block
35
37
  end
36
38
 
37
39
  def on_subtree_removed(&block)
38
- @handlers[:group_subtree][:delete] = block
40
+ @handlers[:access_group_subtree][:delete] = block
39
41
  end
40
42
 
41
43
  def on_membership_declared(&block)
42
- @handlers[:group_membership][:create] = block
43
- @handlers[:group_membership][:update] = block
44
+ @handlers[:access_group_membership][:create] = block
45
+ @handlers[:access_group_membership][:update] = block
44
46
  end
45
47
 
46
48
  def on_membership_removed(&block)
47
- @handlers[:group_membership][:delete] = block
49
+ @handlers[:access_group_membership][:delete] = block
48
50
  end
49
51
 
50
52
  private
@@ -55,12 +57,12 @@ module Pebblebed
55
57
  queue_options = {
56
58
  :name => "#{@app_name}.security_listener",
57
59
  :path => '**',
58
- :klass => 'group|group_membership|group_subtree',
60
+ :klass => 'access_group|access_group_membership|access_group_subtree',
59
61
  :event => '**',
60
62
  :interval => 1
61
63
  }
62
64
  queue = river.queue queue_options
63
- queue.subscribe(ack: true) do |message|
65
+ queue.subscribe(:ack => true) do |message|
64
66
  consider message
65
67
  end
66
68
  end
@@ -79,12 +81,12 @@ module Pebblebed
79
81
  event_handler = @handlers[klass.to_sym][event.to_sym]
80
82
  return unless event_handler
81
83
  case klass
82
- when 'group'
84
+ when 'access_group'
83
85
  event_handler.call(:id => attributes['id'], :label => attributes['label'])
84
- when 'group_membership'
86
+ when 'access_group_membership'
85
87
  event_handler.call(:group_id => attributes['group_id'],
86
88
  :identity_id => attributes['identity_id'])
87
- when 'group_subtree'
89
+ when 'access_group_subtree'
88
90
  event_handler.call(:group_id => attributes['group_id'],
89
91
  :location => attributes['location'])
90
92
  end
@@ -33,9 +33,20 @@ module Sinatra
33
33
  end
34
34
 
35
35
  def current_identity
36
+ return nil unless current_session
36
37
  return @identity if @identity_checked
37
38
  @identity_checked = true
38
- @identity = pebbles.checkpoint.get("/identities/me")[:identity]
39
+ if cache_current_identity?
40
+ @identity = ::Pebblebed.memcached.fetch("identity-for-session-#{current_session}", ttl = 60) do
41
+ pebbles.checkpoint.get("/identities/me")[:identity]
42
+ end
43
+ else
44
+ @identity = pebbles.checkpoint.get("/identities/me")[:identity]
45
+ end
46
+ end
47
+
48
+ def cache_current_identity?
49
+ settings.respond_to?(:cache_current_identity) && settings.cache_current_identity
39
50
  end
40
51
 
41
52
  def require_identity
@@ -1,3 +1,3 @@
1
1
  module Pebblebed
2
- VERSION = "0.0.26"
2
+ VERSION = "0.0.27"
3
3
  end
data/pebblebed.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "simplecov"
25
25
  s.add_development_dependency "sinatra" # for testing purposes
26
26
  s.add_development_dependency "rack-test" # for testing purposes
27
-
27
+
28
28
  s.add_runtime_dependency "deepstruct", ">= 0.0.2"
29
29
  s.add_runtime_dependency "curb", ">= 0.7.14"
30
30
  s.add_runtime_dependency "yajl-ruby"
@@ -5,7 +5,7 @@ require 'pebblebed/security/access_data'
5
5
  describe Pebblebed::Security::AccessData do
6
6
  let :access_data do
7
7
  Pebblebed::Security::AccessData.new(
8
- :groups => [1,2,3],
8
+ :access_groups => [1,2,3],
9
9
  :subtrees => ['a.b', 'a.b.c.d.e', 'a.c.d', 'a.c.e.f']
10
10
  )
11
11
  end
@@ -28,9 +28,9 @@ describe Pebblebed::Security::AccessData do
28
28
  {'membership' => {'id' => 10, 'group_id' => 1, 'identity_id' => 1}},
29
29
  {'membership' => {'id' => 20, 'group_id' => 2, 'identity_id' => 1}},
30
30
  ],
31
- 'groups' => [
32
- {'group' => {'id' => 1, 'label' => "group_1", 'subtrees' => ["a.b.c"]}},
33
- {'group' => {'id' => 2, 'label' => "group_2", 'subtrees' => ["a.c.d.c"]}}
31
+ 'access_groups' => [
32
+ {'access_group' => {'id' => 1, 'label' => "group_1", 'subtrees' => ["a.b.c"]}},
33
+ {'access_group' => {'id' => 2, 'label' => "group_2", 'subtrees' => ["a.c.d.c"]}}
34
34
  ]
35
35
  }
36
36
  ad = Pebblebed::Security::AccessData.new(record)
@@ -11,12 +11,12 @@ describe Pebblebed::Security::Client do
11
11
  let :sample_memberships_record do
12
12
  {
13
13
  'memberships' => [
14
- {'membership' => {'id' => 10, 'group_id' => 1, 'identity_id' => 1}},
15
- {'membership' => {'id' => 20, 'group_id' => 2, 'identity_id' => 1}},
14
+ {'membership' => {'id' => 10, 'access_group_id' => 1, 'identity_id' => 1}},
15
+ {'membership' => {'id' => 20, 'access_group_id' => 2, 'identity_id' => 1}},
16
16
  ],
17
- 'groups' => [
18
- {'group' => {'id' => 1, 'label' => "group_1", 'subtrees' => ["a.b.c"]}},
19
- {'group' => {'id' => 2, 'label' => "group_2", 'subtrees' => ["a.c.d.c"]}}
17
+ 'access_groups' => [
18
+ {'access_group' => {'id' => 1, 'label' => "group_1", 'subtrees' => ["a.b.c"]}},
19
+ {'access_group' => {'id' => 2, 'label' => "group_2", 'subtrees' => ["a.c.d.c"]}}
20
20
  ]
21
21
  }
22
22
  end
@@ -14,7 +14,7 @@ describe Pebblebed::Security::Listener do
14
14
  end
15
15
  message = {:payload => {
16
16
  'event' => 'create',
17
- 'uid' => 'group:abc.groups$10',
17
+ 'uid' => 'access_group:abc.access_groups$10',
18
18
  'attributes' => {
19
19
  'id' => 10,
20
20
  'label' => 'the_label'
data/spec/sinatra_spec.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # encoding: utf-8
2
-
3
2
  require 'pebblebed'
4
3
  require 'pebblebed/sinatra'
5
4
  require 'sinatra/base'
@@ -51,6 +50,13 @@ describe Sinatra::Pebblebed do
51
50
  Pebblebed::Connector.any_instance.stub(:checkpoint).and_return checkpoint
52
51
  end
53
52
 
53
+ let(:random_session) { rand(36**128).to_s(36) }
54
+
55
+ before :each do
56
+ # Make sure the app get an uniqie session key for every received request
57
+ TestApp.any_instance.stub(:current_session) { random_session }
58
+ end
59
+
54
60
  context "a guest" do
55
61
  let(:identity) { guest }
56
62
 
@@ -125,4 +131,22 @@ describe Sinatra::Pebblebed do
125
131
  last_response.body.should == 'Not found /nonexistant'
126
132
  end
127
133
  end
134
+
135
+ describe "current identity caching" do
136
+ let(:identity) { alice }
137
+
138
+ it "will not cache current_identity by default" do
139
+ checkpoint.should_receive(:get).twice
140
+ get '/private'
141
+ get '/private'
142
+ end
143
+
144
+ it "can be configured to cache current identity" do
145
+ session = random_session
146
+ app.set :cache_current_identity, true
147
+ checkpoint.should_receive(:get).once
148
+ get '/private'
149
+ get '/private'
150
+ end
151
+ end
128
152
  end
data/spec/spec_helper.rb CHANGED
@@ -5,14 +5,16 @@ SimpleCov.add_filter 'spec'
5
5
  SimpleCov.add_filter 'config'
6
6
  SimpleCov.start
7
7
 
8
- require './spec/mockcached'
8
+ require 'memcache_mock'
9
9
  require './spec/mock_pebble'
10
10
 
11
11
  RSpec.configure do |c|
12
12
  c.mock_with :rspec
13
+ c.before(:each) do
14
+ ::Pebblebed.memcached = MemcacheMock.new
15
+ end
13
16
  c.around(:each) do |example|
14
17
  clear_cookies if respond_to?(:clear_cookies)
15
- $memcached = Mockcached.new
16
18
  example.run
17
19
  end
18
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pebblebed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.26
4
+ version: 0.0.27
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-25 00:00:00.000000000 Z
13
+ date: 2012-11-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &70127313138320 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70127313138320
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rake
28
- requirement: &70127313137220 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: '0'
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *70127313137220
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: simplecov
39
- requirement: &70127313136580 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: '0'
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *70127313136580
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: sinatra
50
- requirement: &70127313135380 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *70127313135380
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: rack-test
61
- requirement: &70127313134840 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *70127313134840
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: deepstruct
72
- requirement: &70127313134000 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ! '>='
@@ -77,10 +102,15 @@ dependencies:
77
102
  version: 0.0.2
78
103
  type: :runtime
79
104
  prerelease: false
80
- version_requirements: *70127313134000
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.2
81
111
  - !ruby/object:Gem::Dependency
82
112
  name: curb
83
- requirement: &70127313132320 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  none: false
85
115
  requirements:
86
116
  - - ! '>='
@@ -88,10 +118,15 @@ dependencies:
88
118
  version: 0.7.14
89
119
  type: :runtime
90
120
  prerelease: false
91
- version_requirements: *70127313132320
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: 0.7.14
92
127
  - !ruby/object:Gem::Dependency
93
128
  name: yajl-ruby
94
- requirement: &70127313130020 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
95
130
  none: false
96
131
  requirements:
97
132
  - - ! '>='
@@ -99,10 +134,15 @@ dependencies:
99
134
  version: '0'
100
135
  type: :runtime
101
136
  prerelease: false
102
- version_requirements: *70127313130020
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
103
143
  - !ruby/object:Gem::Dependency
104
144
  name: queryparams
105
- requirement: &70127313128400 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
106
146
  none: false
107
147
  requirements:
108
148
  - - ! '>='
@@ -110,10 +150,15 @@ dependencies:
110
150
  version: '0'
111
151
  type: :runtime
112
152
  prerelease: false
113
- version_requirements: *70127313128400
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
114
159
  - !ruby/object:Gem::Dependency
115
160
  name: futurevalue
116
- requirement: &70127313127340 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
117
162
  none: false
118
163
  requirements:
119
164
  - - ! '>='
@@ -121,10 +166,15 @@ dependencies:
121
166
  version: '0'
122
167
  type: :runtime
123
168
  prerelease: false
124
- version_requirements: *70127313127340
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
125
175
  - !ruby/object:Gem::Dependency
126
176
  name: pathbuilder
127
- requirement: &70127313125940 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
128
178
  none: false
129
179
  requirements:
130
180
  - - ! '>='
@@ -132,10 +182,15 @@ dependencies:
132
182
  version: '0'
133
183
  type: :runtime
134
184
  prerelease: false
135
- version_requirements: *70127313125940
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
136
191
  - !ruby/object:Gem::Dependency
137
192
  name: nokogiri
138
- requirement: &70127313124680 !ruby/object:Gem::Requirement
193
+ requirement: !ruby/object:Gem::Requirement
139
194
  none: false
140
195
  requirements:
141
196
  - - ! '>='
@@ -143,10 +198,15 @@ dependencies:
143
198
  version: '0'
144
199
  type: :runtime
145
200
  prerelease: false
146
- version_requirements: *70127313124680
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
147
207
  - !ruby/object:Gem::Dependency
148
208
  name: i18n
149
- requirement: &70127313122960 !ruby/object:Gem::Requirement
209
+ requirement: !ruby/object:Gem::Requirement
150
210
  none: false
151
211
  requirements:
152
212
  - - ! '>='
@@ -154,10 +214,15 @@ dependencies:
154
214
  version: '0'
155
215
  type: :runtime
156
216
  prerelease: false
157
- version_requirements: *70127313122960
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
158
223
  - !ruby/object:Gem::Dependency
159
224
  name: activesupport
160
- requirement: &70127313121480 !ruby/object:Gem::Requirement
225
+ requirement: !ruby/object:Gem::Requirement
161
226
  none: false
162
227
  requirements:
163
228
  - - ! '>='
@@ -165,10 +230,15 @@ dependencies:
165
230
  version: '0'
166
231
  type: :runtime
167
232
  prerelease: false
168
- version_requirements: *70127313121480
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - ! '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
169
239
  - !ruby/object:Gem::Dependency
170
240
  name: bunny
171
- requirement: &70127313118900 !ruby/object:Gem::Requirement
241
+ requirement: !ruby/object:Gem::Requirement
172
242
  none: false
173
243
  requirements:
174
244
  - - ! '>='
@@ -176,7 +246,12 @@ dependencies:
176
246
  version: '0'
177
247
  type: :runtime
178
248
  prerelease: false
179
- version_requirements: *70127313118900
249
+ version_requirements: !ruby/object:Gem::Requirement
250
+ none: false
251
+ requirements:
252
+ - - ! '>='
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
180
255
  description: Development tools for working with Pebblebed
181
256
  email:
182
257
  - katrina@bengler.no
@@ -215,7 +290,6 @@ files:
215
290
  - spec/http_spec.rb
216
291
  - spec/labels_spec.rb
217
292
  - spec/mock_pebble.rb
218
- - spec/mockcached.rb
219
293
  - spec/river_spec.rb
220
294
  - spec/river_subscription_spec.rb
221
295
  - spec/security/access_data_spec.rb
@@ -236,15 +310,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
236
310
  - - ! '>='
237
311
  - !ruby/object:Gem::Version
238
312
  version: '0'
313
+ segments:
314
+ - 0
315
+ hash: 1631620775838906147
239
316
  required_rubygems_version: !ruby/object:Gem::Requirement
240
317
  none: false
241
318
  requirements:
242
319
  - - ! '>='
243
320
  - !ruby/object:Gem::Version
244
321
  version: '0'
322
+ segments:
323
+ - 0
324
+ hash: 1631620775838906147
245
325
  requirements: []
246
326
  rubyforge_project: pebblebed
247
- rubygems_version: 1.8.15
327
+ rubygems_version: 1.8.24
248
328
  signing_key:
249
329
  specification_version: 3
250
330
  summary: Development tools for working with Pebblebed
@@ -255,7 +335,6 @@ test_files:
255
335
  - spec/http_spec.rb
256
336
  - spec/labels_spec.rb
257
337
  - spec/mock_pebble.rb
258
- - spec/mockcached.rb
259
338
  - spec/river_spec.rb
260
339
  - spec/river_subscription_spec.rb
261
340
  - spec/security/access_data_spec.rb
data/spec/mockcached.rb DELETED
@@ -1,25 +0,0 @@
1
- class Mockcached
2
- def initialize
3
- @store = {}
4
- end
5
-
6
- def set(*args)
7
- @store[args[0]] = args[1]
8
- end
9
-
10
- def get(*args)
11
- @store[args[0]]
12
- end
13
-
14
- def get_multi(*keys)
15
- result = {}
16
- keys.each do |key|
17
- result[key] = get(key) if @store.has_key?(key)
18
- end
19
- result
20
- end
21
-
22
- def delete(*args)
23
- @store.delete(args[0])
24
- end
25
- end