red_grape 0.0.4 → 0.0.5
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 +12 -9
- data/bin/redgrape +18 -68
- data/bin/trellis +14 -6
- data/lib/red_grape/element.rb +10 -8
- data/lib/red_grape/graph.rb +17 -13
- data/lib/red_grape/graph_store.rb +10 -15
- data/lib/red_grape/irg.rb +68 -0
- data/lib/red_grape/version.rb +1 -1
- data/test/all.rb +4 -0
- data/test/test_graph.rb +6 -3
- metadata +7 -6
- data/History.txt +0 -6
- data/TODO.txt +0 -23
data/README.md
CHANGED
|
@@ -26,11 +26,10 @@ RedGrape is an in-memory graph database written in ruby. I made this in order to
|
|
|
26
26
|
## REPL:
|
|
27
27
|
|
|
28
28
|
$ bin/redgrape
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-----------------
|
|
29
|
+
T
|
|
30
|
+
oOOOo
|
|
31
|
+
oOo
|
|
32
|
+
-------- O --------
|
|
34
33
|
ruby :001 > g = RedGrape.create_tinker_graph
|
|
35
34
|
=> redgrape[vertices:6 edges:6]
|
|
36
35
|
ruby :002 > g.class
|
|
@@ -69,6 +68,11 @@ In REPL, the `take' method which invokes all pipes is automatically called.
|
|
|
69
68
|
### SERVER:
|
|
70
69
|
|
|
71
70
|
$ ./bin/trellis
|
|
71
|
+
+=================+
|
|
72
|
+
| + T + |
|
|
73
|
+
| oOo oOOOo oOo |
|
|
74
|
+
| 8 oOo 8 |
|
|
75
|
+
| O |
|
|
72
76
|
Start server: druby://localhost:28282
|
|
73
77
|
[Ctrl+C to stop]
|
|
74
78
|
|
|
@@ -76,10 +80,9 @@ In REPL, the `take' method which invokes all pipes is automatically called.
|
|
|
76
80
|
|
|
77
81
|
$ ./bin/redgrape
|
|
78
82
|
T
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
-------------------
|
|
83
|
+
oOOOo
|
|
84
|
+
oOo
|
|
85
|
+
-------- O --------
|
|
83
86
|
ruby-1.9.3-head :001 > store = RedGrape::GraphStore.open
|
|
84
87
|
=> #<RedGrape::GraphStore:0x007fb615137a90>
|
|
85
88
|
ruby-1.9.3-head :002 > store.graphs
|
data/bin/redgrape
CHANGED
|
@@ -1,80 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
$: << File.expand_path('../../lib', __FILE__)
|
|
3
3
|
|
|
4
|
-
require 'drb/drb'
|
|
5
|
-
require 'irb'
|
|
6
|
-
require 'irb/completion'
|
|
7
4
|
require 'optparse'
|
|
8
|
-
require 'red_grape'
|
|
9
5
|
require 'red_grape/graph_store'
|
|
6
|
+
require 'red_grape/irg'
|
|
7
|
+
require 'red_grape/version'
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
module Help
|
|
14
|
-
module_function
|
|
15
|
-
|
|
16
|
-
def redgrape?(key=nil)
|
|
17
|
-
case key
|
|
18
|
-
when NilClass
|
|
19
|
-
puts help_message
|
|
20
|
-
:OK
|
|
21
|
-
when 'pipe', 'pipes', :pipe, :pieps
|
|
22
|
-
puts pipe_help_message
|
|
23
|
-
:OK
|
|
24
|
-
else
|
|
25
|
-
puts '?'
|
|
26
|
-
:NG
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def help_message
|
|
31
|
-
<<-EOS
|
|
32
|
-
Subcommands:
|
|
33
|
-
redgrape? :pipe : list all pipes.
|
|
34
|
-
EOS
|
|
35
|
-
#redgrape? '[pipe name]' : describe the given pipe.
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def pipe_help_message
|
|
39
|
-
pipes = RedGrape::Pipe.constants.map(&:to_s).select{|p|
|
|
40
|
-
p =~ /.*Pipe$/}.map{|p| underscore p.sub(/Pipe$/, '')}
|
|
41
|
-
"Available pipes:\n #{pipes.sort.join ', '}"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def underscore(str)
|
|
45
|
-
str.sub(/^[A-Z]/){|p| p.downcase}.gsub(/([a-z])([A-Z])/){"#{$1}_#{$2.downcase}"}
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def camelcase(str)
|
|
49
|
-
str.sub(/^[a-z]/){|p| p.upcase}.gsub(/_([a-z])/){"#{$1.upcase}"}
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def redgrape?(key=nil)
|
|
55
|
-
RedGrape::Help.redgrape? key
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
alias rg? redgrape?
|
|
59
|
-
|
|
9
|
+
# interprete options
|
|
10
|
+
::Version = RedGrape::VERSION
|
|
60
11
|
COMMAND_LINE = "#{$0} #{ARGV.join(' ')}"
|
|
61
|
-
OPT = {
|
|
12
|
+
OPT = {
|
|
13
|
+
port:RedGrape::GraphStore::DEFAULT_PORT
|
|
14
|
+
}
|
|
62
15
|
opts = OptionParser.new
|
|
63
|
-
|
|
64
|
-
|
|
16
|
+
opts.on('-p', '--port <port number>',
|
|
17
|
+
"Set the port number for the connected datastore (default: #{OPT[:port]})"){|v| OPT[:port] = v.to_i}
|
|
65
18
|
opts.on_tail('-v', '--version', 'Show version.'){puts(opts.ver); exit}
|
|
66
19
|
opts.on_tail('-h', '--help', 'Show this message.'){puts(opts.help); exit}
|
|
67
|
-
|
|
68
|
-
::Version = RedGrape::VERSION
|
|
69
20
|
opts.order! ARGV
|
|
70
|
-
CMD = ARGV.shift
|
|
71
21
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
puts
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
22
|
+
# start
|
|
23
|
+
RedGrape::IRG.start(OPT[:port]) do
|
|
24
|
+
puts <<-EOS
|
|
25
|
+
T
|
|
26
|
+
oOOOo
|
|
27
|
+
oOo
|
|
28
|
+
-------- O --------
|
|
29
|
+
EOS
|
|
30
|
+
end
|
data/bin/trellis
CHANGED
|
@@ -5,23 +5,31 @@ require 'optparse'
|
|
|
5
5
|
require 'red_grape/graph_store'
|
|
6
6
|
require 'red_grape/version'
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
# interprete options
|
|
10
9
|
::Version = RedGrape::VERSION
|
|
11
10
|
COMMAND_LINE = "#{$0} #{ARGV.join(' ')}"
|
|
12
|
-
OPT = {
|
|
11
|
+
OPT = {
|
|
12
|
+
port:RedGrape::GraphStore::DEFAULT_PORT,
|
|
13
|
+
dbfile:'dbfile.bin'
|
|
14
|
+
}
|
|
13
15
|
opts = OptionParser.new
|
|
14
16
|
opts.on('-p', '--port <port number>',
|
|
15
|
-
"Set the port number (default: #{
|
|
17
|
+
"Set the port number (default: #{OPT[:port]})"){|v| OPT[:port] = v.to_i}
|
|
16
18
|
opts.on('-d', '--file <datafile>',
|
|
17
|
-
"Set the
|
|
19
|
+
"Set the filename to store data (default: #{OPT[:dbfile]})"){|v| OPT[:dbfile] = v}
|
|
18
20
|
opts.on_tail('-v', '--version', 'Show version'){puts(opts.ver); exit}
|
|
19
21
|
opts.on_tail('-h', '--help', 'Show this message'){puts(opts.help); exit}
|
|
20
22
|
opts.order! ARGV
|
|
21
23
|
|
|
24
|
+
# start
|
|
22
25
|
Signal.trap :INT, 'EXIT'
|
|
23
|
-
RedGrape::GraphStore.start(:
|
|
26
|
+
RedGrape::GraphStore.start(OPT[:port], OPT[:dbfile]) do
|
|
24
27
|
puts <<-EOS
|
|
28
|
+
+=================+
|
|
29
|
+
| + T + |
|
|
30
|
+
| oOo oOOOo oOo |
|
|
31
|
+
| 8 oOo 8 |
|
|
32
|
+
| O |
|
|
25
33
|
Start server: #{DRb.uri}
|
|
26
34
|
[Ctrl+C to stop]
|
|
27
35
|
EOS
|
data/lib/red_grape/element.rb
CHANGED
|
@@ -27,16 +27,18 @@ module RedGrape
|
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
# set property value with type checking
|
|
30
|
+
# set property value with type checking if its definition exists
|
|
31
31
|
def set_property(kid, v)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
if @property_description && desc = @property_description[kid]
|
|
33
|
+
if desc.accessible? v
|
|
34
|
+
self[desc.name] = v
|
|
35
|
+
elsif desc.convertable? v
|
|
36
|
+
self[desc.name] = desc.convert v
|
|
37
|
+
else
|
|
38
|
+
raise ArgumentError.new "#{kid} should be #{desc.type}."
|
|
39
|
+
end
|
|
38
40
|
else
|
|
39
|
-
|
|
41
|
+
self[kid] = v
|
|
40
42
|
end
|
|
41
43
|
end
|
|
42
44
|
|
data/lib/red_grape/graph.rb
CHANGED
|
@@ -120,6 +120,7 @@ module RedGrape
|
|
|
120
120
|
def add_vertex(id, v=nil)
|
|
121
121
|
if v
|
|
122
122
|
if v.is_a? Hash
|
|
123
|
+
id = id.to_s
|
|
123
124
|
v = Vertex.new self, id, v
|
|
124
125
|
end
|
|
125
126
|
else
|
|
@@ -128,14 +129,15 @@ module RedGrape
|
|
|
128
129
|
id = (v[:id] || v['id']).to_s
|
|
129
130
|
elsif id.respond_to?(:id)
|
|
130
131
|
v = id
|
|
131
|
-
id = v.id
|
|
132
|
+
id = v.id.to_s
|
|
132
133
|
else
|
|
134
|
+
id = id.to_s
|
|
133
135
|
v = {}
|
|
134
136
|
end
|
|
135
137
|
v = Vertex.new self, id, v
|
|
136
138
|
end
|
|
137
|
-
id = id.to_s
|
|
138
139
|
raise ArgumentError.new "invalid id" unless id == v.id
|
|
140
|
+
raise ArgumentError.new "#{id} already exists." if @vertices[id]
|
|
139
141
|
|
|
140
142
|
@vertices[id] = v
|
|
141
143
|
end
|
|
@@ -155,17 +157,19 @@ module RedGrape
|
|
|
155
157
|
end
|
|
156
158
|
|
|
157
159
|
def add_edge(id, from, to, label, opts={})
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
160
|
+
if id.is_a? Edge
|
|
161
|
+
raise ArgumentError.new "#{id.id} already exists." if @edges[id.id]
|
|
162
|
+
@edges[id.id] = id
|
|
163
|
+
else
|
|
164
|
+
id = id.to_s
|
|
165
|
+
raise ArgumentError.new "#{id} already exists." if @edges[id]
|
|
166
|
+
|
|
167
|
+
from = self.vertex(from.to_s) unless from.is_a? Vertex
|
|
168
|
+
to = self.vertex(to.to_s) unless to.is_a? Vertex
|
|
169
|
+
add_vertex from unless self.vertex(from.id)
|
|
170
|
+
add_vertex to unless self.vertex(to.id)
|
|
171
|
+
@edges[id] = Edge.new self, id, from, to, label, opts
|
|
172
|
+
end
|
|
169
173
|
end
|
|
170
174
|
|
|
171
175
|
def remove_edge(id)
|
|
@@ -4,15 +4,18 @@ require 'red_grape'
|
|
|
4
4
|
module RedGrape
|
|
5
5
|
class GraphStore
|
|
6
6
|
DEFAULT_PORT = 28282
|
|
7
|
-
DEFAULT_URI = "druby://localhost:#{DEFAULT_PORT}"
|
|
8
7
|
|
|
9
8
|
class << self
|
|
10
|
-
def start(
|
|
11
|
-
self.new(filename).start
|
|
9
|
+
def start(port=nil, filename=nil, &block)
|
|
10
|
+
self.new(filename).start port, &block
|
|
12
11
|
end
|
|
13
12
|
|
|
14
|
-
def
|
|
15
|
-
|
|
13
|
+
def uri(port=nil)
|
|
14
|
+
"druby://localhost:#{port || DEFAULT_PORT}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def open(port=nil)
|
|
18
|
+
DRbObject.new_with_uri(uri port)
|
|
16
19
|
end
|
|
17
20
|
end
|
|
18
21
|
|
|
@@ -48,22 +51,14 @@ module RedGrape
|
|
|
48
51
|
@graphs[key.to_sym] = graph
|
|
49
52
|
end
|
|
50
53
|
|
|
51
|
-
def start(
|
|
54
|
+
def start(port=nil, &block)
|
|
52
55
|
at_exit do
|
|
53
56
|
File.open @filename, 'w' do |file|
|
|
54
57
|
Marshal.dump @graphs, file
|
|
55
58
|
end if @filename
|
|
56
59
|
end
|
|
57
60
|
|
|
58
|
-
uri
|
|
59
|
-
when NilClass, :default
|
|
60
|
-
DEFAULT_URI
|
|
61
|
-
when Integer
|
|
62
|
-
"druby://localhost:#{uri}"
|
|
63
|
-
else
|
|
64
|
-
uri
|
|
65
|
-
end
|
|
66
|
-
DRb.start_service uri, self
|
|
61
|
+
DRb.start_service self.class.uri(port), self
|
|
67
62
|
block.call if block
|
|
68
63
|
sleep
|
|
69
64
|
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'drb/drb'
|
|
2
|
+
require 'irb'
|
|
3
|
+
require 'irb/completion'
|
|
4
|
+
require 'red_grape'
|
|
5
|
+
require 'red_grape/graph_store'
|
|
6
|
+
|
|
7
|
+
module RedGrape
|
|
8
|
+
class IRG
|
|
9
|
+
module Help
|
|
10
|
+
module_function
|
|
11
|
+
def redgrape?(key=nil)
|
|
12
|
+
case key
|
|
13
|
+
when NilClass
|
|
14
|
+
puts help_message
|
|
15
|
+
:OK
|
|
16
|
+
when 'pipe', 'pipes', :pipe, :pieps
|
|
17
|
+
puts pipe_help_message
|
|
18
|
+
:OK
|
|
19
|
+
else
|
|
20
|
+
puts '?'
|
|
21
|
+
:NG
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def help_message
|
|
26
|
+
<<-EOS
|
|
27
|
+
Subcommands:
|
|
28
|
+
redgrape? :pipe : list all pipes.
|
|
29
|
+
EOS
|
|
30
|
+
#redgrape? '[pipe name]' : describe the given pipe.
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def pipe_help_message
|
|
34
|
+
pipes = RedGrape::Pipe.constants.map(&:to_s).select{|p|
|
|
35
|
+
p =~ /.*Pipe$/}.map{|p| underscore p.sub(/Pipe$/, '')}
|
|
36
|
+
"Available pipes:\n #{pipes.sort.join ', '}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def underscore(str)
|
|
40
|
+
str.sub(/^[A-Z]/){|p| p.downcase}.gsub(/([a-z])([A-Z])/){"#{$1}_#{$2.downcase}"}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def camelcase(str)
|
|
44
|
+
str.sub(/^[a-z]/){|p| p.upcase}.gsub(/_([a-z])/){"#{$1.upcase}"}
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class << self
|
|
49
|
+
def start(port=nil, &block)
|
|
50
|
+
self.new.start port, &block
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def start(port=nil, &block)
|
|
55
|
+
Kernel.module_eval %Q{
|
|
56
|
+
def redgrape?(key=nil)
|
|
57
|
+
RedGrape::IRG::Help.redgrape? key
|
|
58
|
+
end
|
|
59
|
+
alias rg? redgrape?
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
RedGrape.set_auto_take
|
|
63
|
+
$store = RedGrape::GraphStore.open port if port
|
|
64
|
+
block.call if block
|
|
65
|
+
IRB.start
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
data/lib/red_grape/version.rb
CHANGED
data/test/all.rb
ADDED
data/test/test_graph.rb
CHANGED
|
@@ -7,6 +7,9 @@ class GraphTest < Test::Unit::TestCase
|
|
|
7
7
|
graph.add_vertex id:1, val:'a'
|
|
8
8
|
graph.add_vertex id:2, val:'b'
|
|
9
9
|
graph.add_vertex id:3, val:'c'
|
|
10
|
+
assert_raise(ArgumentError) do
|
|
11
|
+
graph.add_vertex id:3, val:'d'
|
|
12
|
+
end
|
|
10
13
|
|
|
11
14
|
assert_equal 3, graph.vertex.size
|
|
12
15
|
assert_equal '1', graph.vertex(1).id
|
|
@@ -104,7 +107,7 @@ class GraphTest < Test::Unit::TestCase
|
|
|
104
107
|
v2 = g.add_vertex 2
|
|
105
108
|
v3 = g.add_vertex 3
|
|
106
109
|
e12 = g.add_edge 1, 1, 2, :connect
|
|
107
|
-
e23 = g.add_edge
|
|
110
|
+
e23 = g.add_edge 2, 2, 3, :connect
|
|
108
111
|
assert v1.out_edges.map(&:id).include?(e12.id)
|
|
109
112
|
assert v2.in_edges.map(&:id).include?(e12.id)
|
|
110
113
|
assert v2.out_edges.map(&:id).include?(e23.id)
|
|
@@ -128,7 +131,7 @@ class GraphTest < Test::Unit::TestCase
|
|
|
128
131
|
v2 = g.add_vertex 2
|
|
129
132
|
v3 = g.add_vertex 3
|
|
130
133
|
e12 = g.add_edge 1, 1, 2, :connect
|
|
131
|
-
e23 = g.add_edge
|
|
134
|
+
e23 = g.add_edge 2, 2, 3, :connect
|
|
132
135
|
assert v1.out_edges.map(&:id).include?(e12.id)
|
|
133
136
|
assert v2.in_edges.map(&:id).include?(e12.id)
|
|
134
137
|
assert v2.out_edges.map(&:id).include?(e23.id)
|
|
@@ -141,7 +144,7 @@ class GraphTest < Test::Unit::TestCase
|
|
|
141
144
|
v2 = g.add_vertex 2
|
|
142
145
|
v3 = g.add_vertex 3
|
|
143
146
|
e12 = g.add_edge 1, 1, 2, :connect
|
|
144
|
-
e23 = g.add_edge
|
|
147
|
+
e23 = g.add_edge 2, 2, 3, :connect
|
|
145
148
|
assert v1.out_edges.map(&:id).include?(e12.id)
|
|
146
149
|
assert v2.in_edges.map(&:id).include?(e12.id)
|
|
147
150
|
assert v2.out_edges.map(&:id).include?(e23.id)
|
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.5
|
|
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-08 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: nokogiri
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &70107699251780 !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: *70107699251780
|
|
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.
|
|
@@ -36,10 +36,8 @@ files:
|
|
|
36
36
|
- .autotest
|
|
37
37
|
- .gitignore
|
|
38
38
|
- Gemfile
|
|
39
|
-
- History.txt
|
|
40
39
|
- README.md
|
|
41
40
|
- Rakefile
|
|
42
|
-
- TODO.txt
|
|
43
41
|
- bin/redgrape
|
|
44
42
|
- bin/trellis
|
|
45
43
|
- data/graph-example-1.xml
|
|
@@ -52,6 +50,7 @@ files:
|
|
|
52
50
|
- lib/red_grape/element.rb
|
|
53
51
|
- lib/red_grape/graph.rb
|
|
54
52
|
- lib/red_grape/graph_store.rb
|
|
53
|
+
- lib/red_grape/irg.rb
|
|
55
54
|
- lib/red_grape/path_group.rb
|
|
56
55
|
- lib/red_grape/pipe/aggregate_pipe.rb
|
|
57
56
|
- lib/red_grape/pipe/as_pipe.rb
|
|
@@ -80,6 +79,7 @@ files:
|
|
|
80
79
|
- lib/red_grape/version.rb
|
|
81
80
|
- lib/red_grape/vertex.rb
|
|
82
81
|
- red_grape.gemspec
|
|
82
|
+
- test/all.rb
|
|
83
83
|
- test/test_element.rb
|
|
84
84
|
- test/test_graph.rb
|
|
85
85
|
- test/test_on_the_nature_of_pipes.rb
|
|
@@ -112,6 +112,7 @@ signing_key:
|
|
|
112
112
|
specification_version: 3
|
|
113
113
|
summary: RedGrape - Extremely Simple GraphDB
|
|
114
114
|
test_files:
|
|
115
|
+
- test/all.rb
|
|
115
116
|
- test/test_element.rb
|
|
116
117
|
- test/test_graph.rb
|
|
117
118
|
- test/test_on_the_nature_of_pipes.rb
|
data/History.txt
DELETED
data/TODO.txt
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
TODO
|
|
2
|
-
* serialize a graph
|
|
3
|
-
* implement tinkerpop methods
|
|
4
|
-
* use symbols for keys
|
|
5
|
-
* customize irb prompt
|
|
6
|
-
|
|
7
|
-
DONE
|
|
8
|
-
* show features
|
|
9
|
-
* marshal
|
|
10
|
-
* readonly graph
|
|
11
|
-
* use dRuby for persistence
|
|
12
|
-
* cut a GraphML reader function from Graph class
|
|
13
|
-
|
|
14
|
-
MEMO
|
|
15
|
-
#IRB.init_config 'redgrape'
|
|
16
|
-
#IRB.conf[:PROMPT][:RED_GRAPE] = {
|
|
17
|
-
# :PROMPT_I => "abc%N(%m):%03n:%i> ",
|
|
18
|
-
# :PROMPT_S => "abc%N(%m):%03n:%i%l ",
|
|
19
|
-
# :PROMPT_C => "abc%N(%m):%03n:%i* ",
|
|
20
|
-
# :RETURN => "%s\n"
|
|
21
|
-
#}
|
|
22
|
-
#IRB.conf[:PROMPT_MODE] = :RED_GRAPE
|
|
23
|
-
|