dagnabit 3.0.0 → 3.0.1

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/History.md CHANGED
@@ -1,3 +1,14 @@
1
+ 3.0.1 (2011-04-30)
2
+ ==================
3
+
4
+ Minor changes
5
+ -------------
6
+
7
+ * Declare compatibility with ActiveRecord 3.
8
+ * Eagerly load parent and child associations for edges loaded by
9
+ `Dagnabit::Graph#load_descendants!`.
10
+ * Loosened up RSpec dependency.
11
+
1
12
  3.0.0 2011-01-10
2
13
  ================
3
14
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009, 2010 David Yip
1
+ Copyright (c) 2009, 2010, 2011 David Yip
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -61,7 +61,9 @@ The primary differences between dagnabit and acts-as-dag are:
61
61
  Database compatibility
62
62
  ======================
63
63
 
64
- PostgreSQL. That's all I know that'll work with dagnabit, anyway.
64
+ PostgreSQL 8.4. That's all I know that'll work with dagnabit, anyway.
65
+ Versions of PostgreSQL less than 8.4 will not work because they do not
66
+ implement `WITH RECURSIVE`.
65
67
 
66
68
  It's possible other SQL databases will work, but I have no tests to demonstrate
67
69
  that situation.
@@ -142,16 +144,16 @@ dagnabit's cycle-checking trigger
142
144
  ---------------------------------
143
145
 
144
146
  dagnabit ships with a PL/pgSQL trigger that can be installed on edge tables.
145
- The trigger algorithm is run per inserted or updated row, and may be described
146
- as
147
+ The trigger algorithm is run per inserted or updated row, and is implemented
148
+ with a depth-first search:
147
149
 
148
150
  trigger check_cycle(seen = [], edge = (a, b)):
149
- if a != b
151
+ if b is not in seen
150
152
  if b has no children
151
153
  ok
152
154
  else
153
155
  for each child c of b
154
- check_cycle(seen + [b], (a, c))
156
+ check_cycle(seen + [b], (b, c))
155
157
  end
156
158
  else
157
159
  abort
@@ -218,5 +220,5 @@ listing of the `dagnabit-test` program.
218
220
  Copyright
219
221
  =========
220
222
 
221
- Copyright (c) 2009, 2010 David Yip. Released under the MIT License; see
223
+ Copyright (c) 2009, 2010, 2011 David Yip. Released under the MIT License; see
222
224
  LICENSE for details.
@@ -30,9 +30,7 @@ module Dagnabit::Edge
30
30
  def connecting(*vertices)
31
31
  ids = vertices.map(&:id)
32
32
 
33
- find_by_sql([%Q{
34
- SELECT * FROM #{table_name} WHERE parent_id IN (:ids) AND child_id IN (:ids)
35
- }, { :ids => ids }])
33
+ scoped(:conditions => { :parent_id => ids, :child_id => ids })
36
34
  end
37
35
  end
38
36
  end
@@ -85,18 +85,23 @@ module Dagnabit
85
85
  # {#vertex_model} and {#edge_model} must be set before calling this method.
86
86
  # If either are not set, this method raises `RuntimeError`.
87
87
  #
88
- # Once vertices are loaded, load_descendants! loads all edges that connect
89
- # vertices in the working vertex set.
90
- #
91
- # Vertices and edges that were present before a load_descendants! call will
88
+ # Vertices and edges that were present before a `load_descendants!` call will
92
89
  # remain in {#vertices} and {#edges}, respectively.
93
90
  #
91
+ #
92
+ # Edge load behavior
93
+ # ==================
94
+ #
95
+ # Once vertices have been loaded, `load_descendants!` loads all edges that
96
+ # connect vertices in the working vertex set. It also eagerly loads
97
+ # `parent` and `child` associations on edges.
98
+ #
94
99
  # @raise [RuntimeError] if {#vertex_model} or {#edge_model} are unset
95
100
  def load_descendants!
96
101
  raise 'vertex_model and edge_model must be set' unless vertex_model && edge_model
97
102
 
98
103
  self.vertices += vertex_model.descendants_of(*vertices)
99
- self.edges += edge_model.connecting(*vertices)
104
+ self.edges += edge_model.connecting(*vertices).scoped(:include => [:parent, :child])
100
105
  end
101
106
 
102
107
  ##
@@ -1,3 +1,3 @@
1
1
  module Dagnabit
2
- VERSION = '3.0.0'
2
+ VERSION = '3.0.1'
3
3
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dagnabit
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
6
- segments:
7
- - 3
8
- - 0
9
- - 0
10
- version: 3.0.0
4
+ prerelease:
5
+ version: 3.0.1
11
6
  platform: ruby
