turbine-graph 0.1.0

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.
@@ -0,0 +1,49 @@
1
+ module Turbine
2
+ module Traversal
3
+ # Traverses the graph breadth-first, following each item to its adjacent
4
+ # items.
5
+ #
6
+ # A
7
+ # / \
8
+ # B C
9
+ # / / \
10
+ # D E F
11
+ # / /
12
+ # G H
13
+ #
14
+ # In the above graph, using a breadth-first algorithm, starting from A,
15
+ # the nodes are traversed in the order B -> C -> D -> E -> F -> G -> H.
16
+ class BreadthFirst < Base
17
+
18
+ #######
19
+ private
20
+ #######
21
+
22
+ # Internal: Given a +node+ iterates through each of it's adjacent nodes
23
+ # using the +method+ and +args+ supplied when initializing the
24
+ # BreadthFirst instance.
25
+ #
26
+ # When the node itself has matching adjacent nodes, those will also be
27
+ # visited. If there are loops within the graph, they will not be
28
+ # followed; each node is visited no more than once.
29
+ #
30
+ # node - The node from which to traverse.
31
+ # block - A block executed for each matching node.
32
+ #
33
+ # Returns nothing.
34
+ def visit(node, &block)
35
+ queue = node.public_send(@method, *@args).to_a.dup
36
+
37
+ while item = queue.shift
38
+ next if @seen[item]
39
+
40
+ @seen[item] = true
41
+ block.call(item)
42
+
43
+ queue.push(*fetch(item).public_send(@method, *@args).to_a)
44
+ end
45
+ end
46
+
47
+ end # BreadthFirst
48
+ end # Traversal
49
+ end # Turbine
@@ -0,0 +1,46 @@
1
+ module Turbine
2
+ module Traversal
3
+ # Traverses the graph depth-first, following each edge from a node to its
4
+ # adjacent nodes, and to *their* adjacent nodes, etc...
5
+ #
6
+ # A
7
+ # / \
8
+ # B C
9
+ # / / \
10
+ # D E F
11
+ # / /
12
+ # G H
13
+ #
14
+ # In the above graph, using a depth-first algorithm, starting from A,
15
+ # the nodes are traversed in the order B -> D -> G -> C -> E -> H -> F.
16
+ class DepthFirst < Base
17
+
18
+ #######
19
+ private
20
+ #######
21
+
22
+ # Internal: Given a +node+ iterates through each of it's adjacent nodes
23
+ # using the +method+ and +args+ supplied when initializing the
24
+ # DepthFirst instance.
25
+ #
26
+ # When the node itself has matching adjacent nodes, those will also be
27
+ # visited. If there are loops within the graph, they will not be
28
+ # followed; each node is visited no more than once.
29
+ #
30
+ # node - The node from which to traverse.
31
+ # block - A block executed for each matching node.
32
+ #
33
+ # Returns nothing.
34
+ def visit(node, &block)
35
+ node.public_send(@method, *@args).each do |adjacent|
36
+ next if @seen[adjacent]
37
+
38
+ @seen[adjacent] = true
39
+ block.call(adjacent)
40
+ visit(fetch(adjacent), &block)
41
+ end
42
+ end
43
+
44
+ end # DepthFirst
45
+ end # Traversal
46
+ end # Turbine
@@ -0,0 +1,4 @@
1
+ module Turbine
2
+ # The current version of the Turbine library.
3
+ VERSION = '0.1.0'
4
+ end
data/turbine.gemspec ADDED
@@ -0,0 +1,84 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.required_rubygems_version = '>= 1.3.6'
6
+
7
+ # The following four lines are automatically updates by the "gemspec"
8
+ # rake task. It it completely safe to edit them, but using the rake task
9
+ # is easier.
10
+ s.name = 'turbine-graph'
11
+ s.version = '0.1.0'
12
+ s.date = '2013-04-10'
13
+ s.rubyforge_project = 'turbine-graph'
14
+
15
+ # You may safely edit the section below.
16
+
17
+ s.platform = Gem::Platform::RUBY
18
+
19
+ s.authors = [ 'Anthony Williams',
20
+ 'Dennis Schoenmakers',
21
+ 'Paolo Zaccagnini',
22
+ 'Sebastian Burkhard' ]
23
+
24
+ s.email = [ 'hi@antw.me',
25
+ 'dennis.schoenmakers@quintel.com',
26
+ 'paolo.zaccagnini@quintel.com',
27
+ 'sebastian.burkhard@quintel.com' ]
28
+
29
+ s.homepage = 'http://github.com/quintel/turbine'
30
+ s.summary = 'An in-memory graph database written in Ruby.'
31
+ s.description = 'An experiment in graph databases, with Ruby...'
32
+
33
+ s.require_path = 'lib'
34
+
35
+ s.add_development_dependency 'rake', '>= 0.9.0'
36
+ s.add_development_dependency 'rspec', '>= 2.11.0'
37
+
38
+ s.rdoc_options = ['--charset=UTF-8']
39
+ s.extra_rdoc_files = %w[LICENSE README.md]
40
+
41
+ # The manifest is created by the "gemspec" rake task. Do not edit it
42
+ # directly; your changes will be wiped out when you next run the task.
43
+
44
+ # = MANIFEST =
45
+ s.files = %w[
46
+ Gemfile
47
+ Guardfile
48
+ LICENSE
49
+ README.md
50
+ Rakefile
51
+ examples/energy.rb
52
+ examples/family.rb
53
+ lib/turbine.rb
54
+ lib/turbine/algorithms/filtered_tarjan.rb
55
+ lib/turbine/algorithms/tarjan.rb
56
+ lib/turbine/edge.rb
57
+ lib/turbine/errors.rb
58
+ lib/turbine/graph.rb
59
+ lib/turbine/node.rb
60
+ lib/turbine/pipeline/README.mdown
61
+ lib/turbine/pipeline/dsl.rb
62
+ lib/turbine/pipeline/expander.rb
63
+ lib/turbine/pipeline/filter.rb
64
+ lib/turbine/pipeline/journal.rb
65
+ lib/turbine/pipeline/journal_filter.rb
66
+ lib/turbine/pipeline/pump.rb
67
+ lib/turbine/pipeline/segment.rb
68
+ lib/turbine/pipeline/sender.rb
69
+ lib/turbine/pipeline/split.rb
70
+ lib/turbine/pipeline/trace.rb
71
+ lib/turbine/pipeline/transform.rb
72
+ lib/turbine/pipeline/traversal.rb
73
+ lib/turbine/pipeline/unique.rb
74
+ lib/turbine/properties.rb
75
+ lib/turbine/traversal/base.rb
76
+ lib/turbine/traversal/breadth_first.rb
77
+ lib/turbine/traversal/depth_first.rb
78
+ lib/turbine/version.rb
79
+ turbine.gemspec
80
+ ]
81
+ # = MANIFEST =
82
+
83
+ s.test_files = s.files.select { |path| path =~ /^spec\/.*\.rb/ }
84
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: turbine-graph
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Anthony Williams
9
+ - Dennis Schoenmakers
10
+ - Paolo Zaccagnini
11
+ - Sebastian Burkhard
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+ date: 2013-04-10 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: rake
19
+ requirement: !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: 0.9.0
25
+ type: :development
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.9.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ requirement: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 2.11.0
41
+ type: :development
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: 2.11.0
49
+ description: An experiment in graph databases, with Ruby...
50
+ email:
51
+ - hi@antw.me
52
+ - dennis.schoenmakers@quintel.com
53
+ - paolo.zaccagnini@quintel.com
54
+ - sebastian.burkhard@quintel.com
55
+ executables: []
56
+ extensions: []
57
+ extra_rdoc_files:
58
+ - LICENSE
59
+ - README.md
60
+ files:
61
+ - Gemfile
62
+ - Guardfile
63
+ - LICENSE
64
+ - README.md
65
+ - Rakefile
66
+ - examples/energy.rb
67
+ - examples/family.rb
68
+ - lib/turbine.rb
69
+ - lib/turbine/algorithms/filtered_tarjan.rb
70
+ - lib/turbine/algorithms/tarjan.rb
71
+ - lib/turbine/edge.rb
72
+ - lib/turbine/errors.rb
73
+ - lib/turbine/graph.rb
74
+ - lib/turbine/node.rb
75
+ - lib/turbine/pipeline/README.mdown
76
+ - lib/turbine/pipeline/dsl.rb
77
+ - lib/turbine/pipeline/expander.rb
78
+ - lib/turbine/pipeline/filter.rb
79
+ - lib/turbine/pipeline/journal.rb
80
+ - lib/turbine/pipeline/journal_filter.rb
81
+ - lib/turbine/pipeline/pump.rb
82
+ - lib/turbine/pipeline/segment.rb
83
+ - lib/turbine/pipeline/sender.rb
84
+ - lib/turbine/pipeline/split.rb
85
+ - lib/turbine/pipeline/trace.rb
86
+ - lib/turbine/pipeline/transform.rb
87
+ - lib/turbine/pipeline/traversal.rb
88
+ - lib/turbine/pipeline/unique.rb
89
+ - lib/turbine/properties.rb
90
+ - lib/turbine/traversal/base.rb
91
+ - lib/turbine/traversal/breadth_first.rb
92
+ - lib/turbine/traversal/depth_first.rb
93
+ - lib/turbine/version.rb
94
+ - turbine.gemspec
95
+ homepage: http://github.com/quintel/turbine
96
+ licenses: []
97
+ post_install_message:
98
+ rdoc_options:
99
+ - --charset=UTF-8
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: 1.3.6
114
+ requirements: []
115
+ rubyforge_project: turbine-graph
116
+ rubygems_version: 1.8.23
117
+ signing_key:
118
+ specification_version: 3
119
+ summary: An in-memory graph database written in Ruby.
120
+ test_files: []