acts-as-dag 3.0.0 → 4.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.
- checksums.yaml +7 -0
- data/Gemfile +1 -1
- data/README.rdoc +2 -0
- data/acts-as-dag.gemspec +2 -3
- data/lib/acts-as-dag/version.rb +1 -1
- data/lib/dag/dag.rb +12 -13
- data/lib/dag/edges.rb +2 -2
- data/test/dag_test.rb +2 -2
- metadata +26 -48
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f9877ef3e8a02c7abe9783aecd4baecc299eedd2
|
4
|
+
data.tar.gz: ab13f7dcf3c411dda2f238edf2d6d52307a3547b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2a213bdbf6c023a145623e4c0839dad678c3540a48a06cda7b0fac15630c27a7320f154fe4b0f2f67d14534e156c0716761f44ad6de1e5030762627000222c63
|
7
|
+
data.tar.gz: a00bb1e52e0a2e12e5c14605aa9a945a788cb3e2fdf97e1e6924ca23909d3a8c9c9b961eb068048ae759d3172719ac2c9522076a6409a0643b5d2dbb17894a4f
|
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -12,6 +12,8 @@ Version 2.0.x tested using Rails 3.0.0 and Ruby 1.9.2-p0, without major structur
|
|
12
12
|
|
13
13
|
Version 2.5.3 is based on Rails 3.0.0 and uses all of the new ActiveModel/ActiveRecord goodness found there.
|
14
14
|
|
15
|
+
Version 3.0.0 is based on Rails 3.2.12 and tested against Ruby 1.9.3-p385. 3.0.0 fixes issues with the ActiveRecord method connected? being overwritten by acts-as-dag. Thanks to Ryan Glover (@ersatzryan) for the patch.
|
16
|
+
|
15
17
|
=== What's a DAG?
|
16
18
|
|
17
19
|
http://en.wikipedia.org/wiki/Directed_acyclic_graph
|
data/acts-as-dag.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["resgraph@cox.net"]
|
10
10
|
s.homepage = 'https://github.com/resgraph/acts-as-dag'
|
11
11
|
s.summary = %q{Directed Acyclic Graph hierarchy for Rail's ActiveRecord}
|
12
|
-
s.description = %q{Directed Acyclic Graph hierarchy for Rail's ActiveRecord}
|
12
|
+
s.description = %q{Directed Acyclic Graph hierarchy for Rail's ActiveRecord, supporting Rails 4.x}
|
13
13
|
|
14
14
|
s.rubyforge_project = "acts-as-dag"
|
15
15
|
|
@@ -19,9 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
# As specified in test/dag_test.rb
|
22
|
-
s.add_development_dependency 'activerecord', '~> 3.2.12'
|
23
22
|
s.add_development_dependency 'rake'
|
24
23
|
s.add_development_dependency 'sqlite3'
|
25
24
|
s.add_runtime_dependency 'activemodel'
|
26
|
-
s.add_runtime_dependency 'activerecord'
|
25
|
+
s.add_runtime_dependency 'activerecord', '~> 4.0', '>= 4.0.0'
|
27
26
|
end
|
data/lib/acts-as-dag/version.rb
CHANGED
data/lib/dag/dag.rb
CHANGED
@@ -93,12 +93,11 @@ module Dag
|
|
93
93
|
include Standard
|
94
94
|
end
|
95
95
|
|
96
|
-
|
97
|
-
scope :
|
98
|
-
scope :indirect, :conditions => {:direct => false}
|
96
|
+
scope :direct, lambda { where(:direct => true) }
|
97
|
+
scope :indirect, lambda { where(:direct => false) }
|
99
98
|
|
100
|
-
scope :ancestor_nodes,
|
101
|
-
scope :descendant_nodes,
|
99
|
+
scope :ancestor_nodes, lambda { joins(:ancestor) }
|
100
|
+
scope :descendant_nodes, lambda { joins(:descendant) }
|
102
101
|
|
103
102
|
validates ancestor_id_column_name.to_sym, :presence => true,
|
104
103
|
:numericality => true
|
@@ -163,8 +162,8 @@ module Dag
|
|
163
162
|
has_many :#{prefix}links_as_ancestor, :as => :ancestor, :class_name => '#{dag_link_class_name}'
|
164
163
|
has_many :#{prefix}links_as_descendant, :as => :descendant, :class_name => '#{dag_link_class_name}'
|
165
164
|
|
166
|
-
has_many :#{prefix}links_as_parent, :as => :ancestor, :class_name => '#{dag_link_class_name}'
|
167
|
-
has_many :#{prefix}links_as_child, :as => :descendant, :class_name => '#{dag_link_class_name}'
|
165
|
+
has_many :#{prefix}links_as_parent, lambda { where('#{dag_link_class.direct_column_name}' => true) }, :as => :ancestor, :class_name => '#{dag_link_class_name}'
|
166
|
+
has_many :#{prefix}links_as_child, lambda { where('#{dag_link_class.direct_column_name}' => true) }, :as => :descendant, :class_name => '#{dag_link_class_name}'
|
168
167
|
|
169
168
|
EOL
|
170
169
|
|
@@ -173,9 +172,9 @@ module Dag
|
|
173
172
|
conf[:ancestor_class_names].each do |class_name|
|
174
173
|
table_name = class_name.tableize
|
175
174
|
self.class_eval <<-EOL2
|
176
|
-
has_many :#{prefix}links_as_descendant_for_#{table_name},
|
175
|
+
has_many :#{prefix}links_as_descendant_for_#{table_name}, lambda { where('#{dag_link_class.ancestor_type_column_name}' => '#{class_name}') }, :as => :descendant, :class_name => '#{dag_link_class_name}'
|
177
176
|
has_many :#{prefix}ancestor_#{table_name}, :through => :#{prefix}links_as_descendant_for_#{table_name}, :source => :ancestor, :source_type => '#{class_name}'
|
178
|
-
has_many :#{prefix}links_as_child_for_#{table_name},
|
177
|
+
has_many :#{prefix}links_as_child_for_#{table_name}, lambda { where('#{dag_link_class.ancestor_type_column_name}' => '#{class_name}','#{dag_link_class.direct_column_name}' => true) }, :as => :descendant, :class_name => '#{dag_link_class_name}'
|
179
178
|
has_many :#{prefix}parent_#{table_name}, :through => :#{prefix}links_as_child_for_#{table_name}, :source => :ancestor, :source_type => '#{class_name}'
|
180
179
|
|
181
180
|
def #{prefix}root_for_#{table_name}?
|
@@ -223,10 +222,10 @@ module Dag
|
|
223
222
|
conf[:descendant_class_names].each do |class_name|
|
224
223
|
table_name = class_name.tableize
|
225
224
|
self.class_eval <<-EOL3
|
226
|
-
has_many :#{prefix}links_as_ancestor_for_#{table_name},
|
225
|
+
has_many :#{prefix}links_as_ancestor_for_#{table_name}, lambda { where('#{dag_link_class.descendant_type_column_name}' => '#{class_name}') }, :as => :ancestor, :class_name => '#{dag_link_class_name}'
|
227
226
|
has_many :#{prefix}descendant_#{table_name}, :through => :#{prefix}links_as_ancestor_for_#{table_name}, :source => :descendant, :source_type => '#{class_name}'
|
228
227
|
|
229
|
-
has_many :#{prefix}links_as_parent_for_#{table_name},
|
228
|
+
has_many :#{prefix}links_as_parent_for_#{table_name}, lambda { where('#{dag_link_class.descendant_type_column_name}' => '#{class_name}','#{dag_link_class.direct_column_name}' => true) }, :as => :ancestor, :class_name => '#{dag_link_class_name}'
|
230
229
|
has_many :#{prefix}child_#{table_name}, :through => :#{prefix}links_as_parent_for_#{table_name}, :source => :descendant, :source_type => '#{class_name}'
|
231
230
|
|
232
231
|
def #{prefix}leaf_for_#{table_name}?
|
@@ -275,8 +274,8 @@ module Dag
|
|
275
274
|
has_many :#{prefix}ancestors, :through => :#{prefix}links_as_descendant, :source => :ancestor
|
276
275
|
has_many :#{prefix}descendants, :through => :#{prefix}links_as_ancestor, :source => :descendant
|
277
276
|
|
278
|
-
has_many :#{prefix}links_as_parent,
|
279
|
-
has_many :#{prefix}links_as_child,
|
277
|
+
has_many :#{prefix}links_as_parent, lambda { where('#{dag_link_class.direct_column_name}' => true) }, :foreign_key => '#{dag_link_class.ancestor_id_column_name}', :class_name => '#{dag_link_class_name}'
|
278
|
+
has_many :#{prefix}links_as_child, lambda { where('#{dag_link_class.direct_column_name}' => true) }, :foreign_key => '#{dag_link_class.descendant_id_column_name}', :class_name => '#{dag_link_class_name}'
|
280
279
|
|
281
280
|
has_many :#{prefix}parents, :through => :#{prefix}links_as_child, :source => :ancestor
|
282
281
|
has_many :#{prefix}children, :through => :#{prefix}links_as_parent, :source => :descendant
|
data/lib/dag/edges.rb
CHANGED
@@ -20,14 +20,14 @@ module Dag
|
|
20
20
|
def find_edge(ancestor, descendant)
|
21
21
|
source = self::EndPoint.from(ancestor)
|
22
22
|
sink = self::EndPoint.from(descendant)
|
23
|
-
self.
|
23
|
+
self.where(self.conditions_for(source, sink).merge!({direct_column_name => true})).first
|
24
24
|
end
|
25
25
|
|
26
26
|
#Finds a link between two points
|
27
27
|
def find_link(ancestor, descendant)
|
28
28
|
source = self::EndPoint.from(ancestor)
|
29
29
|
sink = self::EndPoint.from(descendant)
|
30
|
-
self.
|
30
|
+
self.where(self.conditions_for(source, sink)).first
|
31
31
|
end
|
32
32
|
|
33
33
|
#Finds or builds an edge between two points
|
data/test/dag_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'rubygems'
|
3
|
-
gem 'activerecord', '~>
|
3
|
+
gem 'activerecord', '~> 4.1.0'
|
4
4
|
require "./init"
|
5
|
-
|
5
|
+
I18n.enforce_available_locales = true
|
6
6
|
|
7
7
|
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => "#{File.dirname(__FILE__)}/database.test")
|
8
8
|
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts-as-dag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 4.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matthew Leventi
|
@@ -10,96 +9,79 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2014-04-09 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: activerecord
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
|
-
requirements:
|
20
|
-
- - ~>
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 3.2.12
|
23
|
-
type: :development
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ~>
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: 3.2.12
|
31
14
|
- !ruby/object:Gem::Dependency
|
32
15
|
name: rake
|
33
16
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
17
|
requirements:
|
36
|
-
- -
|
18
|
+
- - ">="
|
37
19
|
- !ruby/object:Gem::Version
|
38
20
|
version: '0'
|
39
21
|
type: :development
|
40
22
|
prerelease: false
|
41
23
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
24
|
requirements:
|
44
|
-
- -
|
25
|
+
- - ">="
|
45
26
|
- !ruby/object:Gem::Version
|
46
27
|
version: '0'
|
47
28
|
- !ruby/object:Gem::Dependency
|
48
29
|
name: sqlite3
|
49
30
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
31
|
requirements:
|
52
|
-
- -
|
32
|
+
- - ">="
|
53
33
|
- !ruby/object:Gem::Version
|
54
34
|
version: '0'
|
55
35
|
type: :development
|
56
36
|
prerelease: false
|
57
37
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
38
|
requirements:
|
60
|
-
- -
|
39
|
+
- - ">="
|
61
40
|
- !ruby/object:Gem::Version
|
62
41
|
version: '0'
|
63
42
|
- !ruby/object:Gem::Dependency
|
64
43
|
name: activemodel
|
65
44
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
45
|
requirements:
|
68
|
-
- -
|
46
|
+
- - ">="
|
69
47
|
- !ruby/object:Gem::Version
|
70
48
|
version: '0'
|
71
49
|
type: :runtime
|
72
50
|
prerelease: false
|
73
51
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
52
|
requirements:
|
76
|
-
- -
|
53
|
+
- - ">="
|
77
54
|
- !ruby/object:Gem::Version
|
78
55
|
version: '0'
|
79
56
|
- !ruby/object:Gem::Dependency
|
80
57
|
name: activerecord
|
81
58
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
59
|
requirements:
|
84
|
-
- -
|
60
|
+
- - "~>"
|
85
61
|
- !ruby/object:Gem::Version
|
86
|
-
version: '0'
|
62
|
+
version: '4.0'
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 4.0.0
|
87
66
|
type: :runtime
|
88
67
|
prerelease: false
|
89
68
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
69
|
requirements:
|
92
|
-
- -
|
70
|
+
- - "~>"
|
93
71
|
- !ruby/object:Gem::Version
|
94
|
-
version: '0'
|
95
|
-
|
72
|
+
version: '4.0'
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 4.0.0
|
76
|
+
description: Directed Acyclic Graph hierarchy for Rail's ActiveRecord, supporting
|
77
|
+
Rails 4.x
|
96
78
|
email:
|
97
79
|
- resgraph@cox.net
|
98
80
|
executables: []
|
99
81
|
extensions: []
|
100
82
|
extra_rdoc_files: []
|
101
83
|
files:
|
102
|
-
- .gitignore
|
84
|
+
- ".gitignore"
|
103
85
|
- Gemfile
|
104
86
|
- MIT-LICENSE
|
105
87
|
- README.rdoc
|
@@ -118,30 +100,26 @@ files:
|
|
118
100
|
- test/dag_test.rb
|
119
101
|
homepage: https://github.com/resgraph/acts-as-dag
|
120
102
|
licenses: []
|
103
|
+
metadata: {}
|
121
104
|
post_install_message:
|
122
105
|
rdoc_options: []
|
123
106
|
require_paths:
|
124
107
|
- lib
|
125
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
-
none: false
|
127
109
|
requirements:
|
128
|
-
- -
|
110
|
+
- - ">="
|
129
111
|
- !ruby/object:Gem::Version
|
130
112
|
version: '0'
|
131
|
-
segments:
|
132
|
-
- 0
|
133
|
-
hash: -251717266432713559
|
134
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
114
|
requirements:
|
137
|
-
- -
|
115
|
+
- - ">="
|
138
116
|
- !ruby/object:Gem::Version
|
139
117
|
version: '0'
|
140
118
|
requirements: []
|
141
119
|
rubyforge_project: acts-as-dag
|
142
|
-
rubygems_version:
|
120
|
+
rubygems_version: 2.2.2
|
143
121
|
signing_key:
|
144
|
-
specification_version:
|
122
|
+
specification_version: 4
|
145
123
|
summary: Directed Acyclic Graph hierarchy for Rail's ActiveRecord
|
146
124
|
test_files:
|
147
125
|
- test/dag_test.rb
|