12
7
  authors:
13
8
  - David Yip
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-01-10 00:00:00 -06:00
13
+ date: 2011-04-30 00:00:00 -05:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -24,13 +19,8 @@ dependencies:
24
19
  requirement: &id001 !ruby/object:Gem::Requirement
25
20
  none: false
26
21
  requirements:
27
- - - ~>
22
+ - - ">="
28
23
  - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 2
32
- - 3
33
- - 0
34
24
  version: 2.3.0
35
25
  type: :runtime
36
26
  version_requirements: *id001
@@ -42,9 +32,6 @@ dependencies:
42
32
  requirements:
43
33
  - - ">="
44
34
  - !ruby/object:Gem::Version
45
- hash: 3
46
- segments:
47
- - 0
48
35
  version: "0"
49
36
  type: :development
50
37
  version_requirements: *id002
@@ -56,9 +43,6 @@ dependencies:
56
43
  requirements:
57
44
  - - ">="
58
45
  - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
46
  version: "0"
63
47
  type: :development
64
48
  version_requirements: *id003
@@ -70,9 +54,6 @@ dependencies:
70
54
  requirements:
71
55
  - - ">="
72
56
  - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
57
  version: "0"
77
58
  type: :development
78
59
  version_requirements: *id004
@@ -84,70 +65,42 @@ dependencies:
84
65
  requirements:
85
66
  - - ">="
86
67
  - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
68
  version: "0"
91
69
  type: :development
92
70
  version_requirements: *id005
93
- - !ruby/object:Gem::Dependency
94
- name: rcov
95
- prerelease: false
96
- requirement: &id006 !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
105
- type: :development
106
- version_requirements: *id006
107
71
  - !ruby/object:Gem::Dependency
108
72
  name: rspec
109
73
  prerelease: false
110
- requirement: &id007 !ruby/object:Gem::Requirement
74
+ requirement: &id006 !ruby/object:Gem::Requirement
111
75
  none: false
112
76
  requirements:
113
77
  - - ~>
114
78
  - !ruby/object:Gem::Version
115
- hash: 15
116
- segments:
117
- - 2
118
- - 0
119
- - 0
120
- version: 2.0.0
79
+ version: "2.0"
121
80
  type: :development
122
- version_requirements: *id007
81
+ version_requirements: *id006
123
82
  - !ruby/object:Gem::Dependency
124
83
  name: pg
125
84
  prerelease: false
126
- requirement: &id008 !ruby/object:Gem::Requirement
85
+ requirement: &id007 !ruby/object:Gem::Requirement
127
86
  none: false
128
87
  requirements:
129
88
  - - ">="
130
89
  - !ruby/object:Gem::Version
131
- hash: 3
132
- segments:
133
- - 0
134
90
  version: "0"
135
91
  type: :development
136
- version_requirements: *id008
92
+ version_requirements: *id007
137
93
  - !ruby/object:Gem::Dependency
138
94
  name: yard
139
95
  prerelease: false
140
- requirement: &id009 !ruby/object:Gem::Requirement
96
+ requirement: &id008 !ruby/object:Gem::Requirement
141
97
  none: false
142
98
  requirements:
143
99
  - - ">="
144
100
  - !ruby/object:Gem::Version
145
- hash: 3
146
- segments:
147
- - 0
148
101
  version: "0"
149
102
  type: :development
150
- version_requirements: *id009
103
+ version_requirements: *id008
151
104
  description: Directed acyclic graph support library for applications using ActiveRecord on top of PostgreSQL.
152
105
  email:
153
106
  - yipdw@member.fsf.org
@@ -199,23 +152,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
199
152
  requirements:
200
153
  - - ">="
201
154
  - !ruby/object:Gem::Version
202
- hash: 3
203
- segments:
204
- - 0
205
155
  version: "0"
206
156
  required_rubygems_version: !ruby/object:Gem::Requirement
207
157
  none: false
208
158
  requirements:
209
159
  - - ">="
210
160
  - !ruby/object:Gem::Version
211
- hash: 3
212
- segments:
213
- - 0
214
161
  version: "0"
215
162
  requirements: []
216
163
 
217
164
  rubyforge_project:
218
- rubygems_version: 1.3.7
165
+ rubygems_version: 1.5.3
219
166
  signing_key:
220
167
  specification_version: 3
221
168
  summary: Directed acyclic graph plugin for ActiveRecord/PostgreSQL