dagnabit 2.2.6 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/History.md +105 -0
  2. data/LICENSE +1 -1
  3. data/MIGRATION.md +56 -0
  4. data/README.md +222 -0
  5. data/bin/dagnabit-test +11 -31
  6. data/db/connection.rb +3 -0
  7. data/{test/connections/native_postgresql → db/connections/postgresql}/connection.rb +6 -5
  8. data/db/models/edge.rb +6 -0
  9. data/db/models/other_edge.rb +6 -0
  10. data/db/models/other_vertex.rb +6 -0
  11. data/db/models/vertex.rb +6 -0
  12. data/db/schema.rb +32 -0
  13. data/lib/dagnabit.rb +6 -19
  14. data/lib/dagnabit/edge.rb +7 -0
  15. data/lib/dagnabit/edge/activation.rb +14 -0
  16. data/lib/dagnabit/edge/associations.rb +10 -0
  17. data/lib/dagnabit/edge/connectivity.rb +38 -0
  18. data/lib/dagnabit/graph.rb +143 -0
  19. data/lib/dagnabit/migration.rb +98 -0
  20. data/lib/dagnabit/version.rb +3 -0
  21. data/lib/dagnabit/vertex.rb +10 -0
  22. data/lib/dagnabit/vertex/activation.rb +19 -0
  23. data/lib/dagnabit/vertex/associations.rb +24 -0
  24. data/lib/dagnabit/vertex/bonding.rb +43 -0
  25. data/lib/dagnabit/vertex/connectivity.rb +130 -0
  26. data/lib/dagnabit/vertex/neighbors.rb +50 -0
  27. data/lib/dagnabit/vertex/settings.rb +56 -0
  28. metadata +94 -143
  29. data/.autotest +0 -5
  30. data/.document +0 -5
  31. data/.gitignore +0 -7
  32. data/Gemfile +0 -15
  33. data/Gemfile.lock +0 -38
  34. data/History.txt +0 -81
  35. data/README.rdoc +0 -202
  36. data/Rakefile +0 -52
  37. data/VERSION.yml +0 -5
  38. data/dagnabit.gemspec +0 -142
  39. data/init.rb +0 -1
  40. data/lib/dagnabit/activation.rb +0 -60
  41. data/lib/dagnabit/link/associations.rb +0 -18
  42. data/lib/dagnabit/link/class_methods.rb +0 -43
  43. data/lib/dagnabit/link/configuration.rb +0 -40
  44. data/lib/dagnabit/link/cycle_prevention.rb +0 -31
  45. data/lib/dagnabit/link/named_scopes.rb +0 -65
  46. data/lib/dagnabit/link/transitive_closure_link_model.rb +0 -86
  47. data/lib/dagnabit/link/transitive_closure_recalculation.rb +0 -17
  48. data/lib/dagnabit/link/transitive_closure_recalculation/on_create.rb +0 -104
  49. data/lib/dagnabit/link/transitive_closure_recalculation/on_destroy.rb +0 -125
  50. data/lib/dagnabit/link/transitive_closure_recalculation/on_update.rb +0 -17
  51. data/lib/dagnabit/link/transitive_closure_recalculation/utilities.rb +0 -56
  52. data/lib/dagnabit/link/validations.rb +0 -26
  53. data/lib/dagnabit/node/associations.rb +0 -84
  54. data/lib/dagnabit/node/class_methods.rb +0 -74
  55. data/lib/dagnabit/node/configuration.rb +0 -26
  56. data/lib/dagnabit/node/neighbors.rb +0 -73
  57. data/test/connections/native_sqlite3/connection.rb +0 -24
  58. data/test/dagnabit/link/test_associations.rb +0 -61
  59. data/test/dagnabit/link/test_class_methods.rb +0 -102
  60. data/test/dagnabit/link/test_configuration.rb +0 -38
  61. data/test/dagnabit/link/test_cycle_prevention.rb +0 -64
  62. data/test/dagnabit/link/test_named_scopes.rb +0 -32
  63. data/test/dagnabit/link/test_transitive_closure_link_model.rb +0 -69
  64. data/test/dagnabit/link/test_transitive_closure_recalculation.rb +0 -178
  65. data/test/dagnabit/link/test_validations.rb +0 -39
  66. data/test/dagnabit/node/test_associations.rb +0 -147
  67. data/test/dagnabit/node/test_class_methods.rb +0 -49
  68. data/test/dagnabit/node/test_configuration.rb +0 -29
  69. data/test/dagnabit/node/test_neighbors.rb +0 -91
  70. data/test/helper.rb +0 -26
  71. data/test/models/beta_node.rb +0 -3
  72. data/test/models/custom_data_link.rb +0 -4
  73. data/test/models/customized_link.rb +0 -7
  74. data/test/models/customized_link_node.rb +0 -4
  75. data/test/models/link.rb +0 -4
  76. data/test/models/node.rb +0 -3
  77. data/test/schema/schema.rb +0 -51
