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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8dfe147f5a65e1626923bff250d8c057c73e2fc2c2f2ea6812d67537da32e38
4
- data.tar.gz: 3205fea618ea9da4d9aeccf3b5d48e3dff72a4a670e181c78c9b9a0b9896cfbf
3
+ metadata.gz: 7afebc02d5b903b8ddb8cfdee36ff8260d1c82977943f2fadbb63771902c6c44
4
+ data.tar.gz: 89a55ffc034942f5b49dac3693fc3ed95fc6a0d49a01586c2b58a0c26086e2de
5
5
  SHA512:
6
- metadata.gz: ce88617dcacc292754245e9fff7f7dba62ec672a5b7b4760fff2ff2b28b4b25be7e8413b92bf509f5f9f9c4d0b096559b7ec46de4fdce5294181c363f34367fb
7
- data.tar.gz: 6c3e8e96edd6b906bd2f0038869f9f15596fad7f22745c5bd63c08b623a55cf97f6185877206dac54a7e93e81ce5d7644bfeb048e7e2db1780bb7cadc7843159
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.association_primary_key)
15
+ target.pluck(reflection.active_record_primary_key)
16
16
  elsif !target.empty?
17
- load_target.pluck(reflection.association_primary_key)
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(*)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Torque
4
4
  module PostgreSQL
5
- VERSION = '3.3.1'
5
+ VERSION = '3.3.3'
6
6
  end
7
7
  end
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 = 2
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", enum_type: :conflicts
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", null: false
84
+ t.integer "user_id", null: false
85
85
  t.integer "comment_id"
86
86
  t.integer "video_id"
87
- t.text "content", null: false
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", null: false
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", enum_type: :content_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", null: false
124
- t.enum "role", enum_type: :roles, default: :visitor
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", enum_type: :types
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 'When the attribute has a default value' do
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 'When record is not persisted' do
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 shred example
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(tags: :name).to_sql }.to \
43
+ expect { subject.distinct_on(supervisors: :name).to_sql }.to \
44
44
  raise_error(ArgumentError, /Relation for/)
45
45
  end
46
46
 
@@ -44,7 +44,7 @@ RSpec.describe 'Relation', type: :helper do
44
44
  end
45
45
 
46
46
  it 'raises on relation not present' do
47
- check = [tags: :name]
47
+ check = [supervisors: :name]
48
48
  expect{ subject.call(check) }.to raise_error(ArgumentError, /Relation for/)
49
49
  end
50
50
 
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.1
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-01-05 00:00:00.000000000 Z
11
+ date: 2024-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails