Class: Aclatraz::Store::Riak
- Inherits:
-
Object
- Object
- Aclatraz::Store::Riak
- Includes:
- Helpers
- Defined in:
- lib/aclatraz/store/riak.rb
Overview
The most optimal way to store roles in riak database is pack everything in a single key name, eg:
:suspect_id/:role_name
:suspect_id/:role_name/:ClassName
:suspect_id/:role_name/:ObjectClass/object_id
Instance Method Summary collapse
- #check(role, member, object = nil) ⇒ Object
- #clear ⇒ Object
- #delete(role, member, object = nil) ⇒ Object
-
#initialize(bucket_name, *args) ⇒ Riak
constructor
:nodoc:.
- #roles(member = nil) ⇒ Object
- #set(role, member, object = nil) ⇒ Object
Methods included from Helpers
Constructor Details
#initialize(bucket_name, *args) ⇒ Riak
:nodoc:
20 21 22 |
# File 'lib/aclatraz/store/riak.rb', line 20 def initialize(bucket_name, *args) # :nodoc: @backend = ::Riak::Client.new(*args).bucket(bucket_name) end |
Instance Method Details
#check(role, member, object = nil) ⇒ Object
43 44 45 46 47 |
# File 'lib/aclatraz/store/riak.rb', line 43 def check(role, member, object=nil) @backend.exists?(pack(role.to_s, member_id(member), object)) or begin object && !object.is_a?(Class) ? check(role, member, object.class) : false end end |
#clear ⇒ Object
53 54 55 56 57 |
# File 'lib/aclatraz/store/riak.rb', line 53 def clear # not optimal... yea but there is no other way to clear all keys # in the riak bucket -_-" @backend.keys.each {|key| @backend.delete(key) } end |
#delete(role, member, object = nil) ⇒ Object
49 50 51 |
# File 'lib/aclatraz/store/riak.rb', line 49 def delete(role, member, object=nil) @backend.delete(pack(role.to_s, member_id(member), object)) end |
#roles(member = nil) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/aclatraz/store/riak.rb', line 31 def roles(member=nil) roles = [] # Also this can be a little bit slow... @backend.keys.each do |key| @backend.exists?(key) ? perm = unpack(key) : next if perm.size == 2 && (!member || (member && perm[0].to_s == member_id(member))) roles.push(perm[1]) end end roles.compact.uniq end |
#set(role, member, object = nil) ⇒ Object
24 25 26 27 28 29 |
# File 'lib/aclatraz/store/riak.rb', line 24 def set(role, member, object=nil) obj = @backend.new(pack(role.to_s, member_id(member), object)) obj.content_type = "text/plain" obj.data = "1" obj.store end |