torque-postgresql 3.3.1 → 3.3.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/lib/torque/postgresql/associations/belongs_to_many_association.rb +2 -2
- data/lib/torque/postgresql/reflection/belongs_to_many_reflection.rb +2 -2
- data/lib/torque/postgresql/version.rb +1 -1
- data/spec/schema.rb +9 -9
- data/spec/tests/belongs_to_many_spec.rb +52 -3
- data/spec/tests/distinct_on_spec.rb +1 -1
- data/spec/tests/relation_spec.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: 7afebc02d5b903b8ddb8cfdee36ff8260d1c82977943f2fadbb63771902c6c44
|
4
|
+
data.tar.gz: 89a55ffc034942f5b49dac3693fc3ed95fc6a0d49a01586c2b58a0c26086e2de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 168d3558d8ba7ac6862b39301381edcfd23a208bfd24293fc957a53243327b561d1063fc794bbedf741bcca12cd6fd3f3460999b3674300ed6f1171e510fcc51
|
7
|
+
data.tar.gz: '09859ddf3c06760d276fe25df11e8817168115cbea4ce971b86884ef3ed39428cc0292a885c10300e720d9a1b2f1c3da35dff40532f24fab96f13bb4b122f19c'
|
@@ -12,9 +12,9 @@ module Torque
|
|
12
12
|
## CUSTOM
|
13
13
|
def ids_reader
|
14
14
|
if loaded?
|
15
|
-
target.pluck(reflection.
|
15
|
+
target.pluck(reflection.active_record_primary_key)
|
16
16
|
elsif !target.empty?
|
17
|
-
load_target.pluck(reflection.
|
17
|
+
load_target.pluck(reflection.active_record_primary_key)
|
18
18
|
else
|
19
19
|
stale_state || column_default_value
|
20
20
|
end
|
@@ -25,7 +25,7 @@ module Torque
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def foreign_key
|
28
|
-
@foreign_key ||= options[:foreign_key] || derive_foreign_key.freeze
|
28
|
+
@foreign_key ||= options[:foreign_key]&.to_s || derive_foreign_key.freeze
|
29
29
|
end
|
30
30
|
|
31
31
|
def association_foreign_key
|
@@ -33,7 +33,7 @@ module Torque
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def active_record_primary_key
|
36
|
-
@active_record_primary_key ||= options[:primary_key] || derive_primary_key
|
36
|
+
@active_record_primary_key ||= options[:primary_key]&.to_s || derive_primary_key
|
37
37
|
end
|
38
38
|
|
39
39
|
def join_primary_key(*)
|
data/spec/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
version =
|
13
|
+
version = 3
|
14
14
|
|
15
15
|
return if ActiveRecord::Migrator.current_version == version
|
16
16
|
ActiveRecord::Schema.define(version: version) do
|
@@ -77,14 +77,14 @@ ActiveRecord::Schema.define(version: version) do
|
|
77
77
|
create_table "texts", force: :cascade do |t|
|
78
78
|
t.integer "user_id"
|
79
79
|
t.string "content"
|
80
|
-
t.enum "conflict",
|
80
|
+
t.enum "conflict", enum_type: :conflicts
|
81
81
|
end
|
82
82
|
|
83
83
|
create_table "comments", force: :cascade do |t|
|
84
|
-
t.integer "user_id",
|
84
|
+
t.integer "user_id", null: false
|
85
85
|
t.integer "comment_id"
|
86
86
|
t.integer "video_id"
|
87
|
-
t.text "content",
|
87
|
+
t.text "content", null: false
|
88
88
|
t.string "kind"
|
89
89
|
t.index ["user_id"], name: "index_comments_on_user_id", using: :btree
|
90
90
|
t.index ["comment_id"], name: "index_comments_on_comment_id", using: :btree
|
@@ -92,7 +92,7 @@ ActiveRecord::Schema.define(version: version) do
|
|
92
92
|
|
93
93
|
create_table "courses", force: :cascade do |t|
|
94
94
|
t.integer "category_id"
|
95
|
-
t.string "title",
|
95
|
+
t.string "title", null: false
|
96
96
|
t.interval "duration"
|
97
97
|
t.enum "types", enum_type: :types, array: true
|
98
98
|
t.datetime "created_at", null: false
|
@@ -108,7 +108,7 @@ ActiveRecord::Schema.define(version: version) do
|
|
108
108
|
t.integer "activity_id"
|
109
109
|
t.string "title"
|
110
110
|
t.text "content"
|
111
|
-
t.enum "status",
|
111
|
+
t.enum "status", enum_type: :content_status
|
112
112
|
t.index ["author_id"], name: "index_posts_on_author_id", using: :btree
|
113
113
|
end
|
114
114
|
|
@@ -120,8 +120,8 @@ ActiveRecord::Schema.define(version: version) do
|
|
120
120
|
end
|
121
121
|
|
122
122
|
create_table "users", force: :cascade do |t|
|
123
|
-
t.string "name",
|
124
|
-
t.enum "role",
|
123
|
+
t.string "name", null: false
|
124
|
+
t.enum "role", enum_type: :roles, default: :visitor
|
125
125
|
t.datetime "created_at", null: false
|
126
126
|
t.datetime "updated_at", null: false
|
127
127
|
end
|
@@ -137,7 +137,7 @@ ActiveRecord::Schema.define(version: version) do
|
|
137
137
|
t.integer "author_id"
|
138
138
|
t.string "title"
|
139
139
|
t.boolean "active"
|
140
|
-
t.enum "kind",
|
140
|
+
t.enum "kind", enum_type: :types
|
141
141
|
t.datetime "created_at", null: false
|
142
142
|
t.datetime "updated_at", null: false
|
143
143
|
end
|
@@ -20,6 +20,14 @@ RSpec.describe 'BelongsToMany' do
|
|
20
20
|
|
21
21
|
model.belongs_to_many(:tests)
|
22
22
|
end
|
23
|
+
|
24
|
+
it 'allows setting up foreign key and primary_key as symbol' do
|
25
|
+
model.belongs_to_many(:tests, foreign_key: :test_ids, primary_key: :test_id)
|
26
|
+
|
27
|
+
reflection = model._reflections['tests']
|
28
|
+
expect(reflection.foreign_key).to be_eql('test_ids')
|
29
|
+
expect(reflection.active_record_primary_key).to be_eql('test_id')
|
30
|
+
end
|
23
31
|
end
|
24
32
|
|
25
33
|
context 'on association' do
|
@@ -359,7 +367,7 @@ RSpec.describe 'BelongsToMany' do
|
|
359
367
|
expect { query.load }.not_to raise_error
|
360
368
|
end
|
361
369
|
|
362
|
-
context '
|
370
|
+
context 'when the attribute has a default value' do
|
363
371
|
subject { FactoryBot.create(:item) }
|
364
372
|
|
365
373
|
it 'will always return the column default value' do
|
@@ -382,7 +390,7 @@ RSpec.describe 'BelongsToMany' do
|
|
382
390
|
end
|
383
391
|
end
|
384
392
|
|
385
|
-
context '
|
393
|
+
context 'when record is not persisted' do
|
386
394
|
let(:initial) { FactoryBot.create(:tag) }
|
387
395
|
|
388
396
|
subject { Video.new(title: 'A', tags: [initial]) }
|
@@ -400,7 +408,7 @@ RSpec.describe 'BelongsToMany' do
|
|
400
408
|
let(:player) { Class.new(ActiveRecord::Base) }
|
401
409
|
let(:other) { player.create }
|
402
410
|
|
403
|
-
# TODO: Set as a
|
411
|
+
# TODO: Set as a shared example
|
404
412
|
before do
|
405
413
|
connection.create_table(:players, id: :uuid) { |t| t.string :name }
|
406
414
|
connection.create_table(:games, id: :uuid) { |t| t.uuid :player_ids, array: true }
|
@@ -440,4 +448,45 @@ RSpec.describe 'BelongsToMany' do
|
|
440
448
|
expect { query.load }.not_to raise_error
|
441
449
|
end
|
442
450
|
end
|
451
|
+
|
452
|
+
context 'using custom keys' do
|
453
|
+
let(:connection) { ActiveRecord::Base.connection }
|
454
|
+
let(:post) { Post }
|
455
|
+
let(:tag) { Tag }
|
456
|
+
let(:tags) { %w[a b c].map { |id| create(:tag, friendly_id: id) } }
|
457
|
+
|
458
|
+
subject { create(:post) }
|
459
|
+
|
460
|
+
before do
|
461
|
+
connection.add_column(:tags, :friendly_id, :string)
|
462
|
+
connection.add_column(:posts, :friendly_tag_ids, :string, array: true)
|
463
|
+
post.belongs_to_many(:tags, foreign_key: :friendly_tag_ids, primary_key: :friendly_id)
|
464
|
+
post.reset_column_information
|
465
|
+
tag.reset_column_information
|
466
|
+
end
|
467
|
+
|
468
|
+
after do
|
469
|
+
tag.reset_column_information
|
470
|
+
post.reset_column_information
|
471
|
+
post._reflections.delete(:tags)
|
472
|
+
end
|
473
|
+
|
474
|
+
it 'loads associated records' do
|
475
|
+
subject.update(friendly_tag_ids: tags.pluck(:friendly_id))
|
476
|
+
|
477
|
+
expect(subject.tags.to_sql).to be_eql(<<-SQL.squish)
|
478
|
+
SELECT "tags".* FROM "tags" WHERE "tags"."friendly_id" IN ('a', 'b', 'c')
|
479
|
+
SQL
|
480
|
+
|
481
|
+
expect(subject.tags.load).to be_a(ActiveRecord::Associations::CollectionProxy)
|
482
|
+
expect(subject.tags.to_a).to be_eql(tags)
|
483
|
+
end
|
484
|
+
|
485
|
+
it 'can properly assign tags' do
|
486
|
+
expect(subject.friendly_tag_ids).to be_blank
|
487
|
+
|
488
|
+
subject.tags = tags
|
489
|
+
expect(subject.friendly_tag_ids).to be_eql(%w[a b c])
|
490
|
+
end
|
491
|
+
end
|
443
492
|
end
|
@@ -40,7 +40,7 @@ RSpec.describe 'DistinctOn' do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'raises with invalid relation' do
|
43
|
-
expect { subject.distinct_on(
|
43
|
+
expect { subject.distinct_on(supervisors: :name).to_sql }.to \
|
44
44
|
raise_error(ArgumentError, /Relation for/)
|
45
45
|
end
|
46
46
|
|
data/spec/tests/relation_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: torque-postgresql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carlos Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|