Module: Arcade::Api

Extended by:
Primitives
Defined in:
lib/arcade/api/operations.rb,
lib/arcade/api/primitives.rb

Defined Under Namespace

Modules: Primitives

Class Method Summary collapse

Methods included from Primitives

begin_transaction, commit, get_data, http, post_data, post_transaction, rollback

Class Method Details

.create_database(name) ⇒ Object

—————————— create database ————————————————- #

creates a database if not present                                                                #


44
45
46
47
48
49
50
51
52
# File 'lib/arcade/api/operations.rb', line 44

def self.create_database name
  return if databases.include?( name.to_s )
  payload = { "command" => "create database #{name}" }
    post_data  "server", payload
rescue  Arcade::QueryError => e
  logger.fatal "Create database #{name} through \"POST create/#{name}\" failed"
  logger.fatal  e
  raise
end

.create_document(database, type, session_id: nil, **attributes) ⇒ Object

—————————— create Document ————————————————- # adds a record ( document, vertex or edge ) to the specified database type

specify database-fields as hash-type parameters

i.e Arcade::Api.create_record ‘devel’, ‘documents’, name: ‘herta meyer’, age: 56, sex: ‘f’

returns the rid of the inserted dataset



103
104
105
106
107
# File 'lib/arcade/api/operations.rb', line 103

def self.create_document database, type, session_id: nil, **attributes
    content = "CONTENT #{ attributes.to_json }"
    result = execute( database, session_id: session_id ){ "INSERT INTO #{type} #{content} "}
    result.first[:@rid]   #  emulate the »old« behavior of the /post/create_document api endpoint
end

.database?(name) ⇒ Boolean

—————————— database? ————————————————- #

returns true if the database exists                                                              #

Returns:

  • (Boolean)


38
39
40
# File 'lib/arcade/api/operations.rb', line 38

def self.database? name
  get_data "exists/#{name}"
end

.databasesObject

—————————— Service methods ————————————————- # —————————— ————————————————- # —————————— databases ————————————————- #

returns an array of databases present on the database-server                                     #


31
32
33
# File 'lib/arcade/api/operations.rb', line 31

def self.databases
  get_data 'databases'
end

.drop_database(name) ⇒ Object

—————————— drop database ————————————————- #

deletes the given database                                                                       #


56
57
58
59
60
61
62
63
# File 'lib/arcade/api/operations.rb', line 56

def self.drop_database name
  return unless databases.include?( name.to_s )
  payload = {"command" => "drop database #{name}" }
   post_data  "server",  payload
rescue Arcade::QueryError => e
  logger.fatal "Drop database #{name} through \"POST drop database/#{name}\" failed"
  raise
end

.execute(database, session_id: nil) ⇒ Object

—————————— execute ————————————————- # executes a sql-query in the specified database

the query is provided as block

returns an Array of results (if propriate) i.e Arcade::Api.execute( “devel” ) { ‘select from test ’ }

=y [{"@rid"=>"#57:0", "@type"=>"test", "name"=>"Hugo"}, {"@rid"=>"#60:0", "@type"=>"test", "name"=>"Hubert"}]


75
76
77
78
79
80
81
82
# File 'lib/arcade/api/operations.rb', line 75

def self.execute database, session_id: nil
  pl = provide_payload(yield)
  if session_id.nil?
    post_data "command/#{database}" , pl
  else
    post_transaction "command/#{database}" , pl, session_id: session_id
  end
end

.get_record(database, *rid) ⇒ Object

—————————— get_record ————————————————- # fetches a record by providing database and rid and returns the result as hash

> Api.get_record ‘devel’, ‘225:6’ > Api.get_record ‘devel’, 225, 6 > Api.get_record ‘devel’, ‘#225:6’

=> {:@out=>0, :@rid=>"#225:6", :@in=>0, :@type=>"my_names", :name=>"Zaber", :@cat=>"v"}


118
119
120
121
122
123
124
125
126
# File 'lib/arcade/api/operations.rb', line 118

def self.get_record database, *rid
  rid =  rid.join(':')
  rid = rid[1..-1] if rid[0]=="#"
  if rid.rid?
    get_data( "query/#{database}/sql/" + URI.encode_uri_component("select from #{rid}")) &.first
  else
    raise Error "Get requires a rid input"
  end
end

.index(database, type, name, *properties) ⇒ Object

—————————— index ————————————————- #



160
161
162
163
164
165
166
167
168
169
170
# File 'lib/arcade/api/operations.rb', line 160

def self.index database, type,  name ,  *properties
  properties = properties.map( &:to_s )
  unique_requested = "unique" if properties.delete("unique")
  unique_requested = "notunique" if  properties.delete("notunique" )
  automatic = true if
  properties << name  if properties.empty?
  success = execute(database) {" create index IF NOT EXISTS on #{type} (#{properties.join(', ')}) #{unique_requested}" } &.first
#      puts "success: #{success}"
   success[:operation] == 'create index'

end

.property(database, type, **args) ⇒ Object

—————————— property ————————————————- # Adds properties to the type

call via
Api.property <database>, <type>, name1: a_format , name2: a_format

Format is one of
 Boolean, Integer, Short, Long, Float, Double, String
 Datetime, Binary, Byte, Decimal, Link
 Embedded, EmbeddedList, EmbeddedMap

 In case of an Error,  anything is rolled back and nil is returned


141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/arcade/api/operations.rb', line 141

def self.property database, type, **args

  s= begin_transaction database
  success = args.map do | name, format |
    r= execute(database, session_id: s) {" create property #{type.to_s}.#{name.to_s} #{format.to_s} " } &.first
    r.nil? ?  false : r[:operation] == 'create property'
  end.uniq
  if success == [true]
    commit database, session_id: s
    true
  else
    rollback database log: false, session_id: s
    false
  end


end

.query(database, query, session_id: nil) ⇒ Object

—————————— query ————————————————- # same for idempotent queries



86
87
88
89
90
91
92
# File 'lib/arcade/api/operations.rb', line 86

def self.query database, query, session_id: nil
#      if session_id.nil?
    get_data   "query/#{database}/sql/" + provide_payload(query, action: :get)[:query]
 #     else
 #       post_transaction "query/#{database}" , provide_payload(query), session_id: session_id
 #     end
end