edge 0.4.2 → 0.4.3
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Rakefile +1 -1
- data/gemfiles/4.0.gemfile +1 -1
- data/gemfiles/4.1.gemfile +1 -1
- data/gemfiles/4.2.gemfile +1 -1
- data/lib/edge/forest.rb +8 -6
- data/lib/edge/version.rb +1 -1
- data/spec/database_structure.sql +6 -0
- data/spec/forest_spec.rb +31 -0
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de6a7e89e268d6a04bcb12ea49f331c0492a12c0
|
4
|
+
data.tar.gz: d3223c0995b78bc3c9de539948b225ee2c0a148a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e906301864501743b6848b67a40b33d60e5447c7a34c39023327d577e03e43b0ad926834435c31dbaa5b924f16a1b4dcf3bf095565d18779d8cd180b9b4e3776
|
7
|
+
data.tar.gz: 85d2f8ea8e2e95dd163f17a2e436cec52b50bb80cc8bda6afc012cedba282548cd23991ea0bb4917b91847832ea9a7fb51734ff9a34bfc1b4a5df9011cd1f115
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
data/gemfiles/4.0.gemfile
CHANGED
data/gemfiles/4.1.gemfile
CHANGED
data/gemfiles/4.2.gemfile
CHANGED
data/lib/edge/forest.rb
CHANGED
@@ -4,10 +4,11 @@ module Edge
|
|
4
4
|
module ActsAsForest
|
5
5
|
# options:
|
6
6
|
#
|
7
|
+
# * dependent - passed to children has_many (default: none)
|
7
8
|
# * foreign_key - column name to use for parent foreign_key (default: parent_id)
|
8
9
|
# * order - how to order children (default: none)
|
9
10
|
def acts_as_forest(options={})
|
10
|
-
options.assert_valid_keys :foreign_key, :order
|
11
|
+
options.assert_valid_keys :foreign_key, :order, :dependent
|
11
12
|
|
12
13
|
class_attribute :forest_foreign_key
|
13
14
|
self.forest_foreign_key = options[:foreign_key] || "parent_id"
|
@@ -20,15 +21,16 @@ module Edge
|
|
20
21
|
:foreign_key => forest_foreign_key
|
21
22
|
}
|
22
23
|
|
24
|
+
dependent_options = options[:dependent] ? { dependent: options[:dependent] } : {}
|
25
|
+
|
23
26
|
belongs_to :parent, common_options.merge(inverse_of: :children)
|
24
27
|
|
25
28
|
if forest_order
|
26
|
-
has_many :children, -> { order(forest_order) }, common_options.merge(inverse_of: :parent)
|
29
|
+
has_many :children, -> { order(forest_order) }, common_options.merge(inverse_of: :parent).merge(dependent_options)
|
27
30
|
else
|
28
|
-
has_many :children, common_options.merge(inverse_of: :parent)
|
31
|
+
has_many :children, common_options.merge(inverse_of: :parent).merge(dependent_options)
|
29
32
|
end
|
30
33
|
|
31
|
-
|
32
34
|
scope :root, -> { where(forest_foreign_key => nil) }
|
33
35
|
|
34
36
|
include Edge::Forest::InstanceMethods
|
@@ -116,7 +118,7 @@ module Edge
|
|
116
118
|
|
117
119
|
as_statement = Arel::Nodes::As.new all_nodes, union
|
118
120
|
|
119
|
-
|
121
|
+
Arel::SelectManager.new(Arel::Table.engine)
|
120
122
|
.with(:recursive, as_statement)
|
121
123
|
.from(all_nodes)
|
122
124
|
.join(arel_table)
|
@@ -132,7 +134,7 @@ module Edge
|
|
132
134
|
|
133
135
|
# Returns true is this node is a root or false otherwise
|
134
136
|
def root?
|
135
|
-
!
|
137
|
+
!self[forest_foreign_key]
|
136
138
|
end
|
137
139
|
|
138
140
|
# Returns all sibling nodes (nodes that have the same parent). If this
|
data/lib/edge/version.rb
CHANGED
data/spec/database_structure.sql
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
DROP TABLE IF EXISTS locations;
|
2
|
+
DROP TABLE IF EXISTS body_parts;
|
2
3
|
|
3
4
|
CREATE TABLE locations(
|
4
5
|
id serial PRIMARY KEY,
|
@@ -6,3 +7,8 @@ CREATE TABLE locations(
|
|
6
7
|
name varchar NOT NULL,
|
7
8
|
attrs json DEFAULT NULL -- include a column that does not have an operator defined that can be used with union
|
8
9
|
);
|
10
|
+
|
11
|
+
CREATE TABLE body_parts(
|
12
|
+
id serial PRIMARY KEY,
|
13
|
+
body_part_id integer REFERENCES body_parts -- something that uses a non-standard parent ID
|
14
|
+
);
|
data/spec/forest_spec.rb
CHANGED
@@ -4,9 +4,14 @@ class Location < ActiveRecord::Base
|
|
4
4
|
acts_as_forest :order => "name"
|
5
5
|
end
|
6
6
|
|
7
|
+
class BodyPart < ActiveRecord::Base
|
8
|
+
acts_as_forest :foreign_key => "body_part_id"
|
9
|
+
end
|
10
|
+
|
7
11
|
Location.delete_all
|
8
12
|
|
9
13
|
describe "Edge::Forest" do
|
14
|
+
let(:skeleton) { BodyPart.create! }
|
10
15
|
let!(:usa) { Location.create! :name => "USA" }
|
11
16
|
let!(:illinois) { Location.create! :parent => usa, :name => "Illinois" }
|
12
17
|
let!(:chicago) { Location.create! :parent => illinois, :name => "Chicago" }
|
@@ -21,6 +26,12 @@ describe "Edge::Forest" do
|
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
29
|
+
context "of model with custom foreign key" do
|
30
|
+
it "should be true" do
|
31
|
+
expect(skeleton.root?).to eq true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
24
35
|
context "of child node" do
|
25
36
|
it "should be false" do
|
26
37
|
expect(illinois.root?).to eq false
|
@@ -226,4 +237,24 @@ describe "Edge::Forest" do
|
|
226
237
|
Location2.find_forest
|
227
238
|
end
|
228
239
|
end
|
240
|
+
|
241
|
+
describe "dependent destroy" do
|
242
|
+
it 'cascades destroys' do
|
243
|
+
class Location3 < ActiveRecord::Base
|
244
|
+
self.table_name = 'locations'
|
245
|
+
acts_as_forest dependent: :destroy
|
246
|
+
end
|
247
|
+
|
248
|
+
Location3.find(usa.id).destroy
|
249
|
+
|
250
|
+
expect(Location.exists?(usa.id)).to eq false
|
251
|
+
expect(Location.exists?(illinois.id)).to eq false
|
252
|
+
expect(Location.exists?(chicago.id)).to eq false
|
253
|
+
expect(Location.exists?(indiana.id)).to eq false
|
254
|
+
|
255
|
+
expect(Location.exists?(canada.id)).to eq true
|
256
|
+
expect(Location.exists?(british_columbia.id)).to eq true
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
229
260
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jack Christensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -159,9 +159,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
159
|
version: '0'
|
160
160
|
requirements: []
|
161
161
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.4.5
|
162
|
+
rubygems_version: 2.4.5.1
|
163
163
|
signing_key:
|
164
164
|
specification_version: 4
|
165
165
|
summary: Graph functionality for ActiveRecord. Provides tree/forest modeling structure
|
166
166
|
that can load entire trees in a single query.
|
167
|
-
test_files:
|
167
|
+
test_files:
|
168
|
+
- spec/database.yml
|
169
|
+
- spec/database.yml.travis
|
170
|
+
- spec/database_structure.sql
|
171
|
+
- spec/forest_spec.rb
|
172
|
+
- spec/spec_helper.rb
|