Class: Datomic::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/datomic/client.rb,
lib/datomic/client/version.rb,
lib/datomic/client/response.rb

Defined Under Namespace

Classes: Response

Constant Summary collapse

HANDLE_RESPONSE =
lambda do |body, request, response|
  Response.new body, response, request
end
VERSION =
'0.3.0'

Instance Method Summary collapse

Constructor Details

#initialize(url, storage = nil) ⇒ Client

Returns a new instance of Client.



13
14
15
16
# File 'lib/datomic/client.rb', line 13

def initialize(url, storage = nil)
  @url = url
  @storage = storage
end

Instance Method Details

#create_database(dbname) ⇒ Object



18
19
20
21
# File 'lib/datomic/client.rb', line 18

def create_database(dbname)
  RestClient.post root_url('data', @storage) + "/", {"db-name" => dbname},
    :content_type => 'application/x-www-form-urlencoded', &HANDLE_RESPONSE
end

#database_info(dbname, options = {}) ⇒ Object

Options:

  • :t - Specifies version/time of db. Defaults to latest version



25
26
27
28
# File 'lib/datomic/client.rb', line 25

def database_info(dbname, options = {})
  version = options.fetch(:t, '-')
  get db_url(dbname, version) + "/", :Accept => 'application/edn'
end

#datoms(dbname, params = {}) ⇒ Object

This endpoint hits both datoms and index-range APIs. params take any param in addition to following options:

Options:

  • :t - Specifies version/time of db. Defaults to latest version



42
43
44
45
# File 'lib/datomic/client.rb', line 42

def datoms(dbname, params = {})
  version = params.fetch(:t, '-')
  get db_url(dbname, version, "datoms"), params
end

#entity(dbname, id, params = {}) ⇒ Object

params take any param in addition to following options:

Options:

  • :t - Specifies version/time of db. Defaults to latest version



51
52
53
54
# File 'lib/datomic/client.rb', line 51

def entity(dbname, id, params = {})
  version = params.fetch(:t, '-')
  get db_url(dbname, version, 'entity'), params.merge(:e => id)
end

#events(dbname, &block) ⇒ Object

Streams events. For each event, given block is called with Net::HTTP response from event



65
66
67
68
69
70
71
# File 'lib/datomic/client.rb', line 65

def events(dbname, &block)
  # can't use RestClient.get b/c of :block_response
  RestClient::Request.execute(:method => :get,
    :url => root_url('events', @storage, dbname),
    :headers => {:accept => "text/event-stream"},
    :block_response => block, &HANDLE_RESPONSE)
end

#query(dbname, query, params = {}) ⇒ Object

Query can be a ruby data structure or a string representing clojure data



57
58
59
60
61
# File 'lib/datomic/client.rb', line 57

def query(dbname, query, params = {})
  query = transmute_data(query)
  args = [{:"db/alias" => [@storage, dbname].join('/')}].to_edn
  get root_url("api/query"), params.merge(:q => query, :args => args)
end

#transact(dbname, data) ⇒ Object

Data can be a ruby data structure or a string representing clojure data



31
32
33
34
35
# File 'lib/datomic/client.rb', line 31

def transact(dbname, data)
  data = transmute_data(data)
  RestClient.post(db_url(dbname) + "/", {"tx-data" => data},
                  :Accept => 'application/edn', &HANDLE_RESPONSE)
end