Module: Loveseat::Document
- Defined in:
- lib/loveseat/document.rb,
lib/loveseat/document/dsl.rb,
lib/loveseat/document/support.rb,
lib/loveseat/document/property/raw.rb,
lib/loveseat/document/property/base.rb,
lib/loveseat/document/property/date.rb,
lib/loveseat/document/property/hash.rb,
lib/loveseat/document/property/time.rb,
lib/loveseat/document/property/array.rb,
lib/loveseat/document/property/float.rb,
lib/loveseat/document/property/string.rb,
lib/loveseat/document/instance_adapter.rb,
lib/loveseat/document/property/integer.rb
Defined Under Namespace
Modules: Property
Classes: DSL, InstanceAdapter, Support
Constant Summary
collapse
- @@registry =
{}
- @@resolvers =
[
/^([A-Za-z:]+):/
]
Class Method Summary
collapse
Class Method Details
.add_resolver(regexp) ⇒ Object
12
13
14
|
# File 'lib/loveseat/document.rb', line 12
def self.add_resolver(regexp)
@@resolvers << regexp
end
|
.all(db, klass) ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/loveseat/document.rb', line 71
def self.all(db, klass)
support = Document.registry[klass.name]
resource = db._all_docs
response, body = resource.get(:query => {:startkey => "#{klass.name}:".to_json,
:endkey => "#{klass.name}:\ufff0".to_json,
:include_docs => true})
response.value
body['rows'].map do |row|
support.from_hash(row['doc'])
end
end
|
.delete(db, object) ⇒ Object
84
85
86
87
88
89
|
# File 'lib/loveseat/document.rb', line 84
def self.delete(db, object)
resource = Rest::Document.new(db, object._id)
response, body = resource.delete(:query => {:rev => object._rev})
response.value
object._rev = nil
end
|
.get(db, id) ⇒ Object
61
62
63
64
65
66
67
68
69
|
# File 'lib/loveseat/document.rb', line 61
def self.get(db, id)
resource = Rest::Document.new(db, id)
response, body = resource.get
response.value
klass = resolve(id)
support = Document.registry[klass]
support.from_hash(body)
end
|
.next_id(server, klass) ⇒ Object
16
17
18
19
20
21
22
|
# File 'lib/loveseat/document.rb', line 16
def self.next_id(server, klass)
response, body = server._uuids.get
response.value
uuid = body['uuids'].first
"#{klass.name}:#{uuid}"
end
|
.put(db, object) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/loveseat/document.rb', line 42
def self.put(db, object)
klass = ( object.instance_of?(Class) ) ? object : object.class
support = Document.registry[klass.name]
raise "Not Registered" if support.nil?
raise "Abstract Document" if support.abstract?
if object._id.nil?
object._id = next_id(db.server, object.class)
end
resource = Rest::Document.new(db, object._id)
response, body = resource.put(support.to_doc(object))
response.value
object._rev = body["rev"]
object
end
|
.registry ⇒ Object
8
9
10
|
# File 'lib/loveseat/document.rb', line 8
def self.registry
@@registry
end
|
.resolve(id) ⇒ Object
24
25
26
27
28
29
30
31
32
|
# File 'lib/loveseat/document.rb', line 24
def self.resolve(id)
@@resolvers.each do |regexp|
match = regexp.match(id)
if match
return match[1]
end
end
nil
end
|
.setup(klass, options = {}, &block) ⇒ Object
34
35
36
37
38
39
40
|
# File 'lib/loveseat/document.rb', line 34
def self.setup(klass, options = {}, &block)
support = options.delete(:support) ||
Support.new(klass, options)
Document.registry[klass.name] = support
support.dsl.instance_eval(&block)
support
end
|