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
-
.create_database(name) ⇒ Object
—————————— create database ————————————————- # creates a database if not present #.
-
.create_document(database, type, session_id: nil, **attributes) ⇒ Object
—————————— create Document ————————————————- # adds a record ( document, vertex or edge ) to the specified database type.
-
.database?(name) ⇒ Boolean
—————————— database? ————————————————- # returns true if the database exists #.
-
.databases ⇒ Object
—————————— Service methods ————————————————- # —————————— ————————————————- # —————————— databases ————————————————- # returns an array of databases present on the database-server #.
-
.drop_database(name) ⇒ Object
—————————— drop database ————————————————- # deletes the given database #.
-
.execute(database, session_id: nil) ⇒ Object
—————————— execute ————————————————- # executes a sql-query in the specified database.
-
.get_record(database, *rid) ⇒ Object
—————————— get_record ————————————————- # fetches a record by providing database and rid and returns the result as hash.
-
.index(database, type, name, *properties) ⇒ Object
—————————— index ————————————————- #.
-
.property(database, type, **args) ⇒ Object
—————————— property ————————————————- # Adds properties to the type.
-
.query(database, query, session_id: nil) ⇒ Object
—————————— query ————————————————- # same for idempotent queries.
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 #
38 39 40 |
# File 'lib/arcade/api/operations.rb', line 38 def self.database? name get_data "exists/#{name}" end |
.databases ⇒ Object
—————————— 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 |