parallel-ancestry 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +4 -0
- data/lib/parallel-ancestry.rb +4 -2
- data/lib/parallel-ancestry/ParallelAncestry.rb +11 -62
- metadata +18 -2
data/CHANGELOG.rdoc
CHANGED
@@ -13,3 +13,7 @@ Shortened :initialize_base_instance_for_include and :initialize_base_instance_fo
|
|
13
13
|
|
14
14
|
Renamed :match_ancestor_searching_upward to :match_ancestor because ancestors are always found by searching upward.
|
15
15
|
Fixes for ancestor lookup when arriving at Class.
|
16
|
+
|
17
|
+
== 6/15/2012
|
18
|
+
|
19
|
+
Added unique-array for children and parents, which means now :include? etc. use hash lookup internally.
|
data/lib/parallel-ancestry.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
2
|
require 'module-cluster'
|
3
|
+
require 'unique-array'
|
3
4
|
|
4
5
|
module ::ParallelAncestry
|
5
6
|
|
@@ -9,9 +10,10 @@ basepath = 'parallel-ancestry/ParallelAncestry'
|
|
9
10
|
|
10
11
|
files = [
|
11
12
|
|
12
|
-
'ModuleSubclassInheritance',
|
13
13
|
'Inheritance',
|
14
|
-
'Inheritance/ModuleSubclassInheritance'
|
14
|
+
'Inheritance/ModuleSubclassInheritance',
|
15
|
+
|
16
|
+
'ModuleSubclassInheritance'
|
15
17
|
|
16
18
|
]
|
17
19
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
module ::ParallelAncestry
|
3
3
|
|
4
|
-
InstanceAncestryStruct = ::Struct.new( :
|
4
|
+
InstanceAncestryStruct = ::Struct.new( :children, :parents )
|
5
5
|
|
6
6
|
extend ::ModuleCluster::Define::Block::ClassOrModule
|
7
7
|
|
@@ -32,7 +32,7 @@ module ::ParallelAncestry
|
|
32
32
|
# @return [Array<Object>] An array containing references to children.
|
33
33
|
def children( instance )
|
34
34
|
|
35
|
-
return
|
35
|
+
return ancestor_struct( instance ).children ||= ::UniqueArray.new( self )
|
36
36
|
|
37
37
|
end
|
38
38
|
|
@@ -45,7 +45,7 @@ module ::ParallelAncestry
|
|
45
45
|
# @return [Array<Object>] An array containing references to immediate parents for any configuration.
|
46
46
|
def parents( instance )
|
47
47
|
|
48
|
-
return
|
48
|
+
return ancestor_struct( instance ).parents ||= ::UniqueArray.new( self )
|
49
49
|
|
50
50
|
end
|
51
51
|
|
@@ -58,15 +58,7 @@ module ::ParallelAncestry
|
|
58
58
|
# @return [true, false] true or false.
|
59
59
|
def has_parents?( instance )
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
ancestor_struct = ancestor_struct( instance )
|
64
|
-
|
65
|
-
if ancestor_struct.parents_array
|
66
|
-
has_parents = ! ancestor_struct.parents_array.empty?
|
67
|
-
end
|
68
|
-
|
69
|
-
return has_parents
|
61
|
+
return ! parents( instance ).empty?
|
70
62
|
|
71
63
|
end
|
72
64
|
|
@@ -79,15 +71,7 @@ module ::ParallelAncestry
|
|
79
71
|
# @return [true, false] true or false.
|
80
72
|
def has_children?( instance )
|
81
73
|
|
82
|
-
|
83
|
-
|
84
|
-
ancestor_struct = ancestor_struct( instance )
|
85
|
-
|
86
|
-
if ancestor_struct.children_hash
|
87
|
-
has_children = ! ancestor_struct.children_hash.empty?
|
88
|
-
end
|
89
|
-
|
90
|
-
return has_children
|
74
|
+
return ! children( instance ).empty?
|
91
75
|
|
92
76
|
end
|
93
77
|
|
@@ -101,19 +85,14 @@ module ::ParallelAncestry
|
|
101
85
|
# @return [Array<Object>] An array containing references to children.
|
102
86
|
def register_child_for_parent( child, parent )
|
103
87
|
|
104
|
-
|
105
|
-
|
88
|
+
parents_of_child = parents( child )
|
89
|
+
children_of_parent = children( parent )
|
106
90
|
|
107
|
-
|
108
|
-
|
109
|
-
children_of_parent_hash[ child ] = true
|
110
|
-
end
|
91
|
+
# child order shouldn't be relevant
|
92
|
+
children_of_parent.push( child )
|
111
93
|
|
112
|
-
|
113
|
-
|
114
|
-
# parent order determines who wins conflicts, so we keep youngest first
|
115
|
-
parents_array( child ).unshift( parent )
|
116
|
-
end
|
94
|
+
# parent order determines who wins conflicts, so we keep youngest first
|
95
|
+
parents_of_child.unshift( parent )
|
117
96
|
|
118
97
|
return self
|
119
98
|
|
@@ -373,34 +352,4 @@ module ::ParallelAncestry
|
|
373
352
|
|
374
353
|
end
|
375
354
|
|
376
|
-
###################
|
377
|
-
# children_hash #
|
378
|
-
###################
|
379
|
-
|
380
|
-
def children_hash( instance )
|
381
|
-
|
382
|
-
return ancestor_struct( instance ).children_hash ||= { }
|
383
|
-
|
384
|
-
end
|
385
|
-
|
386
|
-
##################
|
387
|
-
# parents_hash #
|
388
|
-
##################
|
389
|
-
|
390
|
-
def parents_hash( instance )
|
391
|
-
|
392
|
-
return ancestor_struct( instance ).parents_hash ||= { }
|
393
|
-
|
394
|
-
end
|
395
|
-
|
396
|
-
###################
|
397
|
-
# parents_array #
|
398
|
-
###################
|
399
|
-
|
400
|
-
def parents_array( instance )
|
401
|
-
|
402
|
-
return ancestor_struct( instance ).parents_array ||= [ ]
|
403
|
-
|
404
|
-
end
|
405
|
-
|
406
355
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel-ancestry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: module-cluster
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: unique-array
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
description: Create and track parallel inheritance hierarchies. Hook parallel hierarchies
|
31
47
|
(by including a module) to automatically update/register ancestry at include and
|
32
48
|
extend, or update/register only manually. Manual registration permits definitions
|