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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1105295586a21290d1fefcaec67cc0fb4e4e7dc40e737c6542526d829e5618ee
4
- data.tar.gz: b2e61fd515503636536364a7bc3b4694f0dbfa03bedeb5b1d38f1163c24ba074
3
+ metadata.gz: 6659e16d0c901d24bf885a03eb19e340081420a651084fa7b87c5578dec42052
4
+ data.tar.gz: e6456fa8ee41246b382a0bbf298c647f5f7286f7e21ed3aab44d918b8073e983
5
5
  SHA512:
6
- metadata.gz: ee09a550c55af660d7cf30e3ab45203c9a205f6a133525bb40cdf02dc65de9bca6a70ef0506c72f364b8e7bd29880029c16d00ccc004feecb16d2e7bd74087eb
7
- data.tar.gz: fe634af62642fb0e0989fcdca6da2b0601be0e5271c225200944020e1c20acaa1d8eed1f6c70d8405c8fcd8e058a33da816890776b99b74c9dbdb67b4b713a86
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.bigint :parent_id, null: false
40
- t.bigint :child_id, null: false
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.bigint :predecessor_id, null: false
53
- t.bigint :successor_id, null: false
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 ID.
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dagable
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
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.1.1
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: 3.6.9
141
+ rubygems_version: 4.0.6
142
142
  specification_version: 4
143
143
  summary: DAG infrastructure for ActiveRecord models
144
144
  test_files: []