red_grape 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +18 -18
- data/lib/red_grape/graph.rb +6 -2
- data/lib/red_grape/pipe/context.rb +6 -0
- data/lib/red_grape/version.rb +1 -1
- data/test/test_traversal_patterns.rb +2 -3
- metadata +4 -4
data/README.md
CHANGED
@@ -2,25 +2,25 @@
|
|
2
2
|
|
3
3
|
* https://github.com/technohippy/red-grape
|
4
4
|
|
5
|
-
##
|
5
|
+
## Description:
|
6
6
|
|
7
|
-
|
7
|
+
redGrape is an in-memory graph database written in ruby. I made this in order to learn how graph databases work so that please do not use this for any serious purpose.
|
8
8
|
|
9
|
-
##
|
9
|
+
## Features/Problems:
|
10
10
|
|
11
11
|
* REPL
|
12
12
|
* load GraphML
|
13
13
|
* construct a graph programmatically
|
14
14
|
* traverse nodes and edges
|
15
15
|
|
16
|
-
##
|
16
|
+
## Synopsis:
|
17
17
|
|
18
18
|
g1 = RedGrape.load_graph 'data/graph-example-1.xml'
|
19
19
|
g1.v(1).out('knows').filter{it.age < 30}.name.transform{it.size}.take
|
20
20
|
# => [5]
|
21
21
|
|
22
22
|
g2 = RedGrape.load_graph 'data/graph-example-2.xml'
|
23
|
-
g2.v(89).as('x').outE.inV.loop('x'){loops < 3}.path.take
|
23
|
+
g2.v(89).as('x').outE.inV.loop('x'){it.loops < 3}.path.take
|
24
24
|
# => [[v[89], e[7006][89-followed_by->127], v[127], e[7786][127-sung_by->340], v[340]], [v[89],
|
25
25
|
|
26
26
|
## REPL:
|
@@ -63,9 +63,9 @@ RedGrape is an in-memory graph database written in ruby. I made this in order to
|
|
63
63
|
|
64
64
|
In REPL, the `take' method which invokes all pipes is automatically called.
|
65
65
|
|
66
|
-
##
|
66
|
+
## Server/Client:
|
67
67
|
|
68
|
-
###
|
68
|
+
### Server:
|
69
69
|
|
70
70
|
$ ./bin/trellis
|
71
71
|
+=================+
|
@@ -76,45 +76,45 @@ In REPL, the `take' method which invokes all pipes is automatically called.
|
|
76
76
|
Start server: druby://localhost:28282
|
77
77
|
[Ctrl+C to stop]
|
78
78
|
|
79
|
-
###
|
79
|
+
### Client:
|
80
80
|
|
81
81
|
$ ./bin/redgrape
|
82
82
|
T
|
83
83
|
oOOOo
|
84
84
|
oOo
|
85
85
|
-------- O --------
|
86
|
-
ruby
|
86
|
+
ruby :001 > $store
|
87
87
|
=> #<RedGrape::GraphStore:0x007fb615137a90>
|
88
|
-
ruby
|
88
|
+
ruby :002 > $store.graphs
|
89
89
|
=> [:tinker]
|
90
|
-
ruby
|
90
|
+
ruby :003 > g = $store.graph :tinker
|
91
91
|
=> redgrape[vertices:6 edges:6]
|
92
|
-
ruby
|
92
|
+
ruby :004 > g.add_vertex 7
|
93
93
|
=> redgrape[vertices:7 edges:6]
|
94
|
-
ruby
|
94
|
+
ruby :005 > store.put_graph :tinker, g
|
95
95
|
=> redgrape[vertices:7 edges:6]
|
96
96
|
|
97
97
|
Changes on a graph are not committed until the put_graph method called.
|
98
98
|
|
99
|
-
##
|
99
|
+
## Requirements:
|
100
100
|
|
101
101
|
* Nokogiri (http://nokogiri.org/)
|
102
102
|
|
103
|
-
##
|
103
|
+
## Developers:
|
104
104
|
|
105
|
-
|
105
|
+
after checking out the source, run:
|
106
106
|
|
107
107
|
$ rake newb
|
108
108
|
|
109
109
|
This task will install any missing dependencies, run the tests/specs,
|
110
110
|
and generate the RDoc.
|
111
111
|
|
112
|
-
##
|
112
|
+
## References:
|
113
113
|
|
114
114
|
* [Gremlin](https://github.com/tinkerpop/gremlin/wiki)
|
115
115
|
* [Pipes](https://github.com/tinkerpop/pipes/wiki/)
|
116
116
|
|
117
|
-
##
|
117
|
+
## License:
|
118
118
|
|
119
119
|
(The MIT License)
|
120
120
|
|
data/lib/red_grape/graph.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'nokogiri'
|
2
1
|
require 'red_grape/vertex'
|
3
2
|
require 'red_grape/edge'
|
4
3
|
require 'red_grape/property_description'
|
@@ -11,6 +10,7 @@ module RedGrape
|
|
11
10
|
self.new.load filename
|
12
11
|
end
|
13
12
|
|
13
|
+
# Returns the default graph which has 6 vertices and 6 edges.
|
14
14
|
def create_tinker_graph
|
15
15
|
self.new do |g|
|
16
16
|
v1 = g.add_vertex 1, name:'marko', age:29
|
@@ -28,6 +28,7 @@ module RedGrape
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
# Returns the features as a hash
|
31
32
|
def features
|
32
33
|
{
|
33
34
|
ignores_supplied_ids:false,
|
@@ -63,6 +64,9 @@ module RedGrape
|
|
63
64
|
|
64
65
|
attr_accessor :serializer
|
65
66
|
|
67
|
+
# Returns a new instance
|
68
|
+
# _block_ :: a block which is given the instance as the first argument
|
69
|
+
# to initialize it
|
66
70
|
def initialize(&block)
|
67
71
|
@serializer = Serializer::GraphMLSerializer.new self
|
68
72
|
@vertices = {}
|
@@ -71,7 +75,7 @@ module RedGrape
|
|
71
75
|
block.call self if block
|
72
76
|
end
|
73
77
|
|
74
|
-
def items(type, *id)
|
78
|
+
def items(type, *id) # :nodoc:
|
75
79
|
items = case type
|
76
80
|
when :vertex, :vertices
|
77
81
|
@vertices
|
@@ -88,6 +88,12 @@ module RedGrape
|
|
88
88
|
|
89
89
|
def eval(args={}, &block)
|
90
90
|
args.each {|k, v| self.send "#{k}=", v}
|
91
|
+
if @it
|
92
|
+
# so aggressive way...
|
93
|
+
def @it.loops=(l); @loops = l end
|
94
|
+
def @it.loops; @loops end
|
95
|
+
@it.loops = @loops
|
96
|
+
end
|
91
97
|
instance_eval(&block)
|
92
98
|
end
|
93
99
|
end
|
data/lib/red_grape/version.rb
CHANGED
@@ -59,8 +59,7 @@ class TraversalPatternsTest < Test::Unit::TestCase
|
|
59
59
|
g = RedGrape.load_graph 'data/graph-example-2.xml'
|
60
60
|
assert_equal 36, g.v(89).outE.inV.path.take.size
|
61
61
|
|
62
|
-
|
63
|
-
path = g.v(89).outE.inV.loop(2){loops < 3}.path.take.first
|
62
|
+
path = g.v(89).outE.inV.loop(2){it.loops < 3}.path.take.first
|
64
63
|
assert_equal '[v[89], e[7006][89-followed_by->127], v[127], e[7786][127-sung_by->340], v[340]]', path.to_s
|
65
64
|
assert_equal RedGrape::Vertex, path[0].class
|
66
65
|
assert_equal RedGrape::Edge, path[1].class
|
@@ -68,7 +67,7 @@ class TraversalPatternsTest < Test::Unit::TestCase
|
|
68
67
|
assert_equal RedGrape::Edge, path[3].class
|
69
68
|
assert_equal RedGrape::Vertex, path[4].class
|
70
69
|
|
71
|
-
path = g.v(89).as('x').outE.inV.loop('x'){loops < 3}.path.take.first
|
70
|
+
path = g.v(89).as('x').outE.inV.loop('x'){it.loops < 3}.path.take.first
|
72
71
|
assert_equal '[v[89], e[7006][89-followed_by->127], v[127], e[7786][127-sung_by->340], v[340]]', path.to_s
|
73
72
|
assert_equal RedGrape::Vertex, path[0].class
|
74
73
|
assert_equal RedGrape::Edge, path[1].class
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: red_grape
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &70169527487200 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70169527487200
|
25
25
|
description: RedGrape is an in-memory graph database written in ruby. I made this
|
26
26
|
in order to learn how graph databases work so that please do not use this for any
|
27
27
|
serious purpose.
|