dagable 0.1.1 → 0.2.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 +4 -4
- data/lib/dagable/migration_helpers.rb +14 -4
- data/lib/dagable/migrations/helper.rb +3 -3
- data/lib/dagable/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6659e16d0c901d24bf885a03eb19e340081420a651084fa7b87c5578dec42052
|
|
4
|
+
data.tar.gz: e6456fa8ee41246b382a0bbf298c647f5f7286f7e21ed3aab44d918b8073e983
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3395f73b85288c51e2e04db6fad33d08e8e0de752c37ecb1dfdc9902746b2af1fa5a95251f01e6e8d110b9b3477e399d8b85a9b822432148a23dd8e8ad72c046
|
|
7
|
+
data.tar.gz: c042d70a98bdd693168e953a4ed964fcd4641d8654656ed237b6ada29cda2bf40102e0e773d179c8866b61e796da040bf3064ce649d7446d2557e7936408ade1
|
|
@@ -34,10 +34,11 @@ module Dagable
|
|
|
34
34
|
|
|
35
35
|
def create_dagable_edges_table(source_table_name)
|
|
36
36
|
edges_table = "#{source_table_name}_edges"
|
|
37
|
+
id_type = source_primary_key_type(source_table_name)
|
|
37
38
|
|
|
38
39
|
create_table edges_table do |t|
|
|
39
|
-
t.
|
|
40
|
-
t.
|
|
40
|
+
t.column :parent_id, id_type, null: false
|
|
41
|
+
t.column :child_id, id_type, null: false
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
add_index edges_table, %i[parent_id child_id], unique: true
|
|
@@ -47,10 +48,11 @@ module Dagable
|
|
|
47
48
|
|
|
48
49
|
def create_dagable_ancestries_table(source_table_name)
|
|
49
50
|
ancestries_table = "#{source_table_name}_ancestries"
|
|
51
|
+
id_type = source_primary_key_type(source_table_name)
|
|
50
52
|
|
|
51
53
|
create_table ancestries_table do |t|
|
|
52
|
-
t.
|
|
53
|
-
t.
|
|
54
|
+
t.column :predecessor_id, id_type, null: false
|
|
55
|
+
t.column :successor_id, id_type, null: false
|
|
54
56
|
t.integer :depth, null: false, default: 0
|
|
55
57
|
end
|
|
56
58
|
|
|
@@ -60,5 +62,13 @@ module Dagable
|
|
|
60
62
|
add_foreign_key ancestries_table, source_table_name, column: :predecessor_id
|
|
61
63
|
add_foreign_key ancestries_table, source_table_name, column: :successor_id
|
|
62
64
|
end
|
|
65
|
+
|
|
66
|
+
# Edge and ancestry columns must reference the source table's records, so
|
|
67
|
+
# their type mirrors whatever the source primary key is (bigint, uuid,
|
|
68
|
+
# string, ...), read from the live schema.
|
|
69
|
+
def source_primary_key_type(source_table_name)
|
|
70
|
+
pk_name = primary_key(source_table_name)
|
|
71
|
+
columns(source_table_name).find { |column| column.name == pk_name }.sql_type
|
|
72
|
+
end
|
|
63
73
|
end
|
|
64
74
|
end
|
|
@@ -35,16 +35,16 @@ module Dagable
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# Resolves a reference to a dagable record. Accepts either a model
|
|
38
|
-
# instance or an integer
|
|
38
|
+
# instance or an ID (integer or UUID/string).
|
|
39
39
|
#
|
|
40
40
|
# @param model [Class] the dagable ActiveRecord model class
|
|
41
|
-
# @param reference [ActiveRecord::Base, Integer] the record or its ID
|
|
41
|
+
# @param reference [ActiveRecord::Base, Integer, String] the record or its ID
|
|
42
42
|
# @return [ActiveRecord::Base]
|
|
43
43
|
# @raise [ArgumentError] if the reference type is unsupported
|
|
44
44
|
def retrieve_item(model, reference)
|
|
45
45
|
case reference
|
|
46
46
|
when model then reference
|
|
47
|
-
when Integer then model.find(reference)
|
|
47
|
+
when Integer, String then model.find(reference)
|
|
48
48
|
else raise ArgumentError, "Invalid dagable item reference"
|
|
49
49
|
end
|
|
50
50
|
end
|
data/lib/dagable/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dagable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Leandro Maduro
|
|
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
138
138
|
- !ruby/object:Gem::Version
|
|
139
139
|
version: '0'
|
|
140
140
|
requirements: []
|
|
141
|
-
rubygems_version:
|
|
141
|
+
rubygems_version: 4.0.6
|
|
142
142
|
specification_version: 4
|
|
143
143
|
summary: DAG infrastructure for ActiveRecord models
|
|
144
144
|
test_files: []
|