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                                                                #


37
38
39
40
41
42
43
44
45
# File 'lib/arcade/api/operations.rb', line 37

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

.create_document(database, type, **attributes) ⇒ Object

—————————— create document ————————————————- # adds a document to the specified database table

specify database-fields as hash-type parameters

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

returns the rid of the inserted dataset



66
67
68
69
70
71
72
73
74
75
# File 'lib/arcade/api/operations.rb', line 66

def self.create_document database, type, **attributes
  payload = { "@type" => type }.merge( attributes )
  logger.debug "C: #{payload}"
  options = if session.nil?
     payload
            else
    payload.merge headers: { "arcadedb-session-id" => session }
            end
  post_data "document/#{database}", options
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                                                                       #


49
50
51
52
53
54
55
56
# File 'lib/arcade/api/operations.rb', line 49

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

.execute(database, query = nil, 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"}]


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

def self.execute database, query=nil, session_id= nil
  pl = query.nil? ? provide_payload(yield) : provide_payload(query)
  if session_id.nil? && session.nil?
    post_data "command/#{database}" , pl
  else
    post_transaction "command/#{database}" , pl, session_id || session
  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"}


111
112
113
114
115
116
117
118
119
# File 'lib/arcade/api/operations.rb', line 111

def self.get_record database, *rid
  rid =  rid.join(':')
  rid = rid[1..-1] if rid[0]=="#"
  if rid.rid?
  get_data  "document/#{database}/#{rid}"
  else
    raise Error "Get requires a rid input"
  end
end

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

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



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

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?
 #    puts " create index  #{type.to_s}[#{name.to_s}] on #{type} ( #{properties.join(',')} ) #{unique_requested}"
  #    VV 22.10: providing an index-name raises an  Error (  Encountered " "(" "( "" at line 1, column 44. Was expecting one of:     <EOF>      <SCHEMA> ...     <NULL_STRATEGY> ...     ";" ...     "," ...   )) )
  #    named  indices droped for now
  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


134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/arcade/api/operations.rb', line 134

def self.property database, type, **args

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


end

.query(database, query) ⇒ Object

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



98
99
100
# File 'lib/arcade/api/operations.rb', line 98

def self.query database, query
  post_data   "query/#{database}" , provide_payload(query)
end