torque-postgresql 2.4.1 → 2.4.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: 0e36ced2b0986c132e095bbc1799e4fab1f7bd6f320e83d74f8387c9ad23b798
4
- data.tar.gz: 4807f5dc5146805a349a5495829e0b4aac83df495982b08a35c9c593d8323d42
3
+ metadata.gz: 19cfac9293a2758ae928a2d1a8ab7aaf37b8d7ba1943f24c89b37eae28c04fa8
4
+ data.tar.gz: 213df2558e23565ab99f4a36feb7733e59437ddfe36b01f44d2603570f92f39f
5
5
  SHA512:
6
- metadata.gz: 84cc6db0f08fcb8c6d0616784382f77ebca1440a396df0a06efa7c2b0e1e0ac6685d54c4b4f6ac5163a7ba42cbeb4b2f81fcb197e4836d894819e0f76d9545c4
7
- data.tar.gz: 3624ca914923f61c0bf23a7eed17c8c7d71270b8d0853d3d1445b7a1e513a97d066d8a7041111e504a7b1e6aaaab391cc2502d8fb42e69052c46b97377f4dfb4
6
+ metadata.gz: 34df30f7080d5b44a59b59011a1f1751c122fa8aa9df50facfadb2b3a051547f922d03dfdb374b027c004dc5c757b84d655938f34ece4f48423556cccd7c5485
7
+ data.tar.gz: b63f3250fc36a88b39a66750e577eda7b734a621f8176dabde7eacbb2cf50d00b1db7fe451286210fefc3c5f43fb624f447290a55cd286611f9cc08e98e1ea35
@@ -33,9 +33,9 @@ module Torque
33
33
  end
34
34
 
35
35
  # Renames a type.
36
- def rename_type(type_name, new_name)
36
+ def rename_type(type_name, new_name, options = {})
37
37
  execute <<-SQL.squish
38
- ALTER TYPE #{quote_type_name(type_name)}
38
+ ALTER TYPE #{quote_type_name(type_name, options[:schema])}
39
39
  RENAME TO #{Quoting::Name.new(nil, new_name.to_s).quoted}
40
40
  SQL
41
41
  end
@@ -102,6 +102,18 @@ module Torque
102
102
  super table_name, **options, &block
103
103
  end
104
104
 
105
+ # Simply add the schema to the table name when changing a table
106
+ def change_table(table_name, **options)
107
+ table_name = "#{options[:schema]}.#{table_name}" if options[:schema].present?
108
+ super table_name, **options
109
+ end
110
+
111
+ # Simply add the schema to the table name when dropping a table
112
+ def drop_table(table_name, **options)
113
+ table_name = "#{options[:schema]}.#{table_name}" if options[:schema].present?
114
+ super table_name, **options
115
+ end
116
+
105
117
  # Add the schema option when extracting table options
106
118
  def table_options(table_name)
107
119
  parts = table_name.split('.').reverse
@@ -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
@@ -12,8 +12,8 @@ module Torque
12
12
  return @schema if defined?(@schema)
13
13
 
14
14
  @schema = ([@klass] + @klass.module_parents[0..-2]).find do |klass|
15
- next unless klass.respond_to?(:schema)
16
- break klass.schema
15
+ next unless klass.respond_to?(:schema) && !(value = klass.schema).nil?
16
+ break value
17
17
  end
18
18
  end
19
19
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Torque
4
4
  module PostgreSQL
5
- VERSION = '2.4.1'
5
+ VERSION = '2.4.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
@@ -441,4 +441,45 @@ RSpec.describe 'BelongsToMany' do
441
441
  expect { query.load }.not_to raise_error
442
442
  end
443
443
  end
444
+
445
+ context 'using custom keys' do
446
+ let(:connection) { ActiveRecord::Base.connection }
447
+ let(:post) { Post }
448
+ let(:tag) { Tag }
449
+ let(:tags) { %w[a b c].map { |id| create(:tag, friendly_id: id) } }
450
+
451
+ subject { create(:post) }
452
+
453
+ before do
454
+ connection.add_column(:tags, :friendly_id, :string)
455
+ connection.add_column(:posts, :friendly_tag_ids, :string, array: true)
456
+ post.belongs_to_many(:tags, foreign_key: :friendly_tag_ids, primary_key: :friendly_id)
457
+ post.reset_column_information
458
+ tag.reset_column_information
459
+ end
460
+
461
+ after do
462
+ tag.reset_column_information
463
+ post.reset_column_information
464
+ post._reflections.delete(:tags)
465
+ end
466
+
467
+ it 'loads associated records' do
468
+ subject.update(friendly_tag_ids: tags.pluck(:friendly_id))
469
+
470
+ expect(subject.tags.to_sql).to be_eql(<<-SQL.squish)
471
+ SELECT "tags".* FROM "tags" WHERE "tags"."friendly_id" IN ('a', 'b', 'c')
472
+ SQL
473
+
474
+ expect(subject.tags.load).to be_a(ActiveRecord::Associations::CollectionProxy)
475
+ expect(subject.tags.to_a).to be_eql(tags)
476
+ end
477
+
478
+ it 'can properly assign tags' do
479
+ expect(subject.friendly_tag_ids).to be_blank
480
+
481
+ subject.tags = tags
482
+ expect(subject.friendly_tag_ids).to be_eql(%w[a b c])
483
+ end
484
+ end
444
485
  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
 
