red_grape 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.swp
2
+ dbfile.bin
3
+ pkg/
4
+ red_grape-*.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in red-grape.gemspec
4
+ gemspec
@@ -15,52 +15,52 @@ RedGrape is an in-memory graph database written in ruby. I made this in order to
15
15
 
16
16
  ## SYNOPSIS:
17
17
 
18
- g1 = RedGrape.load_graph 'data/graph-example-1.xml'
19
- g1.v(1).out('knows').filter{it.age < 30}.name.transform{it.size}.take
20
- # => [5]
18
+ g1 = RedGrape.load_graph 'data/graph-example-1.xml'
19
+ g1.v(1).out('knows').filter{it.age < 30}.name.transform{it.size}.take
20
+ # => [5]
21
21
 
22
- g2 = RedGrape.load_graph 'data/graph-example-2.xml'
23
- g2.v(89).as('x').outE.inV.loop('x'){loops < 3}.path.take
24
- # => [[v[89], e[7006][89-followed_by->127], v[127], e[7786][127-sung_by->340], v[340]], [v[89],
22
+ g2 = RedGrape.load_graph 'data/graph-example-2.xml'
23
+ g2.v(89).as('x').outE.inV.loop('x'){loops < 3}.path.take
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:
27
27
 
28
- $ bin/redgrape
29
- T
30
- ooooo
31
- ----- ooo -----
32
- RED o GRAPE
33
- -----------------
34
- ruby :001 > g = RedGrape.create_tinker_graph
35
- => redgrape[vertices:6 edges:6]
36
- ruby :002 > g.class
37
- => RedGrape::Graph
38
- ruby :003 > g.V
39
- => [v[1], v[2], v[3], v[4], v[5], v[6]]
40
- ruby :004 > g.V.name
41
- => ["marko", "vadas", "lop", "josh", "ripple", "peter"]
42
- ruby :005 > g.E
43
- => [e[7][1-knows->2], e[8][1-knows->4], e[9][1-created->3], e[10][4-created->5], e[11][4-created->3], e[12][6-created->3]]
44
- ruby :006 > v = g.v(1)
45
- => v[1]
46
- ruby :007 > "#{v.name} is #{v.age} years old."
47
- => "marko is 29 years old."
48
- ruby :008 > v.out
49
- => [v[2], v[4], v[3]]
50
- ruby :009 > v.out('knows')
51
- => [v[2], v[4]]
52
- ruby :010 > v.outE
53
- => [e[7][1-knows->2], e[8][1-knows->4], e[9][1-created->3]]
54
- ruby :011 > v.outE('knows')
55
- => [e[7][1-knows->2], e[8][1-knows->4]]
56
- ruby :012 > v.outE.weight
57
- => [0.5, 1.0, 0.4]
58
- ruby :013 > v.outE.has('weight', :lt, 1).inV
59
- => [v[2], v[3]]
60
- ruby :014 > v.outE.filter{it.weight < 1}.inV
61
- => [v[2], v[3]]
62
- ruby :015 > v.out('knows').filter{it.age > 30}.out('created').name
63
- => ["ripple", "lop"]
28
+ $ bin/redgrape
29
+ T
30
+ ooooo
31
+ ----- ooo -----
32
+ RED o GRAPE
33
+ -----------------
34
+ ruby :001 > g = RedGrape.create_tinker_graph
35
+ => redgrape[vertices:6 edges:6]
36
+ ruby :002 > g.class
37
+ => RedGrape::Graph
38
+ ruby :003 > g.V
39
+ => [v[1], v[2], v[3], v[4], v[5], v[6]]
40
+ ruby :004 > g.V.name
41
+ => ["marko", "vadas", "lop", "josh", "ripple", "peter"]
42
+ ruby :005 > g.E
43
+ => [e[7][1-knows->2], e[8][1-knows->4], e[9][1-created->3], e[10][4-created->5], e[11][4-created->3], e[12][6-created->3]]
44
+ ruby :006 > v = g.v(1)
45
+ => v[1]
46
+ ruby :007 > "#{v.name} is #{v.age} years old."
47
+ => "marko is 29 years old."
48
+ ruby :008 > v.out
49
+ => [v[2], v[4], v[3]]
50
+ ruby :009 > v.out('knows')
51
+ => [v[2], v[4]]
52
+ ruby :010 > v.outE
53
+ => [e[7][1-knows->2], e[8][1-knows->4], e[9][1-created->3]]
54
+ ruby :011 > v.outE('knows')
55
+ => [e[7][1-knows->2], e[8][1-knows->4]]
56
+ ruby :012 > v.outE.weight
57
+ => [0.5, 1.0, 0.4]
58
+ ruby :013 > v.outE.has('weight', :lt, 1).inV
59
+ => [v[2], v[3]]
60
+ ruby :014 > v.outE.filter{it.weight < 1}.inV
61
+ => [v[2], v[3]]
62
+ ruby :015 > v.out('knows').filter{it.age > 30}.out('created').name
63
+ => ["ripple", "lop"]
64
64
 
