dagnabit 2.2.6 → 3.0.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.
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
-