@@ -40,6 +40,26 @@ RSpec.describe 'Schema' do
40
40
  connection.schemas_whitelist.push('legacy')
41
41
  expect(connection.schema_exists?(:legacy)).to be_truthy
42
42
  end
43
+
44
+ context 'reverting' do
45
+ let(:migration) { ActiveRecord::Migration::Current.new('Testing') }
46
+
47
+ before { connection.create_schema(:legacy) }
48
+
49
+ it 'reverts the creation of a schema' do
50
+ expect(connection.schema_exists?(:legacy, filtered: false)).to be_truthy
51
+ migration.revert { migration.connection.create_schema(:legacy) }
52
+ expect(connection.schema_exists?(:legacy, filtered: false)).to be_falsey
53
+ end
54
+
55
+ it 'reverts the creation of a table' do
56
+ connection.create_table(:users, schema: :legacy) { |t| t.string(:name) }
57
+
58
+ expect(connection.table_exists?('legacy.users')).to be_truthy
59
+ migration.revert { migration.connection.create_table(:users, schema: :legacy) }
60
+ expect(connection.table_exists?('legacy.users')).to be_falsey
61
+ end
62
+ end
43
63
  end
44
64
 
45
65
  context 'on schema' do
@@ -86,8 +106,11 @@ RSpec.describe 'Schema' do
86
106
 
87
107
  context 'on relation' do
88
108
  let(:model) { Internal::User }
109
+ let(:table_name) { Torque::PostgreSQL::TableName.new(model, 'users') }
89
110
 
90
111
  it 'adds the schema to the query' do
112
+ model.reset_table_name
113
+ expect(table_name.to_s).to eq('internal.users')
91
114
  expect(model.all.to_sql).to match(/FROM "internal"."users"/)
92
115
  end
93
116
 
@@ -95,7 +118,17 @@ RSpec.describe 'Schema' do
95
118
  allow(Internal).to receive(:schema).and_return('internal')
96
119
  allow(model).to receive(:schema).and_return(nil)
97
120
 
121
+ model.reset_table_name
122
+ expect(table_name.to_s).to eq('internal.users')
98
123
  expect(model.all.to_sql).to match(/FROM "internal"."users"/)
99
124
  end
125
+
126
+ it 'does not change anything if the model has not configured a schema' do
127
+ allow(model).to receive(:schema).and_return(nil)
128
+
129
+ model.reset_table_name
130
+ expect(table_name.to_s).to eq('users')
131
+ expect(model.all.to_sql).to match(/FROM "users"/)
132
+ end
100
133
  end
101
134
  end
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: 2.4.1
4
+ version: 2.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Silva
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-06 00:00:00.000000000 Z
11
+ date: 2024-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -134,6 +134,9 @@ dependencies:
134
134
  - - ">="
135
135
  - !ruby/object:Gem::Version
136
136
  version: 6.2.1
137
+ - - "<"
138
+ - !ruby/object:Gem::Version
139
+ version: '6.4'
137
140
  type: :development
138
141
  prerelease: false
139
142
  version_requirements: !ruby/object:Gem::Requirement
@@ -144,6 +147,9 @@ dependencies:
144
147
  - - ">="
145
148
  - !ruby/object:Gem::Version
146
149
  version: 6.2.1
150
+ - - "<"
151
+ - !ruby/object:Gem::Version
152
+ version: '6.4'
147
153
  - !ruby/object:Gem::Dependency
148
154
  name: faker
149
155
  requirement: !ruby/object:Gem::Requirement
@@ -299,7 +305,7 @@ licenses:
299
305
  metadata:
300
306
  source_code_uri: https://github.com/crashtech/torque-postgresql
301
307
  bug_tracker_uri: https://github.com/crashtech/torque-postgresql/issues
302
- post_install_message:
308
+ post_install_message:
303
309
  rdoc_options:
304
310
  - "--title"
305
311
  - Torque PostgreSQL
@@ -317,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
317
323
  version: 1.8.11
318
324
  requirements: []
319
325
  rubygems_version: 3.2.15
320
- signing_key:
326
+ signing_key:
321
327
  specification_version: 4
322
328
  summary: ActiveRecord extension to access PostgreSQL advanced resources
323
329
  test_files: