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

.registryObject



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