arcadedb 0.3.1 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +57 -0
- data/CHANGELOG.md +15 -0
- data/Gemfile +30 -0
- data/Gemfile.lock +168 -0
- data/Guardfile +30 -0
- data/LICENSE +21 -0
- data/README.md +242 -0
- data/Rakefile +11 -0
- data/arcade.yml +27 -0
- data/arcadedb.gemspec +35 -0
- data/bin/+ +106 -0
- data/bin/console +126 -0
- data/examples/books.rb +139 -0
- data/examples/relation_1__1.rb +149 -0
- data/examples/relation_1__n.rb +56 -0
- data/examples/relation_n_n.rb +194 -0
- data/lib/arcade/api/operations.rb +306 -0
- data/lib/arcade/api/version.rb +5 -0
- data/lib/arcade/base.rb +455 -0
- data/lib/arcade/database.rb +338 -0
- data/lib/arcade/errors.rb +71 -0
- data/lib/arcade/logging.rb +38 -0
- data/lib/arcade/version.rb +3 -0
- data/lib/arcade.rb +39 -0
- data/lib/config.rb +70 -0
- data/lib/init.rb +50 -0
- data/lib/match.rb +216 -0
- data/lib/model/basicdocument.rb +7 -0
- data/lib/model/basicedge.rb +6 -0
- data/lib/model/basicvertex.rb +6 -0
- data/lib/model/document.rb +10 -0
- data/lib/model/edge.rb +47 -0
- data/lib/model/vertex.rb +238 -0
- data/lib/models.rb +6 -0
- data/lib/query.rb +384 -0
- data/lib/support/class.rb +13 -0
- data/lib/support/conversions.rb +295 -0
- data/lib/support/model.rb +84 -0
- data/lib/support/object.rb +20 -0
- data/lib/support/sql.rb +74 -0
- data/lib/support/string.rb +116 -0
- data/rails/arcade.rb +20 -0
- data/rails/config.yml +10 -0
- data/rails/connect.yml +17 -0
- data/rails.md +147 -0
- metadata +49 -4
@@ -0,0 +1,84 @@
|
|
1
|
+
module Arcade
|
2
|
+
module Support
|
3
|
+
module Model
|
4
|
+
|
5
|
+
def resolve_edge_name *edge_names
|
6
|
+
edge_names.map do | edge_name |
|
7
|
+
case edge_name
|
8
|
+
when nil
|
9
|
+
""
|
10
|
+
when Class
|
11
|
+
"'" + edge_name.database_name + "'"
|
12
|
+
when String
|
13
|
+
"'" + edge_name + "'"
|
14
|
+
end
|
15
|
+
end.join(',')
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# used by array#allocate_model
|
20
|
+
def _allocate_model response=nil, auto = Config.autoload
|
21
|
+
|
22
|
+
if response.is_a? Hash
|
23
|
+
# save rid to a safe place
|
24
|
+
temp_rid = response.delete :"@rid"
|
25
|
+
|
26
|
+
return response if temp_rid.rid?.nil?
|
27
|
+
# extract type infos and convert to database-name
|
28
|
+
type = response.delete :"@type"
|
29
|
+
cat = response.delete :"@cat"
|
30
|
+
n, type_name = type.camelcase_and_namespace
|
31
|
+
n = self.namespace if n.nil?
|
32
|
+
# autoconvert rid's in attributes to model-records (exclude edges!)
|
33
|
+
if auto && !(cat.to_s =='e')
|
34
|
+
response.transform_values! do |x|
|
35
|
+
case x
|
36
|
+
when String
|
37
|
+
x.rid? ? x.load_rid : x
|
38
|
+
when Array
|
39
|
+
x.map do| y |
|
40
|
+
if y.is_a?(Hash) && y.include?(:@type) # if embedded documents are present, load them
|
41
|
+
y.merge( rid: '#0:0' ).allocate_model(false)
|
42
|
+
elsif y.rid? # if links are present, load the object
|
43
|
+
y.load_rid(false) # do not autoload further records, prevents from recursive locking
|
44
|
+
else
|
45
|
+
y
|
46
|
+
end
|
47
|
+
end
|
48
|
+
when Hash
|
49
|
+
if x.include?(:@type)
|
50
|
+
x.merge( rid: '#0:0' ).allocate_model(false)
|
51
|
+
else
|
52
|
+
x.transform_values!{|z| z.rid? ? z.load_rid(false) : z }
|
53
|
+
end
|
54
|
+
else
|
55
|
+
x
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
# choose the appropriate class
|
60
|
+
klass= Dry::Core::ClassBuilder.new( name: type_name, parent: nil, namespace: n).call
|
61
|
+
#
|
62
|
+
begin
|
63
|
+
# create a new object of that class with the appropriate attributes
|
64
|
+
new = klass.new **response.merge( rid: temp_rid || "#0:0" ) # #0:0 --> embedded model records
|
65
|
+
rescue ::ArgumentError => e
|
66
|
+
raise "Allocation of class #{klass.to_s} failed"
|
67
|
+
end
|
68
|
+
# map additional attributes to `input`
|
69
|
+
v = response.except *new.attributes.keys
|
70
|
+
v.empty? ? new : new.new( values: v.except( :"@in", :"@out" ) )
|
71
|
+
elsif response.is_a? Array
|
72
|
+
puts "Allocate_model..detected array"
|
73
|
+
## recursive behavior, just in case
|
74
|
+
response.map{ | y | _allocate_model y }
|
75
|
+
elsif response.rid?
|
76
|
+
# Autoload rid's
|
77
|
+
response.load_rid
|
78
|
+
else
|
79
|
+
response
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Arcade
|
2
|
+
module Support
|
3
|
+
module Object
|
4
|
+
# this is the rails method
|
5
|
+
def present?
|
6
|
+
!blank?
|
7
|
+
end
|
8
|
+
|
9
|
+
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 46
|
10
|
+
def presence
|
11
|
+
self if present?
|
12
|
+
end
|
13
|
+
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 19
|
14
|
+
def blank?
|
15
|
+
respond_to?(:empty?) ? !!empty? : !self
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
Object.include Arcade::Support::Object
|
data/lib/support/sql.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
#require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Arcade
|
4
|
+
module Support
|
5
|
+
module Sql
|
6
|
+
|
7
|
+
=begin
|
8
|
+
supports
|
9
|
+
where: 'string'
|
10
|
+
where: { property: 'value', property: value, ... }
|
11
|
+
where: ['string, { property: value, ... }, ... ]
|
12
|
+
|
13
|
+
Used by update and select
|
14
|
+
|
15
|
+
_Usecase:_
|
16
|
+
compose_where 'z=34', u: 6
|
17
|
+
=> "where z=34 and u = 6"
|
18
|
+
=end
|
19
|
+
|
20
|
+
def compose_where *arg , &b
|
21
|
+
arg = arg.flatten.compact
|
22
|
+
|
23
|
+
unless arg.blank?
|
24
|
+
g= generate_sql_list( arg , &b)
|
25
|
+
"where #{g}" unless g.empty?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
=begin
|
30
|
+
designs a list of "Key = Value" pairs combined by "and" or the binding provided by the block
|
31
|
+
ORD.generate_sql_list where: 25 , upper: '65'
|
32
|
+
=> "where=25 and upper='65'"
|
33
|
+
ORD.generate_sql_list( con_id: 25 , symbol: :G) { ',' }
|
34
|
+
=> "con_id=25 , symbol='G'"
|
35
|
+
|
36
|
+
If »NULL« should be addressed, { key: nil } is translated to "key = NULL" (used by set: in update and upsert),
|
37
|
+
{ key: [nil] } is translated to "key is NULL" ( used by where )
|
38
|
+
|
39
|
+
=end
|
40
|
+
def generate_sql_list attributes = {}, &b
|
41
|
+
fill = block_given? ? yield : 'and'
|
42
|
+
case attributes
|
43
|
+
when ::Hash
|
44
|
+
attributes.map do |key, value|
|
45
|
+
case value
|
46
|
+
when nil
|
47
|
+
"#{key}=NULL"
|
48
|
+
when ::Array
|
49
|
+
if value == [nil]
|
50
|
+
"#{key} is NULL"
|
51
|
+
else
|
52
|
+
"#{key} in #{value.to_db}"
|
53
|
+
end
|
54
|
+
when Range
|
55
|
+
"#{key} between #{value.first.to_or} and #{value.last.to_or} "
|
56
|
+
else # String, Symbol, Time, Trueclass, Falseclass ...
|
57
|
+
"#{key}=#{value.to_or}"
|
58
|
+
end
|
59
|
+
end.join(" #{fill} ")
|
60
|
+
when ::Array
|
61
|
+
attributes.map{|y| generate_sql_list y, &b }.join( " #{fill} " )
|
62
|
+
when String
|
63
|
+
attributes
|
64
|
+
when Symbol, Numeric
|
65
|
+
attributes.to_s
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
# used both in Query and MatchConnect
|
71
|
+
# while and where depend on @q, a struct
|
72
|
+
end # module
|
73
|
+
end # module
|
74
|
+
end # modul
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module Arcade
|
2
|
+
module Support
|
3
|
+
module String
|
4
|
+
#modified version of
|
5
|
+
# https://stackoverflow.com/questions/63769351/convert-string-to-camel-case-in-ruby
|
6
|
+
# returns an Array [ Namespace(first character upcase) , Type(class, camelcase) ]
|
7
|
+
#
|
8
|
+
# if the namespace is not found, joins all string-parts
|
9
|
+
def camelcase_and_namespace
|
10
|
+
if self.count("_") >= 1 || self.count('-') >=1
|
11
|
+
delimiters = Regexp.union(['-', '_'])
|
12
|
+
n,c= self.split(delimiters).then { |first, *rest| [first.tap {|s| s[0] = s[0].upcase}, rest.map(&:capitalize).join] }
|
13
|
+
## if base is the first part of the type-name, probably Arcade::Base is choosen a namespace. thats wrong
|
14
|
+
namespace_present = unless n == 'Base'
|
15
|
+
Object.const_get(n) rescue false # Database.namespace
|
16
|
+
else
|
17
|
+
false
|
18
|
+
end
|
19
|
+
# if no namespace is found, leave it empty and return the capitalized string as class name
|
20
|
+
namespace_present && !c.nil? ? [namespace_present,c] : [Database.namespace, n+c]
|
21
|
+
else
|
22
|
+
[ Database.namespace, self.capitalize ]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def snake_case
|
27
|
+
n= if split('::').first == Database.namespace.to_s
|
28
|
+
split('::')[1..-1].join
|
29
|
+
else
|
30
|
+
split("::").join
|
31
|
+
end
|
32
|
+
n.gsub(/([^\^])([A-Z])/,'\1_\2').downcase
|
33
|
+
end
|
34
|
+
|
35
|
+
# borrowed from ActiveSupport::Inflector
|
36
|
+
def underscore
|
37
|
+
word = self.dup
|
38
|
+
word.gsub!(/::/, '/')
|
39
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
40
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
41
|
+
word.tr!("-", "_")
|
42
|
+
word.downcase!
|
43
|
+
word
|
44
|
+
end
|
45
|
+
def capitalize_first_letter
|
46
|
+
self.sub(/^(.)/) { $1.capitalize }
|
47
|
+
end
|
48
|
+
# a rid is either #nn:nn or nn:nn
|
49
|
+
def rid?
|
50
|
+
self =~ /\A[#]{,1}[0-9]{1,}:[0-9]{1,}\z/
|
51
|
+
end
|
52
|
+
# return a valid rid (format: "nn:mm") or nil
|
53
|
+
def rid
|
54
|
+
self["#"].nil? ? "#"+ self : self if rid?
|
55
|
+
end
|
56
|
+
|
57
|
+
def where **args
|
58
|
+
if rid?
|
59
|
+
from_db.where **args
|
60
|
+
end
|
61
|
+
end
|
62
|
+
def to_a
|
63
|
+
[ self ]
|
64
|
+
end
|
65
|
+
|
66
|
+
def quote
|
67
|
+
str = self.dup
|
68
|
+
if str[0, 1] == "'" && str[-1, 1] == "'"
|
69
|
+
self
|
70
|
+
else
|
71
|
+
last_pos = 0
|
72
|
+
while (pos = str.index("'", last_pos))
|
73
|
+
str.insert(pos, "\\") if pos > 0 && str[pos - 1, 1] != "\\"
|
74
|
+
last_pos = pos + 1
|
75
|
+
end
|
76
|
+
"'#{str}'"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
## Load the database object if the string is a rid
|
81
|
+
# (Default: No Autoloading of rid-links)
|
82
|
+
def load_rid autocomplete = false
|
83
|
+
db.get( self ){ autocomplete } if rid? rescue nil
|
84
|
+
end
|
85
|
+
|
86
|
+
# updates the record ### retired in favour of Arcade::Base.update
|
87
|
+
# def update **args
|
88
|
+
## remove empty Arrays and Hashes.
|
89
|
+
## To remove attributes, use the remove syntax, do not privide empty fields to update!
|
90
|
+
# args.delete_if{|_,y|( y.is_a?(Array) || y.is_a?(Hash)) && y.blank? }
|
91
|
+
# return nil if args.empty?
|
92
|
+
# Arcade::Query.new( from: self , kind: :update, set: args).execute
|
93
|
+
# end
|
94
|
+
|
95
|
+
def to_human
|
96
|
+
self
|
97
|
+
end
|
98
|
+
private
|
99
|
+
def db
|
100
|
+
Arcade::Init.db
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
String.include Arcade::Support::String
|
107
|
+
|
108
|
+
module Types
|
109
|
+
include Dry.Types()
|
110
|
+
|
111
|
+
# include in attribute definitions
|
112
|
+
Rid = String.constrained( format: /\A[#]{1}[0-9]{1,}:[0-9]{1,}\z/ )
|
113
|
+
Blockchain = String.constrained( format: /^(algo|eth|btc)$/ ) # add other blockchain symbols here
|
114
|
+
Email = String.constrained( format: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i )
|
115
|
+
|
116
|
+
end
|
data/rails/arcade.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
## This is an init-script intended to be copied to
|
3
|
+
## rails-root/config/initializers
|
4
|
+
|
5
|
+
module Arcade
|
6
|
+
ProjectRoot = Rails.root
|
7
|
+
puts "Root: #{Rails.root}"
|
8
|
+
puts "Alternative: #{File.expand_path("../",__FILE__)}"
|
9
|
+
end
|
10
|
+
## Integrate a namespaced model
|
11
|
+
#module HC
|
12
|
+
#
|
13
|
+
#end
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
data/rails/config.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
---
|
2
|
+
:active_orient:
|
3
|
+
## Namespace: Prefix of Model-Objects. :self -> ActiveOrient::Model::{name}
|
4
|
+
## :object => No Prefix
|
5
|
+
## :active_orient => ActiveOrient::{name}
|
6
|
+
:namespace: :object
|
7
|
+
## model_dir: Path to model-files relative to the root of the application
|
8
|
+
## ie. app/model or model
|
9
|
+
:model_dir: 'lib/orient'
|
10
|
+
|
data/rails/connect.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
:orientdb:
|
3
|
+
:server: localhost # 172.28.50.109
|
4
|
+
:port: 2480
|
5
|
+
:logger: stdout # 'file' or 'stdout'
|
6
|
+
:database:
|
7
|
+
:development: GratefulDeadConcerts
|
8
|
+
:production: hcn_data
|
9
|
+
:test: temp
|
10
|
+
:admin:
|
11
|
+
:user: root
|
12
|
+
:pass: root
|
13
|
+
:auth:
|
14
|
+
:user: root
|
15
|
+
:pass: root
|
16
|
+
|
17
|
+
# hfx: 101
|
data/rails.md
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
# ArcadeDB and Rails
|
2
|
+
|
3
|
+
The usage of ArcadeDB in Rails requires just a few steps.
|
4
|
+
Based on a Rails 7 installation
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
rvm install 3.1
|
8
|
+
rvm use 3.1
|
9
|
+
gem install bundler
|
10
|
+
gem install rails
|
11
|
+
rails -v # Rails 7.xx
|
12
|
+
```
|
13
|
+
|
14
|
+
Create your working directory and initialize the system
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
mkdir rails_project; cd rails_project
|
18
|
+
rails new -OCT -css {tailwind, sass, bulma etc} .
|
19
|
+
```
|
20
|
+
This initializes a Rails-Stack, without active-record, action-cable and the test-suite.
|
21
|
+
(We will use rspec later)
|
22
|
+
|
23
|
+
This can be checked by inspecting «/config/application.rb «
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
./bin/dev
|
27
|
+
```
|
28
|
+
should work at this stage.
|
29
|
+
|
30
|
+
## Modify the Gemfile
|
31
|
+
Inform rails to use arcadedb
|
32
|
+
|
33
|
+
```
|
34
|
+
echo " gem 'arcadedb' , :path => '/home/your_cloned_active_orient_path/activeorient' " >> Gemfile
|
35
|
+
# or
|
36
|
+
|
37
|
+
echo " gem 'arcadedb' , :git => 'https://github.com/topofocus/arcadedb.git' " >> Gemfile
|
38
|
+
|
39
|
+
```
|
40
|
+
|
41
|
+
Run the bundler
|
42
|
+
|
43
|
+
```
|
44
|
+
bundle install & bundle update
|
45
|
+
```
|
46
|
+
## Copy Initializer and Configuration Files
|
47
|
+
change to the base-dir of the gem
|
48
|
+
--> bundle show active-orient
|
49
|
+
then copy
|
50
|
+
|
51
|
+
* rails/arcade.rb to config/initializers in the rails-project dir
|
52
|
+
* rails/.arcade.yml to config/ in the rails project
|
53
|
+
|
54
|
+
and modify the arcade.yml-file accordingly.
|
55
|
+
|
56
|
+
|
57
|
+
The database is present in the rails console, and
|
58
|
+
```ruby
|
59
|
+
rails c
|
60
|
+
puts DB.types
|
61
|
+
|
62
|
+
|
63
|
+
```
|
64
|
+
should display details.
|
65
|
+
|
66
|
+
|
67
|
+
**Notice** The spring-facility is running in the background. Stop the server prior reloading
|
68
|
+
the console ( ./bin/spring stop ).
|
69
|
+
|
70
|
+
## Model-files
|
71
|
+
The final step is to generate Model-Files.
|
72
|
+
|
73
|
+
In «/config/config.yml» the «:model_dir»-var points to
|
74
|
+
the location of the model-files. The default is 'lib/orient'. Change to your needs.
|
75
|
+
Don't use the app directory, as its autoloaded too early.
|
76
|
+
|
77
|
+
Upon startup, present model-classes are destroyed and overridden by present files in the autoload directory.
|
78
|
+
|
79
|
+
After envoking the rails console, the logfile displays sucessfully loaded and missing files, ie.
|
80
|
+
|
81
|
+
```
|
82
|
+
14.01.(08:28:45) INFO->ModelClass#RequireModelFile:..:model-file not present: /home/topo/workspace/orient-rails/lib/orient/followed_by.rb
|
83
|
+
14.01.(08:28:45) INFO->ModelClass#RequireModelFile:..:/home/topo/workspace/orient-rails/lib/orient/v.rb sucessfully loaded
|
84
|
+
```
|
85
|
+
|
86
|
+
## Model-file Example
|
87
|
+
|
88
|
+
To query the GratefulDeadConcerts Database, «v.rb» hosts the essential model methods.
|
89
|
+
As always, use «def self.{method}« for class methods and simply «def {method}» for methods working on the record level.
|
90
|
+
|
91
|
+
```
|
92
|
+
1 class V
|
93
|
+
2 def self.artists **attributes
|
94
|
+
3 names 'artist', **attributes
|
95
|
+
4 end
|
96
|
+
5
|
97
|
+
6 def self.songs **attributes
|
98
|
+
7 names 'song', **attributes
|
99
|
+
8 end
|
100
|
+
9
|
101
|
+
10 def self.types
|
102
|
+
11 oo = OrientSupport::OrientQuery
|
103
|
+
12 this_query = oo.new distinct: [:type, :a ] # --> "select distinct( type ) as a "
|
104
|
+
13 query_database( this_query ).a # returns an array of types, i.e. ["artist", "song"]
|
105
|
+
14 end
|
106
|
+
15 private
|
107
|
+
16 def self.names type, sort: :asc, limit: 20, skip: 0
|
108
|
+
17 puts "in names"
|
109
|
+
18 oo = OrientSupport::OrientQuery
|
110
|
+
19 query_database oo.new( where: {type: type },
|
111
|
+
20 order: { name: sort } ,
|
112
|
+
21 limit: limit ,
|
113
|
+
22 skip: skip )
|
114
|
+
23 end
|
115
|
+
24 end
|
116
|
+
|
117
|
+
```
|
118
|
+
|
119
|
+
Now
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
V.types
|
123
|
+
V.artists limit: 15, skip: 34, sort: :desc
|
124
|
+
```
|
125
|
+
queries the database, fetches 15 artists.
|
126
|
+
|
127
|
+
## Routing
|
128
|
+
|
129
|
+
for now, restful routing has some restrictions.
|
130
|
+
|
131
|
+
Rails-routing is depending on the "id"-attribute. Even if this is remapped to rid, the ressources-entries in "config/routes.rb" have to be modified by
|
132
|
+
|
133
|
+
```ruiby
|
134
|
+
resources :{controller}, id: /[^\/]+/
|
135
|
+
```
|
136
|
+
this enables the usage of id: "xx:yy"
|
137
|
+
|
138
|
+
In the controller the record is fetched as usual:
|
139
|
+
```ruby
|
140
|
+
def show
|
141
|
+
@{your coice} = {ActiveOrient-Model-Class}.autoload_object params[:id]
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arcadedb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hartmut Bischoff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -113,7 +113,52 @@ email: topofocus@gmail.com
|
|
113
113
|
executables: []
|
114
114
|
extensions: []
|
115
115
|
extra_rdoc_files: []
|
116
|
-
files:
|
116
|
+
files:
|
117
|
+
- ".gitignore"
|
118
|
+
- CHANGELOG.md
|
119
|
+
- Gemfile
|
120
|
+
- Gemfile.lock
|
121
|
+
- Guardfile
|
122
|
+
- LICENSE
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- arcade.yml
|
126
|
+
- arcadedb.gemspec
|
127
|
+
- bin/+
|
128
|
+
- bin/console
|
129
|
+
- examples/books.rb
|
130
|
+
- examples/relation_1__1.rb
|
131
|
+
- examples/relation_1__n.rb
|
132
|
+
- examples/relation_n_n.rb
|
133
|
+
- lib/arcade.rb
|
134
|
+
- lib/arcade/api/operations.rb
|
135
|
+
- lib/arcade/api/version.rb
|
136
|
+
- lib/arcade/base.rb
|
137
|
+
- lib/arcade/database.rb
|
138
|
+
- lib/arcade/errors.rb
|
139
|
+
- lib/arcade/logging.rb
|
140
|
+
- lib/arcade/version.rb
|
141
|
+
- lib/config.rb
|
142
|
+
- lib/init.rb
|
143
|
+
- lib/match.rb
|
144
|
+
- lib/model/basicdocument.rb
|
145
|
+
- lib/model/basicedge.rb
|
146
|
+
- lib/model/basicvertex.rb
|
147
|
+
- lib/model/document.rb
|
148
|
+
- lib/model/edge.rb
|
149
|
+
- lib/model/vertex.rb
|
150
|
+
- lib/models.rb
|
151
|
+
- lib/query.rb
|
152
|
+
- lib/support/class.rb
|
153
|
+
- lib/support/conversions.rb
|
154
|
+
- lib/support/model.rb
|
155
|
+
- lib/support/object.rb
|
156
|
+
- lib/support/sql.rb
|
157
|
+
- lib/support/string.rb
|
158
|
+
- rails.md
|
159
|
+
- rails/arcade.rb
|
160
|
+
- rails/config.yml
|
161
|
+
- rails/connect.yml
|
117
162
|
homepage: https://github.com/topofocus/arcadedb
|
118
163
|
licenses:
|
119
164
|
- MIT
|
@@ -133,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
178
|
- !ruby/object:Gem::Version
|
134
179
|
version: '0'
|
135
180
|
requirements: []
|
136
|
-
rubygems_version: 3.
|
181
|
+
rubygems_version: 3.4.6
|
137
182
|
signing_key:
|
138
183
|
specification_version: 4
|
139
184
|
summary: Ruby Interface to ArcadeDB
|