Class: Dolly::Connection

Inherits:
Object
  • Object
show all
Includes:
Configuration, FrameworkHelper
Defined in:
lib/dolly/connection.rb

Constant Summary collapse

DEFAULT_HEADER =
{ 'Content-Type' => 'application/json', 'Accept' => 'application/json' }
SECURE_PROTOCOL =
'https'
DEFAULT_DATABASE =
:default

Instance Attribute Summary collapse

Attributes included from Configuration

#config_file

Instance Method Summary collapse

Methods included from FrameworkHelper

#rails?

Methods included from Configuration

#base_uri, #configuration, #db_name, #env, #host, #port, #protocol

Constructor Details

#initialize(db = DEFAULT_DATABASE, app_env = :development) ⇒ Connection

Returns a new instance of Connection.



25
26
27
28
# File 'lib/dolly/connection.rb', line 25

def initialize db = DEFAULT_DATABASE, app_env = :development
  @db      = db
  @app_env = defined?(Rails) ? Rails.env : app_env
end

Instance Attribute Details

#app_envObject (readonly)

Returns the value of attribute app_env.



17
18
19
# File 'lib/dolly/connection.rb', line 17

def app_env
  @app_env
end

#dbObject (readonly)

Returns the value of attribute db.



17
18
19
# File 'lib/dolly/connection.rb', line 17

def db
  @db
end

Instance Method Details

#attach(resource, attachment_name, data, headers = {}) ⇒ Object



59
60
61
# File 'lib/dolly/connection.rb', line 59

def attach resource, attachment_name, data, headers = {}
  request :put, "#{resource.cgi_escape}/#{attachment_name}", { _body: data }.merge(headers: headers)
end

#delete(resource, rev = nil, escape: true) ⇒ Object



49
50
51
52
53
# File 'lib/dolly/connection.rb', line 49

def delete resource, rev = nil, escape: true
  query = "?rev=#{rev}" if rev
  resource = "#{escape ? resource.cgi_escape : resource}#{query}"
  request :delete, resource
end

#get(resource, data = {}) ⇒ Object



34
35
36
37
# File 'lib/dolly/connection.rb', line 34

def get(resource, data = {})
  query = { query: values_to_json(data) } if data
  request :get, resource, query
end

#post(resource, data) ⇒ Object



39
40
41
42
43
# File 'lib/dolly/connection.rb', line 39

def post resource, data
  query_str = to_query(data.delete(:query)) if data[:query]
  query = "?#{query_str}" if query_str
  request :post, "#{resource.cgi_escape}#{query}", data
end

#put(resource, data) ⇒ Object



45
46
47
# File 'lib/dolly/connection.rb', line 45

def put resource, data
  request :put, resource.cgi_escape, data
end

#request(method, resource, data = {}) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/dolly/connection.rb', line 75

def request(method, resource, data = {})
  db_resource = (resource =~ %r{^/}) ? resource : "/#{db_name}/#{resource}"
  headers     = fetch_headers(data)
  body        = fetch_body(data)
  uri         = URI("#{base_uri}#{db_resource}")

  conn = curl_method_call(method, uri, body) do |curl|
    if env['username'] && !env['username'].empty?
      curl.http_auth_types = :basic
      curl.username = env['username']
      curl.password = env['password'].to_s
    end

    headers.each { |k, v| curl.headers[k] = v } unless !headers || headers.empty?
  end

  response_format(conn, method)
end

#skip_migrations?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/dolly/connection.rb', line 30

def skip_migrations?
  env['skip_migrations']
end

#statsObject



67
68
69
# File 'lib/dolly/connection.rb', line 67

def stats
  get("/#{db_name}")
end

#tools(path, opts = nil) ⇒ Object



71
72
73
# File 'lib/dolly/connection.rb', line 71

def tools path, opts = nil
  request(:get, "/#{path}", opts)
end

#uuids(opts = {}) ⇒ Object



63
64
65
# File 'lib/dolly/connection.rb', line 63

def uuids opts = {}
  tools("_uuids", opts)[:uuids]
end

#view(resource, opts) ⇒ Object



55
56
57
# File 'lib/dolly/connection.rb', line 55

def view resource, opts
  request :get, resource, query: values_to_json({include_docs: true}.merge!(opts))
end