torque-postgresql 3.3.1 → 3.3.3

Sign up to get free protection for your applications and to get access to all the features.
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