65
65
  In REPL, the `take' method which invokes all pipes is automatically called.
66
66
 
@@ -86,12 +86,12 @@ In REPL, the `take' method which invokes all pipes is automatically called.
86
86
  => [:tinker]
87
87
  ruby-1.9.3-head :003 > g = store.graph :tinker
88
88
  => redgrape[vertices:6 edges:6]
89
- ruby-1.9.3-head :004 > g.v
90
- => [v[1], v[2], v[3], v[4], v[5], v[6]]
91
- ruby-1.9.3-head :005 > g.v.out
92
- => [v[2], v[4], v[3], v[5], v[3], v[3]]
93
- ruby-1.9.3-head :006 > g.v.out.name
94
- => ["vadas", "josh", "lop", "ripple", "lop", "lop"]
89
+ ruby-1.9.3-head :004 > g.add_vertex 7
90
+ => redgrape[vertices:7 edges:6]
91
+ ruby-1.9.3-head :005 > store.put_graph :tinker, g
92
+ => redgrape[vertices:7 edges:6]
93
+
94
+ Changes on a graph are not committed until the put_graph method called.
95
95
 
96
96
  ## REQUIREMENTS:
97
97
 
@@ -101,7 +101,7 @@ In REPL, the `take' method which invokes all pipes is automatically called.
101
101
 
102
102
  After checking out the source, run:
103
103
 
104
- $ rake newb
104
+ $ rake newb
105
105
 
106
106
  This task will install any missing dependencies, run the tests/specs,
107
107
  and generate the RDoc.
data/Rakefile CHANGED
@@ -1,19 +1 @@
1
- # -*- ruby -*-
2
-
3
- require 'rubygems'
4
- require 'hoe'
5
-
6
- # Hoe.plugin :compiler
7
- # Hoe.plugin :gem_prelude_sucks
8
- # Hoe.plugin :inline
9
- # Hoe.plugin :racc
10
- # Hoe.plugin :rcov
11
- # Hoe.plugin :rubyforge
12
-
13
- Hoe.spec 'red_grape' do
14
- developer('ANDO Yasushi', 'andyjpn@gmail.com')
15
-
16
- # self.rubyforge_name = 'red_grapex' # if different than 'red_grape'
17
- end
18
-
19
- # vim: syntax=ruby
1
+ require "bundler/gem_tasks"
data/TODO.txt ADDED
@@ -0,0 +1,23 @@
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
+
data/bin/redgrape CHANGED
@@ -72,10 +72,9 @@ CMD = ARGV.shift
72
72
  $store = RedGrape::GraphStore.open
73
73
 
74
74
  puts %Q{ T
75
- ooooo
76
- ------ ooo ------
77
- RED o GRAPE
78
- -------------------
75
+ o000o
76
+ o0o
77
+ -------- 0 --oo-o--
79
78
  }
80
79
 
81
80
  IRB.start
data/bin/trellis CHANGED
@@ -1,8 +1,26 @@
1
1
  #!/usr/bin/env ruby
2
2
  $: << File.expand_path('../../lib', __FILE__)
3
+
4
+ require 'optparse'
3
5
  require 'red_grape/graph_store'
6
+ require 'red_grape/version'
7
+
8
+ DEFAULT_DBFILE = 'dbfile.bin'
9
+
10
+ ::Version = RedGrape::VERSION
11
+ COMMAND_LINE = "#{$0} #{ARGV.join(' ')}"
12
+ OPT = {}
13
+ opts = OptionParser.new
14
+ opts.on('-p', '--port <port number>',
15
+ "Set the port number (default: #{RedGrape::GraphStore::DEFAULT_PORT})"){|v| OPT[:port] = v}
16
+ opts.on('-d', '--file <datafile>',
17
+ "Set the name of a file to store data (default: #{DEFAULT_DBFILE})"){|v| OPT[:dbfile] = v}
18
+ opts.on_tail('-v', '--version', 'Show version'){puts(opts.ver); exit}
19
+ opts.on_tail('-h', '--help', 'Show this message'){puts(opts.help); exit}
20
+ opts.order! ARGV
4
21
 
5
- RedGrape::GraphStore.start(:default, 'dbfile.bin') do
22
+ Signal.trap :INT, 'EXIT'
23
+ RedGrape::GraphStore.start(:default, DEFAULT_DBFILE) do
6
24
  puts <<-EOS
7
25
  Start server: #{DRb.uri}
8
26
  [Ctrl+C to stop]
data/lib/ext/array_ext.rb CHANGED
@@ -30,7 +30,13 @@ class Array
30
30
  alias method_missing_without_prop_pipe method_missing
31
31
  def method_missing_with_prop_pipe(name, *args, &block)
32
32
  if graph_item_array?
33
- map! {|e| e.send name, *args, &block}
33
+ map! do |e|
34
+ begin
35
+ e.send name, *args, &block
36
+ rescue NoMethodError
37
+ nil
38
+ end
39
+ end.compact!
34
40
  else
35
41
  method_missing_without_prop_pipe name, *args, &block
36
42
  end
@@ -0,0 +1,5 @@
1
+ class NilClass
2
+ def _
3
+ nil
4
+ end
5
+ end
@@ -53,10 +53,6 @@ module RedGrape
53
53
  pipe.pass self, context
54
54
  end
55
55
 
56
- def copy(depth=nil)
57
- self # TODO
58
- end
59
-
60
56
  def ==(obj)
61
57
  self.class == obj.class && self.id == obj.id
62
58
  end
@@ -27,6 +27,38 @@ module RedGrape
27
27
  g.add_edge 12, v6, v3, 'created', weight:0.2
28
28
  end
29
29
  end
30
+
31
+ def features
32
+ {
33
+ ignores_supplied_ids:false,
34
+ is_persistent:false,
35
+ is_rdf_model:false,
36
+ is_wrapper:false,
37
+ supports_boolean_property:true,
38
+ supports_double_property:true,
39
+ supports_duplicate_edges:true,
40
+ supports_edge_index:false,
41
+ supports_edge_iteration:true,
42
+ supports_edge_key_index:false,
43
+ supports_float_property:true,
44
+ supports_indices:false,
45
+ supports_integer_property:true,
46
+ supports_key_indices:false,
47
+ supports_long_property:true,
48
+ supports_map_property:true,
49
+ supports_mixed_list_property:true,
50
+ supports_primitive_array_property:true,
51
+ supports_self_loops:true,
52
+ supports_serializable_object_property:true,
53
+ supports_string_property:true,
54
+ supports_threded_transactions:false,
55
+ supports_transactions:false,
56
+ supports_uniform_list_property:true,
57
+ supports_vertex_index:false,
58
+ supports_vertex_iteration:true,
59
+ supports_vertex_key_index:false
60
+ }
61
+ end
30
62
  end
31
63
 
32
64
  attr_accessor :serializer
@@ -112,10 +144,10 @@ module RedGrape
112
144
  id = id.id if id.is_a? Vertex
113
145
  v = @vertices.delete id.to_s
114
146
  if v
115
- v.out_edges.each do |e|
147
+ v.out_edges.dup.each do |e|
116
148
  remove_edge e
117
149
  end
118
- v.in_edges.each do |e|
150
+ v.in_edges.dup.each do |e|
119
151
  remove_edge e
120
152
  end
121
153
  end
@@ -165,6 +197,31 @@ module RedGrape
165
197
  Graph::Vertex.new
166
198
  end
167
199
 
200
+ def readonly
201
+ dup.readonly!
202
+ end
203
+
204
+ def readonly!
205
+ %w(add_vertex add_edge remove_vertex remove_edge load).each do |name|
206
+ eval "def self.#{name}(*args); raise NoMethodError end"
207
+ end
208
+ def self.readonly?; true end
209
+ self
210
+ end
211
+
212
+ def readonly?
213
+ false
214
+ end
215
+
216
+ def dup
217
+ obj = self.class.new
218
+ obj.instance_variable_set :@serializer, @serializer
219
+ obj.instance_variable_set :@vertices, @vertices.dup
220
+ obj.instance_variable_set :@edges, @edges.dup
221
+ obj.instance_variable_set :@property_descriptions, @property_descriptions.dup
222
+ obj
223
+ end
224
+
168
225
  def to_s
169
226
  "redgrape[vertices:#{@vertices.size} edges:#{@edges.size}]"
170
227
  end
@@ -55,7 +55,14 @@ module RedGrape
55
55
  end if @filename
56
56
  end
57
57
 
58
- uri = DEFAULT_URI if uri.nil? || uri == :default
58
+ uri = case uri
59
+ when NilClass, :default
60
+ DEFAULT_URI
61
+ when Integer
62
+ "druby://localhost:#{uri}"
63
+ else
64
+ uri
65
+ end
59
66
  DRb.start_service uri, self
60
67
  block.call if block
61
68
  sleep
@@ -6,26 +6,21 @@ module RedGrape
6
6
  class PathsPipe < Pipe::Base
7
7
  def pass(obj, context)
8
8
  context.push_history obj do |ctx|
9
- if self.last?
10
- history = ctx.history.dup
11
- if self.opts.empty?
12
- PathGroup.new history
13
- else
14
- ary = []
15
- history.each_with_index do |h, index|
16
- prc = self.opts[index]
17
- if prc
18
- context.it = h
19
- ary << context.eval(&prc)
20
- else
21
- ary << h
22
- end
23
- end
24
- PathGroup.new ary
25
- end
9
+ history = ctx.history.dup
10
+ if self.opts.empty?
11
+ PathGroup.new history
26
12
  else
27
- # TODO
28
- raise 'not implemented'
13
+ ary = []
14
+ history.each_with_index do |h, index|
15
+ prc = self.opts[index]
16
+ if prc
17
+ context.it = h
18
+ ary << context.eval(&prc)
19
+ else
20
+ ary << h
21
+ end
22
+ end
23
+ PathGroup.new ary
29
24
  end
30
25
  end
31
26
  end
@@ -0,0 +1,3 @@
1
+ module RedGrape
2
+ VERSION = "0.0.4"
3
+ end
data/lib/red_grape.rb CHANGED
@@ -1,5 +1,7 @@
1
+ require 'ext/nil_class_ext'
1
2
  require 'ext/object_ext'
2
3
  require 'ext/array_ext'
4
+ require 'red_grape/version'
3
5
  require 'red_grape/pipe/in_pipe'
4
6
  require 'red_grape/pipe/out_pipe'
5
7
  require 'red_grape/pipe/property_pipe'
@@ -23,8 +25,6 @@ require 'red_grape/pipe/cap_pipe'
23
25
  require 'red_grape/graph'
24
26
 
25
27
  module RedGrape
26
- VERSION = '0.0.3'
27
-
28
28
  module_function
29
29
  def set_auto_take(val=true)
30
30
  Pipe.set_auto_take val
data/red_grape.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "red_grape/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "red_grape"
7
+ s.version = RedGrape::VERSION
8
+ s.authors = ["ANDO Yasushi"]
9
+ s.email = ["andyjpn@gmail.com"]
10
+ s.homepage = "https://github.com/technohippy/red-grape"
11
+ s.summary = %q{RedGrape - Extremely Simple GraphDB}
12
+ s.description = %q{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.}
13
+
14
+ s.rubyforge_project = "red_grape"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency "nokogiri"
24
+ end
data/test/test_graph.rb CHANGED
@@ -69,6 +69,12 @@ class GraphTest < Test::Unit::TestCase
69
69
  assert_equal 'lop', graph.edge(5).target.name
70
70
  end
71
71
 
72
+ def test_features
73
+ features = RedGrape::Graph.features
74
+ assert_equal Hash, features.class
75
+ assert features.keys.include?(:ignores_supplied_ids)
76
+ end
77
+
72
78
  def test_add_vertex
73
79
  g = RedGrape::Graph.new
74
80
  g.add_vertex id:1, val:'a'
@@ -107,6 +113,13 @@ class GraphTest < Test::Unit::TestCase
107
113
  g.remove_vertex v2
108
114
  assert !v1.out_edges.map(&:id).include?(e12.id)
109
115
  assert !v3.in_edges.map(&:id).include?(e23.id)
116
+
117
+ g = RedGrape.create_tinker_graph
118
+ assert_equal 6, g.v.size
119
+ assert_equal 6, g.e.size
120
+ g.remove_vertex 1
121
+ assert_equal 5, g.v.size
122
+ assert_equal 3, g.e.size
110
123
  end
111
124
 
112
125
  def test_add_edge
@@ -140,4 +153,29 @@ class GraphTest < Test::Unit::TestCase
140
153
  assert v2.out_edges.map(&:id).include?(e23.id)
141
154
  assert v3.in_edges.map(&:id).include?(e23.id)
142
155
  end
156
+
157
+ def test_readonly
158
+ g1 = RedGrape::Graph.new
159
+
160
+ assert !g1.readonly?
161
+ g1.add_vertex 1
162
+
163
+ g2 = g1.readonly
164
+ assert !g1.readonly?
165
+ assert g2.readonly?
166
+ assert_equal 1, g2.v.size
167
+ assert_raise(NoMethodError) do
168
+ g2.add_vertex 2
169
+ end
170
+ g1.add_vertex 2
171
+ assert_equal 2, g1.v.size
172
+ assert_equal 1, g2.v.size
173
+
174
+ g1.readonly!
175
+ assert g1.readonly?
176
+ assert_raise(NoMethodError) do
177
+ g1.add_vertex 3
178
+ end
179
+ assert_equal 2, g1.v.size
180
+ end
143
181
  end
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.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,30 +9,19 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-06 00:00:00.000000000 Z
12
+ date: 2012-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rdoc
16
- requirement: &70272812464840 !ruby/object:Gem::Requirement
15
+ name: nokogiri
16
+ requirement: &70245490551240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '3.10'
22
- type: :development
21
+ version: '0'
22
+ type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70272812464840
25
- - !ruby/object:Gem::Dependency
26
- name: hoe
27
- requirement: &70272812464400 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ~>
31
- - !ruby/object:Gem::Version
32
- version: '3.0'
33
- type: :development
34
- prerelease: false
35
- version_requirements: *70272812464400
24
+ version_requirements: *70245490551240
36
25
  description: RedGrape is an in-memory graph database written in ruby. I made this
37
26
  in order to learn how graph databases work so that please do not use this for any
38
27
  serious purpose.
@@ -42,22 +31,23 @@ executables:
42
31
  - redgrape
43
32
  - trellis
44
33
  extensions: []
45
- extra_rdoc_files:
46
- - Manifest.txt
47
- - README.txt
48
- - History.txt
34
+ extra_rdoc_files: []
49
35
  files:
50
36
  - .autotest
51
- - Manifest.txt
52
- - Rakefile
53
- - README.txt
37
+ - .gitignore
38
+ - Gemfile
54
39
  - History.txt
40
+ - README.md
41
+ - Rakefile
42
+ - TODO.txt
55
43
  - bin/redgrape
56
44
  - bin/trellis
57
45
  - data/graph-example-1.xml
58
46
  - data/graph-example-2.xml
59
47
  - lib/ext/array_ext.rb
48
+ - lib/ext/nil_class_ext.rb
60
49
  - lib/ext/object_ext.rb
50
+ - lib/red_grape.rb
61
51
  - lib/red_grape/edge.rb
62
52
  - lib/red_grape/element.rb
63
53
  - lib/red_grape/graph.rb
@@ -87,8 +77,9 @@ files:
87
77
  - lib/red_grape/pipe/transform_pipe.rb
88
78
  - lib/red_grape/property_description.rb
89
79
  - lib/red_grape/serializer/graphml_serializer.rb
80
+ - lib/red_grape/version.rb
90
81
  - lib/red_grape/vertex.rb
91
- - lib/red_grape.rb
82
+ - red_grape.gemspec
92
83
  - test/test_element.rb
93
84
  - test/test_graph.rb
94
85
  - test/test_on_the_nature_of_pipes.rb
@@ -96,13 +87,10 @@ files:
96
87
  - test/test_pipe_base.rb
97
88
  - test/test_traversal_patterns.rb
98
89
  - test/test_vertex.rb
99
- - .gemtest
100
90
  homepage: https://github.com/technohippy/red-grape
101
91
  licenses: []
102
92
  post_install_message:
103
- rdoc_options:
104
- - --main
105
- - README.txt
93
+ rdoc_options: []
106
94
  require_paths:
107
95
  - lib
108
96
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -122,7 +110,7 @@ rubyforge_project: red_grape
122
110
  rubygems_version: 1.8.10
123
111
  signing_key:
124
112
  specification_version: 3
125
- summary: RedGrape is an in-memory graph database written in ruby
113
+ summary: RedGrape - Extremely Simple GraphDB
126
114
  test_files:
127
115
  - test/test_element.rb
128
116
  - test/test_graph.rb
data/.gemtest DELETED
File without changes
data/Manifest.txt DELETED
@@ -1,49 +0,0 @@
1
- .autotest
2
- Manifest.txt
3
- Rakefile
4
- README.txt
5
- History.txt
6
- bin/redgrape
7
- bin/trellis
8
- data/graph-example-1.xml
9
- data/graph-example-2.xml
10
- lib/ext/array_ext.rb
11
- lib/ext/object_ext.rb
12
- lib/red_grape/edge.rb
13
- lib/red_grape/element.rb
14
- lib/red_grape/graph.rb
15
- lib/red_grape/graph_store.rb
16
- lib/red_grape/path_group.rb
17
- lib/red_grape/pipe/aggregate_pipe.rb
18
- lib/red_grape/pipe/as_pipe.rb
19
- lib/red_grape/pipe/back_pipe.rb
20
- lib/red_grape/pipe/base.rb
21
- lib/red_grape/pipe/cap_pipe.rb
22
- lib/red_grape/pipe/context.rb
23
- lib/red_grape/pipe/except_pipe.rb
24
- lib/red_grape/pipe/fill_pipe.rb
25
- lib/red_grape/pipe/filter_pipe.rb
26
- lib/red_grape/pipe/group_count_pipe.rb
27
- lib/red_grape/pipe/has_pipe.rb
28
- lib/red_grape/pipe/if_then_else_pipe.rb
29
- lib/red_grape/pipe/in_pipe.rb
30
- lib/red_grape/pipe/in_v_pipe.rb
31
- lib/red_grape/pipe/loop_pipe.rb
32
- lib/red_grape/pipe/out_e_pipe.rb
33
- lib/red_grape/pipe/out_pipe.rb
34
- lib/red_grape/pipe/paths_pipe.rb
35
- lib/red_grape/pipe/property_pipe.rb
36
- lib/red_grape/pipe/retain_pipe.rb
37
- lib/red_grape/pipe/side_effect_pipe.rb
38
- lib/red_grape/pipe/transform_pipe.rb
39
- lib/red_grape/property_description.rb
40
- lib/red_grape/serializer/graphml_serializer.rb
41
- lib/red_grape/vertex.rb
42
- lib/red_grape.rb
43
- test/test_element.rb
44
- test/test_graph.rb
45
- test/test_on_the_nature_of_pipes.rb
46
- test/test_pipe.rb
47
- test/test_pipe_base.rb
48
- test/test_traversal_patterns.rb
49
- test/test_vertex.rb