Class: ActiveCouch::Exporter

Inherits:
Object
  • Object
show all
Defined in:
lib/active_couch/support/exporter.rb

Class Method Summary collapse

Class Method Details

.all_databases(site) ⇒ Object



8
9
10
11
# File 'lib/active_couch/support/exporter.rb', line 8

def all_databases(site)
  conn = Connection.new(site)
  JSON.parse(conn.get("/_all_dbs"))
end

.create_database(site, name) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/active_couch/support/exporter.rb', line 66

def create_database(site, name)
  conn = Connection.new(site)
  response = conn.put("/#{name}", "{}")

  case response.code
  when '201' # 201 = success
    true
  when '409' # 409 = database already exists
    raise ActiveCouch::ViewError, 'Database exists'
  else
    raise ActiveCouch::ViewError, "Error creating database - got HTTP response #{response.code}"
  end
end

.delete(site, view, opts = {}) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/active_couch/support/exporter.rb', line 36

def delete(site, view, opts = {})
  rev = nil
  if view.name.nil? || (view.database.nil? && opts[:database].nil?)
    raise ActiveCouch::ViewError, "Both the name and the database need to be defined in your view"
  end
  # If the database is not defined in the view, it can be supported
  # as an option to the export method
  database_name = opts[:database] || view.database
  conn = Connection.new(site)
  if(view_json = exists?(site, "/#{database_name}/_design/#{view.name}"))
    rev = JSON.parse(view_json)['_rev']
  end
  # The view function for a view with name 'by_name' and database 'activecouch_test' should be PUT to
  # http://#{host}:#{port}/activecouch_test/_design/by_name.
  response = conn.delete("/#{database_name}/_design/#{view.name}?rev=#{rev}")
  if response.code =~ /20[0,2]/
    true # 20[0,2] = success
  else
    raise ActiveCouch::ViewError, "Error deleting view - got HTTP response #{response.code}"
  end
end

.delete_database(site, name) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/active_couch/support/exporter.rb', line 80

def delete_database(site, name)
  conn = Connection.new(site)
  response = conn.delete("/#{name}")

  case response.code
  when '200'
  when '201'
  when '202'
    true # 201 = success
  when '404'
    raise ActiveCouch::ViewError, "Database '#{name}' does not exist" # 404 = database doesn't exist
  else
    raise ActiveCouch::ViewError, "Error creating database - got HTTP response #{response.code}"
  end
end

.exists?(site, name) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
61
62
63
64
# File 'lib/active_couch/support/exporter.rb', line 58

def exists?(site, name)
  conn = Connection.new(site)
  response = conn.get("#{name}")
  response
rescue ActiveCouch::ResourceNotFound
  false
end

.export(site, view, opts = {}) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/active_couch/support/exporter.rb', line 13

def export(site, view, opts = {})
  existing_view = {}
  if view.name.nil? || (view.database.nil? && opts[:database].nil?)
    raise ActiveCouch::ViewError, "Both the name and the database need to be defined in your view"
  end
  # If the database is not defined in the view, it can be supported
  # as an option to the export method
  database_name = opts[:database] || view.database
  conn = Connection.new(site)
  # The view function for a view with name 'by_name' and database 'activecouch_test' should be PUT to
  # http://#{host}:#{port}/activecouch_test/_design/by_name.
  if(view_json = exists?(site, "/#{database_name}/_design/#{view.name}"))
    existing_view = JSON.parse(view_json)
  end
  response = conn.put("/#{database_name}/_design/#{view.name}", view.to_json(existing_view))
  case response.code
  when '201'
    true # 201 = success
  else
    raise ActiveCouch::ViewError, "Error exporting view - got HTTP response #{response.code}"
  end
end