Class: Divan::Models::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/divan/models/base.rb

Direct Known Subclasses

Revision

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.allObject



113
114
115
# File 'lib/divan/models/base.rb', line 113

def all
  find_all
end

.create(opts = {}) ⇒ Object

Raises:

  • (ArgumentError)


126
127
128
129
130
131
132
133
# File 'lib/divan/models/base.rb', line 126

def create(opts = {})
  raise ArgumentError if( !opts.is_a?(Hash) && !opts.is_a?(Array) )
  if opts.is_a? Hash
    single_create opts
  else
    bulk_create opts
  end
end

.delete_all(params = nil) ⇒ Object



117
118
119
120
121
122
123
124
# File 'lib/divan/models/base.rb', line 117

def delete_all(params = nil)
  to_be_deleted = find_all(params).map do |object|
    {:_id => object.id, :_rev => object.rev, :_deleted => true }
  end
  payload = { :docs => to_be_deleted }.to_json
  database.client['_bulk_docs'].post payload, :content_type => :json, :accept => :json
  to_be_deleted.size
end

.find(id, params = {}) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
# File 'lib/divan/models/base.rb', line 97

def find(id, params = {})
  begin
    last_request = database.client[Divan::Utils.formatted_path id, params].get
  rescue RestClient::ResourceNotFound
    return nil
  end
  attributes = JSON.parse last_request, :symbolize_names => true
  obj = self.new attributes
  obj.last_request = last_request
  obj
end

.find_all(params = nil) ⇒ Object



109
110
111
# File 'lib/divan/models/base.rb', line 109

def find_all(params=nil)
  query_view :all, params
end

.strategiesObject



135
136
137
# File 'lib/divan/models/base.rb', line 135

def strategies
  @strategies ||= superclass.respond_to?(:strategies) ? superclass.strategies.clone : {}
end

Instance Method Details

#deleteObject



19
20
21
22
23
24
25
26
27
28
# File 'lib/divan/models/base.rb', line 19

def delete
  begin
    @last_request = database.client[current_document_path].delete
  rescue RestClient::ResourceNotFound
    @last_request = nil
    return @last_request
  end
  @rev = JSON.parse(@last_request, :symbolize_names => true )[:rev]
  @last_request
end

#revision(index) ⇒ Object



39
40
41
42
43
# File 'lib/divan/models/base.rb', line 39

def revision(index)
  revision!(index)
rescue Divan::DocumentRevisionMissing
  nil
end

#revision!(index) ⇒ Object



45
46
47
48
49
50
# File 'lib/divan/models/base.rb', line 45

def revision!(index)
  r = revision_ids.find{ |rev| rev[0..1].to_i == index }
  r.nil? and raise Divan::DocumentRevisionMissing.new(self), "Revision with index #{index} missing"
  return self if r == @rev
  self.class.find @id, :rev => r
end

#revision_idsObject



30
31
32
33
34
35
36
37
# File 'lib/divan/models/base.rb', line 30

def revision_ids
  begin
    @last_request = database.client[document_path :revs_info => true].get
    JSON.parse(@last_request, :symbolize_names => true )[:_revs_info].find_all{ |hash| hash[:status] == 'available' }.map{ |hash| hash[:rev] }
  rescue RestClient::ResourceNotFound
    return []
  end
end

#save(strategy = nil, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/divan/models/base.rb', line 5

def save(strategy=nil, &block)
  self.class.execute_before_validate_callback(self) or return false

  validate or return false

  self.class.execute_after_validate_callback(self)  or return false
  self.class.execute_before_save_callback(self)     or return false

  execute_save strategy, &block

  self.class.execute_after_save_callback(self)
  @last_request
end