data/.autotest DELETED
@@ -1,5 +0,0 @@
1
- require 'redgreen/autotest'
2
-
3
- Autotest.add_hook(:initialize) do |autotest|
4
- autotest.libs += File::PATH_SEPARATOR + File.join(File.dirname(__FILE__), 'test/connections/native_sqlite3')
5
- end
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,7 +0,0 @@
1
- *.sw?
2
- .DS_Store
3
- coverage
4
- rdoc
5
- pkg
6
- *.log
7
- .bundle
data/Gemfile DELETED
@@ -1,15 +0,0 @@
1
- # A sample Gemfile
2
- source :gemcutter
3
-
4
- gem 'activerecord', '~> 2.3.5'
5
-
6
- group :development do
7
- gem 'jeweler'
8
- gem 'mocha', '0.9.8'
9
- gem 'pg'
10
- gem 'shoulda', '2.10.2'
11
- gem 'sqlite3-ruby'
12
- gem 'redgreen'
13
- gem 'rcov'
14
- gem 'ZenTest'
15
- end
@@ -1,38 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- ZenTest (4.4.0)
5
- activerecord (2.3.9)
6
- activesupport (= 2.3.9)
7
- activesupport (2.3.9)
8
- gemcutter (0.6.1)
9
- git (1.2.5)
10
- jeweler (1.4.0)
11
- gemcutter (>= 0.1.0)
12
- git (>= 1.2.5)
13
- rubyforge (>= 2.0.0)
14
- json_pure (1.4.6)
15
- mocha (0.9.8)
16
- rake
17
- pg (0.9.0)
18
- rake (0.8.7)
19
- rcov (0.9.9)
20
- redgreen (1.2.2)
21
- rubyforge (2.0.4)
22
- json_pure (>= 1.1.7)
23
- shoulda (2.10.2)
24
- sqlite3-ruby (1.3.1)
25
-
26
- PLATFORMS
27
- ruby
28
-
29
- DEPENDENCIES
30
- ZenTest
31
- activerecord (~> 2.3.5)
32
- jeweler
33
- mocha (= 0.9.8)
34
- pg
35
- rcov
36
- redgreen
37
- shoulda (= 2.10.2)
38
- sqlite3-ruby
@@ -1,81 +0,0 @@
1
- == 2.2.6 2010-01-01
2
-
3
- === Bugfixes
4
-
5
- * Fixed version requirements.
6
-
7
- == 2.2.5 2010-10-01
8
-
9
- === Minor changes
10
-
11
- * Ported development code to Bundler 1.0.
12
- * Removed usage of Object#returning, which was deprecated in ActiveSupport
13
- 2.3.9.
14
-
15
- == 2.2.4 2010-03-15
16
-
17
- === Bugfixes
18
-
19
- * Ensure that ActiveRecord is loaded before dagnabit's extensions are loaded.
20
- This fixes a problem that would occasionally occur when using dagnabit in
21
- Bundler.
22
-
23
- == 2.2.3 2010-02-17
24
-
25
- === Bugfixes
26
-
27
- * It was not possible to delete links having custom data attributes in dagnabit
28
- versions <= 2.3.2. This has been fixed.
29
-
30
- == 2.2.2 2010-02-04
31
-
32
- === Minor enhancements
33
-
34
- * Slightly smarter transitive closure maintenance: if a link was saved but
35
- neither its ancestor nor descendant changed, the transitive closure will not
36
- be recalculated.
37
- * Removed usage of deprecated "require 'activesupport'".
38
-
39
- == 2.2.1 2009-12-07
40
-
41
- === Minor enhancements
42
-
43
- * Added NUBIC provenance.
44
- More information on NUBIC: http://www.nucats.northwestern.edu/centers/nubic/index.html
45
-
46
- == 2.2.0 2009-09-14
47
-
48
- === Minor enhancements
49
-
50
- * Commonized models used in dagnabit's tests.
51
- * Switched to named scopes to implement Link#linking and TransitiveClosureLink#linking.
52
-
53
- == 2.1.0 2009-09-04
54
-
55
- === Bugfixes
56
-
57
- * Fixed overzealous on-destroy transitive closure maintenance in situations like these:
58
-
59
- n1 -> n2 -> n3
60
- |__________|
61
-
62
- Previously, deleting the edges (n1, n2) and (n2, n3) would also delete the
63
- edge (n1, n3).
64
-
65
- == 2.0.0 2009-08-17
66
-
67
- === Major changes
68
-
69
- * Link models now validate their ancestor and descendant. This means that
70
- Link#connect will fail if a link cannot be made due to node validation
71
- failures.
72
-
73
- Unfortunately, this also means you can no longer write code like this:
74
-
75
- node1.links_as_parent.build(:descendant => node2)
76
-
77
- or
78
-
79
- node2.links_as_child.build(:ancestor => node1)
80
-
81
- See commit 61d6e3841b63fdcaad7fcecd05b24f4b9f217ba2 for more details.
@@ -1,202 +0,0 @@
1
- = Read this first
2
-
3
- dagnabit is shutting down. Errors will be fixed, but no new features will be
4
- added.
5
-
6
- If you need fast reachability queries in a Ruby application that uses an SQL
7
- database, consider using a database that supports recursive common table
8
- expressions (e.g. PostgreSQL) and Sequel, which has a Ruby interface for
9
- constructing recursive CTEs.
10
-
11
- = dagnabit
12
-
13
- dagnabit is (yet another) ActiveRecord plugin for directed acyclic graphs. It
14
- provides an underlying representation that facilitates fast reachability
15
- queries at the expense of edge insertion/deletion speed and execution time.
16
-
17
- The data structure used by dagnabit is the structure described in:
18
-
19
- DONG, G., LIBKIN, L., SU, J., and WONG, L. "Maintaining the
20
- transitive closure of graphs in SQL." In Int. J. Information Technology, vol.
21
- 5, 1999.
22
-
23
- dagnabit was developed for a Ruby on Rails application designed for management
24
- and querying of large-and-rapidly-growing biospecimen banks (i.e. for cancer
25
- research). The application uses directed acyclic graphs for knowledge
26
- representation (storage and application of workflows) and representing
27
- biospecimen heritage.
28
-
29
- dagnabit was developed at the Northwestern University Biomedical Informatics
30
- Center <http://www.nucats.northwestern.edu/centers/nubic/index.html>.
31
-
32
- dagnabit is hosted at Gitorious and Github:
33
-
34
- http://gitorious.org/dagnabit/dagnabit
35
- http://github.com/yipdw/dagnabit
36
-
37
- The Gitorious repository is always updated before the Github repository, and
38
- should be considered canonical.
39
-
40
- == Related work
41
-
42
- This plugin was inspired by Matthew Leventi's acts-as-dag plugin
43
- <http://github.com/mleventi/acts-as-dag/tree/master>. Indeed, Leventi's
44
- acts-as-dag plugin was originally used in the application from which this
45
- plugin was extracted, and dagnabit's node and edge interfaces were modeled
46
- after the interfaces provided by acts-as-dag.
47
-
48
- The primary differences between dagnabit and acts-as-dag are:
49
-
50
- * acts-as-dag does not permit linking of unpersisted nodes, i.e.
51
-
52
- n1 = Node.new
53
- n2 = Node.new
54
- e1 = Link.new(:ancestor => n1, :descendant => n2)
55
- ... other code ...
56
-
57
- [n1, n2, e1].map { |o| o.save }
58
-
59
- With acts-as-dag, one must save the nodes _before_ creating the edge.
60
- The above code segment works in dagnabit.
61
-
62
- * acts-as-dag issues O(x*y) queries on edge insert, update, and delete, where x
63
- and y are the number of ancestors and descendants of a node. In environments
64
- where network latency between database and application server is considerable,
65
- this can adversely affect application performance.
66
-
67
- dagnabit uses a constant number of queries for insert, update, and delete.
68
- (The execution time and memory usage of queries are, of course, still
69
- affected by the size of the transitive closure set being updated.)
70
-
71
- == Database compatibility
72
-
73
- dagnabit is only known to work with SQLite and PostgreSQL. Other databases may
74
- work, but they have not been tested.
75
-
76
- dagnabit is known to _not_ work on Oracle XE 10g databases via the ActiveRecord
77
- oracle-enhanced adapter.
78
-
79
- == Setup
80
-
81
- dagnabit is distributed as a gem plugin; you can therefore install it as you
82
- would any other RubyGem. Integration with your Rails application can be
83
- achieved by adding dagnabit to your application's gem dependencies list.
84
-
85
- Details for creating the link tables are discussed below.
86
-
87
- In your link model, put
88
-
89
- acts_as_dag_link
90
-
91
- In your node models, put
92
-
93
- acts_as_dag_node_linked_by (your link model name)
94
-
95
- +acts_as_dag_link+ accepts some configuration options. These configuration
96
- options are discussed below.
97
-
98
- For a code example of a complete setup, see the <tt>dagnabit-test</tt> script
99
- in +bin+.
100
-
101
- === Link table schemas
102
-
103
- Link storage is accomplished with two tables having identical schemas. One
104
- table holds explicitly specified links between nodes. The other table contains
105
- the _transitive closure_ of all graphs, i.e. one tuple per path in the graph.
106
- (The transitive closure table is therefore a superset of the direct link
107
- table.)
108
-
109
- The transitive closure table is automatically maintained by dagnabit and should
110
- not be manually modified. The transitive closure table does not need to be
111
- mapped to a model in your application.
112
-
113
- The expected schema for both tables is:
114
-
115
- t.integer :ancestor_id # or configured foreign key ID
116
- t.integer :descendant_id # or configured foreign key ID
117
- t.string :ancestor_type # not configurable
118
- t.string :descendant_type # not configurable
119
-
120
- The behavior of the plugin with a deviant schema is unspecified.
121
-
122
- === Configuration options for +acts_as_dag_link+
123
-
124
- * +transitive_closure_table_name+: The table where tuples in the transitive
125
- closure of the graph should be stored. Defaults to
126
- <tt>#{link_table_name}_transitive_closure_tuples</tt>.
127
- * +transitive_closure_class_name+: The transitive closure is represented with
128
- an ActiveRecord class whose name defaults to +TransitiveClosureLink+. Set this
129
- option to change that name.
130
- * +descendant_id_column+: Column in the link tables for recording the ID of a
131
- descendant. Defaults to +descendant_id+.
132
- * +ancestor_id_column+: Column in the link tables for recording the ID of a
133
- ancestor. Defaults to +ancestor_id+.
134
-
135
- == Usage
136
-
137
- The recommended usage pattern is (in pseudocode)
138
-
139
- nodes = make_nodes
140
- links = connect_up(nodes)
141
- save(nodes)
142
- save(links)
143
-
144
- Node and edge creation is identical to creation of any ActiveRecord model. For
145
- example, if your Node models were called +AlphaNode+ and +BetaNode+ and your
146
- edge model was called +Link+, these would be valid expressions:
147
-
148
- n1 = AlphaNode.new
149
- n2 = BetaNode.new
150
-
151
- e1 = Link.new(:ancestor => n1, :descendant => n2)
152
- n1.save
153
- n2.save
154
- e1.save
155
-
156
- === Node interface
157
-
158
- +acts_as_dag_node+ adds the following associations to nodes:
159
-
160
- * +links_as_child+: Links for which the node is a child.
161
- * +links_as_parent+: Links for which the node is a parent.
162
- * +links_as_ancestor+: Links for which the node is an ancestor. Read-only.
163
- * +links_as_descendant+: Links for which the node is a descendant. Read-only.
164
-
165
- +acts_as_dag_node+ adds the following instance methods to nodes:
166
-
167
- * +children+: All children of the node. Read-only.
168
- * +parents+: All parents of the node. Read-only.
169
- * +ancestors+: All ancestors of the node. Read-only.
170
- * +descendants+: All descendants of the node. Read-only.
171
-
172
- === Link interface
173
-
174
- The following class methods are available on links:
175
-
176
- * +paths+: Retrieves all paths from one node to another.
177
- * <tt>path?</tt>: Returns whether a node is reachable from another node.
178
- * +build_edge+: Builds an edge from one node to another node.
179
- * +connect+: Builds and saves an edge from one node to another. Identical to
180
- <tt>build_edge(nodeA, nodeB).save</tt>.
181
-
182
- == Introduction to the codebase
183
-
184
- Here are some starting points to become acquainted with the dagnabit codebase:
185
-
186
- [Dagnabit::Activation]
187
- How to mix this functionality into your models.
188
- [Dagnabit::Link::Configuration]
189
- Link configuration options.
190
- [Dagnabit::Link::Associations]
191
- Associations exposed on links.
192
- [Dagnabit::Node::Associations]
193
- Associations exposed on nodes.
194
- [Dagnabit::Node::Neighbors]
195
- How to locate a node's neighbors.
196
- [Dagnabit::Link::TransitiveClosureRecalculation]
197
- How the transitive closure is maintained.
198
-
199
- == Copyright
200
-
201
- Copyright (c) 2009 David Yip. Released under the MIT License; see LICENSE for
202
- details.
data/Rakefile DELETED
@@ -1,52 +0,0 @@
1
- require 'rake'
2
- require 'yaml'
3
- require 'bundler'
4
- Bundler.setup
5
-
6
- require 'jeweler'
7
-
8
- Jeweler::Tasks.new do |gem|
9
- gem.name = 'dagnabit'
10
- gem.summary = %Q{Directed acyclic graph plugin for ActiveRecord}
11
- gem.email = 'yipdw@northwestern.edu'
12
- gem.homepage = 'http://gitorious.org/dagnabit/dagnabit'
13
- gem.authors = ['David Yip']
14
-
15
- gem.add_bundler_dependencies
16
- end
17
-
18
- task :test => [:test_sqlite3, :test_postgresql]
19
-
20
- require 'rake/testtask'
21
- ['sqlite3', 'postgresql'].map { |adapter| ["test_#{adapter}", "native_#{adapter}"] }.each do |task_name, adapter_name|
22
- Rake::TestTask.new(task_name) do |test|
23
- test.libs << 'lib' << 'test' << "test/connections/#{adapter_name}"
24
- test.pattern = 'test/dagnabit/**/test_*.rb'
25
- test.verbose = false
26
- end
27
- end
28
-
29
- require 'rcov/rcovtask'
30
- Rcov::RcovTask.new do |test|
31
- test.libs << 'test' << 'test/connections/native_sqlite3'
32
- test.pattern = 'test/dagnabit/**/test_*.rb'
33
- test.verbose = true
34
- test.rcov_opts << '--exclude gems/*,.bundle/environment.rb'
35
- end
36
-
37
- task :default => :test
38
-
39
- require 'rake/rdoctask'
40
- Rake::RDocTask.new do |rdoc|
41
- if File.exist?('VERSION.yml')
42
- config = YAML.load(File.read('VERSION.yml'))
43
- version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
44
- else
45
- version = ""
46
- end
47
-
48
- rdoc.rdoc_dir = 'rdoc'
49
- rdoc.title = "dagnabit #{version}"
50
- rdoc.rdoc_files.include('README*')
51
- rdoc.rdoc_files.include('lib/**/*.rb')
52
- end
@@ -1,5 +0,0 @@
1
- ---
2
- :major: 2
3
- :minor: 2
4
- :build:
5
- :patch: 6
@@ -1,142 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{dagnabit}
8
- s.version = "2.2.6"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["David Yip"]
12
- s.date = %q{2010-10-01}
13
- s.default_executable = %q{dagnabit-test}
14
- s.email = %q{yipdw@northwestern.edu}
15
- s.executables = ["dagnabit-test"]
16
- s.extra_rdoc_files = [
17
- "LICENSE",
18
- "README.rdoc"
19
- ]
20
- s.files = [
21
- ".autotest",
22
- ".document",
23
- ".gitignore",
24
- "Gemfile",
25
- "Gemfile.lock",
26
- "History.txt",
27
- "LICENSE",
28
- "README.rdoc",
29
- "Rakefile",
30
- "VERSION.yml",
31
- "bin/dagnabit-test",
32
- "dagnabit.gemspec",
33
- "init.rb",
34
- "lib/dagnabit.rb",
35
- "lib/dagnabit/activation.rb",
36
- "lib/dagnabit/link/associations.rb",
37
- "lib/dagnabit/link/class_methods.rb",
38
- "lib/dagnabit/link/configuration.rb",
39
- "lib/dagnabit/link/cycle_prevention.rb",
40
- "lib/dagnabit/link/named_scopes.rb",
41
- "lib/dagnabit/link/transitive_closure_link_model.rb",
42
- "lib/dagnabit/link/transitive_closure_recalculation.rb",
43
- "lib/dagnabit/link/transitive_closure_recalculation/on_create.rb",
44
- "lib/dagnabit/link/transitive_closure_recalculation/on_destroy.rb",
45
- "lib/dagnabit/link/transitive_closure_recalculation/on_update.rb",
46
- "lib/dagnabit/link/transitive_closure_recalculation/utilities.rb",
47
- "lib/dagnabit/link/validations.rb",
48
- "lib/dagnabit/node/associations.rb",
49
- "lib/dagnabit/node/class_methods.rb",
50
- "lib/dagnabit/node/configuration.rb",
51
- "lib/dagnabit/node/neighbors.rb",
52
- "test/connections/native_postgresql/connection.rb",
53
- "test/connections/native_sqlite3/connection.rb",
54
- "test/dagnabit/link/test_associations.rb",
55
- "test/dagnabit/link/test_class_methods.rb",
56
- "test/dagnabit/link/test_configuration.rb",
57
- "test/dagnabit/link/test_cycle_prevention.rb",
58
- "test/dagnabit/link/test_named_scopes.rb",
59
- "test/dagnabit/link/test_transitive_closure_link_model.rb",
60
- "test/dagnabit/link/test_transitive_closure_recalculation.rb",
61
- "test/dagnabit/link/test_validations.rb",
62
- "test/dagnabit/node/test_associations.rb",
63
- "test/dagnabit/node/test_class_methods.rb",
64
- "test/dagnabit/node/test_configuration.rb",
65
- "test/dagnabit/node/test_neighbors.rb",
66
- "test/helper.rb",
67
- "test/models/beta_node.rb",
68
- "test/models/custom_data_link.rb",
69
- "test/models/customized_link.rb",
70
- "test/models/customized_link_node.rb",
71
- "test/models/link.rb",
72
- "test/models/node.rb",
73
- "test/schema/schema.rb"
74
- ]
75
- s.homepage = %q{http://gitorious.org/dagnabit/dagnabit}
76
- s.rdoc_options = ["--charset=UTF-8"]
77
- s.require_paths = ["lib"]
78
- s.rubygems_version = %q{1.3.7}
79
- s.summary = %q{Directed acyclic graph plugin for ActiveRecord}
80
- s.test_files = [
81
- "test/connections/native_postgresql/connection.rb",
82
- "test/connections/native_sqlite3/connection.rb",
83
- "test/dagnabit/link/test_associations.rb",
84
- "test/dagnabit/link/test_class_methods.rb",
85
- "test/dagnabit/link/test_configuration.rb",
86
- "test/dagnabit/link/test_cycle_prevention.rb",
87
- "test/dagnabit/link/test_named_scopes.rb",
88
- "test/dagnabit/link/test_transitive_closure_link_model.rb",
89
- "test/dagnabit/link/test_transitive_closure_recalculation.rb",
90
- "test/dagnabit/link/test_validations.rb",
91
- "test/dagnabit/node/test_associations.rb",
92
- "test/dagnabit/node/test_class_methods.rb",
93
- "test/dagnabit/node/test_configuration.rb",
94
- "test/dagnabit/node/test_neighbors.rb",
95
- "test/helper.rb",
96
- "test/models/beta_node.rb",
97
- "test/models/custom_data_link.rb",
98
- "test/models/customized_link.rb",
99
- "test/models/customized_link_node.rb",
100
- "test/models/link.rb",
101
- "test/models/node.rb",
102
- "test/schema/schema.rb"
103
- ]
104
-
105
- if s.respond_to? :specification_version then
106
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
107
- s.specification_version = 3
108
-
109
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
110
- s.add_runtime_dependency(%q<activerecord>, ["~> 2.3.5"])
111
- s.add_development_dependency(%q<jeweler>, [">= 0"])
112
- s.add_development_dependency(%q<mocha>, ["= 0.9.8"])
113
- s.add_development_dependency(%q<pg>, [">= 0"])
114
- s.add_development_dependency(%q<shoulda>, ["= 2.10.2"])
115
- s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
116
- s.add_development_dependency(%q<redgreen>, [">= 0"])
117
- s.add_development_dependency(%q<rcov>, [">= 0"])
118
- s.add_development_dependency(%q<ZenTest>, [">= 0"])
119
- else
120
- s.add_dependency(%q<activerecord>, ["~> 2.3.5"])
121
- s.add_dependency(%q<jeweler>, [">= 0"])
122
- s.add_dependency(%q<mocha>, ["= 0.9.8"])
123
- s.add_dependency(%q<pg>, [">= 0"])
124
- s.add_dependency(%q<shoulda>, ["= 2.10.2"])
125
- s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
126
- s.add_dependency(%q<redgreen>, [">= 0"])
127
- s.add_dependency(%q<rcov>, [">= 0"])
128
- s.add_dependency(%q<ZenTest>, [">= 0"])
129
- end
130
- else
131
- s.add_dependency(%q<activerecord>, ["~> 2.3.5"])
132
- s.add_dependency(%q<jeweler>, [">= 0"])
133
- s.add_dependency(%q<mocha>, ["= 0.9.8"])
134
- s.add_dependency(%q<pg>, [">= 0"])
135
- s.add_dependency(%q<shoulda>, ["= 2.10.2"])
136
- s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
137
- s.add_dependency(%q<redgreen>, [">= 0"])
138
- s.add_dependency(%q<rcov>, [">= 0"])
139
- s.add_dependency(%q<ZenTest>, [">= 0"])
140
- end
141
- end
142
-