Class: OpenID::Store::CouchDB::Association

Inherits:
Object
  • Object
show all
Defined in:
lib/openid/store/couchdb/association.rb

Constant Summary collapse

DESIGN_DOCUMENT =
{
  'version' => 1,
  'language' => 'javascript',
  'views' => {}
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, association, couchdb_rev = nil) ⇒ Association

Returns a new instance of Association.



39
40
41
42
43
44
# File 'lib/openid/store/couchdb/association.rb', line 39

def initialize(name, association, couchdb_rev = nil)
  @name        = name
  @association = association
  @couchdb_rev = couchdb_rev
  @couchdb     = Chef::CouchDB.new
end

Instance Attribute Details

#associationObject

Returns the value of attribute association.



37
38
39
# File 'lib/openid/store/couchdb/association.rb', line 37

def association
  @association
end

Class Method Details

.create(server_url, association) ⇒ Object



17
18
19
# File 'lib/openid/store/couchdb/association.rb', line 17

def create(server_url, association)
  new(document_name(server_url, association.handle), association).save
end

.create_design_documentObject



13
14
15
# File 'lib/openid/store/couchdb/association.rb', line 13

def create_design_document
  Chef::CouchDB.new.create_design_document('associations', DESIGN_DOCUMENT)
end

.destroy(server_url, handle) ⇒ Object



27
28
29
30
# File 'lib/openid/store/couchdb/association.rb', line 27

def destroy(server_url, handle)
  document = load(server_url, handle)
  document ? document.destroy : false
end

.document_name(server_url, handle) ⇒ Object



32
33
34
# File 'lib/openid/store/couchdb/association.rb', line 32

def document_name(server_url, handle)
  Base64.encode64("#{server_url}-#{handle}").chomp
end

.json_create(attributes) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/openid/store/couchdb/association.rb', line 63

def self.json_create(attributes)
  name        = attributes['name']
  handle      = attributes['handle']
  secret      = Base64.decode64(attributes['secret'])
  issued      = Time.at(attributes['issued'])
  lifetime    = attributes['lifetime']
  assoc_type  = attributes['assoc_type']
  couchdb_rev = attributes['_rev']
  association = OpenID::Association.new(handle, secret, issued, lifetime, assoc_type)

  new(name, association, couchdb_rev)
end

.load(server_url, handle) ⇒ Object



21
22
23
24
25
# File 'lib/openid/store/couchdb/association.rb', line 21

def load(server_url, handle)
  Chef::CouchDB.new.load('association', document_name(server_url, handle))
rescue Net::HTTPServerException
  nil
end

Instance Method Details

#destroyObject



46
47
48
49
50
51
52
# File 'lib/openid/store/couchdb/association.rb', line 46

def destroy
  @couchdb.delete('association', @name, @couchdb_rev)
rescue Net::HTTPServerException
  false
else
  true
end

#expired?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/openid/store/couchdb/association.rb', line 54

def expired?
  @association.expires_in <= 0
end

#saveObject



58
59
60
61
# File 'lib/openid/store/couchdb/association.rb', line 58

def save
  results = @couchdb.store('association', @name, self)
  @couchdb_rev = results['rev']
end

#to_json(*args) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/openid/store/couchdb/association.rb', line 76

def to_json(*args)
  result = {
    'name' => @name,
    'json_class' => self.class.name,
    'chef_type' => 'association',
    'handle' => @association.handle,
    'secret' => Base64.encode64(@association.secret).chomp,
    'issued' => @association.issued.to_i,
    'lifetime' => @association.lifetime,
    'assoc_type' => @association.assoc_type,
  }
  result['_rev'] = @couchdb_rev if @couchdb_rev
  result.to_json(*args)
end