declare_schema 1.3.1.colin.1 → 1.3.2.rp.1
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/.ruby-version +1 -1
- data/CHANGELOG.md +6 -2
- data/Gemfile.lock +1 -1
- data/lib/declare_schema/model/index_definition.rb +1 -1
- data/lib/declare_schema/model/table_options_definition.rb +3 -0
- data/lib/declare_schema/schema_change/table_change.rb +8 -1
- data/lib/declare_schema/version.rb +1 -1
- data/lib/generators/declare_schema/migration/migrator.rb +2 -2
- data/spec/lib/declare_schema/model/index_definition_spec.rb +2 -1
- data/spec/lib/declare_schema/schema_change/table_change_spec.rb +41 -12
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 177fdef8d03843627f34a461487ec92d222e5d18efe3a4881bc1b4326a069e99
|
4
|
+
data.tar.gz: d5dac684d51bfad5e7e92214fcc9a7e1b4020a70aa4cd2fd8a5bbb0c718f1c71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bdc6408f561f9aa70dad7e2208ae2022f8b30adce1c1350f598cae1c93b4dbd9f65f61a97324282fad9f0d2dd2126e90dda199781040f08564bc6998121c670
|
7
|
+
data.tar.gz: 1057a1c6202b77f5854b119208227c7a7341f2c3d0cab7eb7a743322ebb60bddaec4eb77671d60035e610789a9d73c7b345868262aebe0e6052ff2c17c8a6d81
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.2
|
data/CHANGELOG.md
CHANGED
@@ -4,9 +4,13 @@ Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
5
5
|
Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
-
## [1.3.
|
7
|
+
## [1.3.2] - Unreleased
|
8
8
|
### Fixed
|
9
|
-
- Fix bug in
|
9
|
+
- Fix bug in migrator when table option definitions differ
|
10
|
+
|
11
|
+
## [1.3.1] - 2023-10-12
|
12
|
+
### Fixed
|
13
|
+
- Fix bug in default index name when table name + __ + column suffix exceeds `DeclareSchema.max_index_and_constraint_name_length`.
|
10
14
|
In this case we truncate the table name and append part of its hash.
|
11
15
|
|
12
16
|
## [1.3.0] - 2023-07-10
|
data/Gemfile.lock
CHANGED
@@ -66,7 +66,7 @@ module DeclareSchema
|
|
66
66
|
break index_name
|
67
67
|
end
|
68
68
|
end or raise IndexNameTooLongError,
|
69
|
-
"
|
69
|
+
"Default index name '#{index_name}' exceeds configured limit of #{DeclareSchema.max_index_and_constraint_name_length} characters. Use the `name:` option to give it a shorter name, or adjust DeclareSchema.max_index_and_constraint_name_length if you know your database can accept longer names."
|
70
70
|
end
|
71
71
|
|
72
72
|
private
|
@@ -57,6 +57,9 @@ module DeclareSchema
|
|
57
57
|
@key ||= [table_name, table_options].map(&:to_s)
|
58
58
|
end
|
59
59
|
|
60
|
+
# Flatten out/join table options as a space-separated string
|
61
|
+
#
|
62
|
+
# @return [String] Table options as a string
|
60
63
|
def settings
|
61
64
|
@settings ||= table_options.map { |name, value| "#{TABLE_OPTIONS_TO_SQL_MAPPINGS[name]} #{value}" if value }.compact.join(" ")
|
62
65
|
end
|
@@ -5,8 +5,15 @@ require_relative 'base'
|
|
5
5
|
module DeclareSchema
|
6
6
|
module SchemaChange
|
7
7
|
class TableChange < Base
|
8
|
+
|
9
|
+
# @param [String] table_name The name of the table being changed
|
10
|
+
# @param [Hash] old_options The old/existing table option definitions
|
11
|
+
# @param [Hash] new_options The new/existing table option definitions
|
8
12
|
def initialize(table_name, old_options, new_options)
|
9
|
-
|
13
|
+
old_options.is_a?(Hash) or raise ArgumentError, "old_options must be a Hash but is: #{old_options.inspect}"
|
14
|
+
new_options.is_a?(Hash) or raise ArgumentError, "new_options must be a Hash but is: #{new_options.inspect}"
|
15
|
+
|
16
|
+
@table_name = table_name
|
10
17
|
@old_options = old_options
|
11
18
|
@new_options = new_options
|
12
19
|
end
|
@@ -548,8 +548,8 @@ module Generators
|
|
548
548
|
else
|
549
549
|
[
|
550
550
|
::DeclareSchema::SchemaChange::TableChange.new(current_table_name,
|
551
|
-
old_options_definition.
|
552
|
-
new_options_definition.
|
551
|
+
old_options_definition.table_options,
|
552
|
+
new_options_definition.table_options)
|
553
553
|
]
|
554
554
|
end
|
555
555
|
end
|
@@ -156,6 +156,7 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
|
|
156
156
|
50 => 'user_domains4814__last_name_first_name_middle_name',
|
157
157
|
51 => 'user_domains_4814__last_name_first_name_middle_name',
|
158
158
|
52 => 'user_domains_extra__last_name_first_name_middle_name',
|
159
|
+
53 => 'user_domains_extra__last_name_first_name_middle_name',
|
159
160
|
}.each do |len, index_name|
|
160
161
|
context "with max_index_and_constraint_name_length of #{len}" do
|
161
162
|
let(:max_index_and_constraint_name_length) { len }
|
@@ -169,7 +170,7 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
|
|
169
170
|
|
170
171
|
it 'raises' do
|
171
172
|
expect { subject }.to raise_exception(DeclareSchema::Model::IndexDefinition::IndexNameTooLongError,
|
172
|
-
/
|
173
|
+
/Default index name '__last_name_first_name_middle_name' exceeds configured limit of 33 characters\. Use the `name:` option to give it a shorter name, or adjust DeclareSchema\.max_index_and_constraint_name_length/i)
|
173
174
|
end
|
174
175
|
end
|
175
176
|
end
|
@@ -7,23 +7,52 @@ RSpec.describe DeclareSchema::SchemaChange::TableChange do
|
|
7
7
|
load File.expand_path('../prepare_testapp.rb', __dir__)
|
8
8
|
end
|
9
9
|
|
10
|
-
let(:table_name)
|
11
|
-
let(:old_options)
|
12
|
-
let(:new_options)
|
13
|
-
|
10
|
+
let(:table_name) { 'networks' }
|
11
|
+
let(:old_options) { { charset: 'utf8', collation: 'utf8_ci' } }
|
12
|
+
let(:new_options) { { charset: 'utf8mb4', collation: 'utf8mb4_bin' } }
|
13
|
+
let(:options_string) { 'CHARACTER SET utf8mb4 COLLATE utf8mb4_bin' }
|
14
|
+
subject { described_class.new(table_name, old_options, new_options) }
|
14
15
|
|
15
16
|
describe '#up/down' do
|
16
|
-
|
17
|
-
it '
|
18
|
-
|
19
|
-
|
17
|
+
context 'when Hashes are used to construct the TableChange' do
|
18
|
+
it 'does not raise' do
|
19
|
+
described_class.new(table_name, old_options, new_options)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#up' do
|
23
|
+
it 'responds with command' do
|
24
|
+
statement = "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(table_name)} CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"
|
25
|
+
expect(subject.up).to eq("execute #{statement.inspect}\n")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#down' do
|
30
|
+
it 'responds with command' do
|
31
|
+
statement = "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(table_name)} CHARACTER SET utf8 COLLATE utf8_ci"
|
32
|
+
expect(subject.down).to eq("execute #{statement.inspect}\n")
|
33
|
+
end
|
20
34
|
end
|
21
35
|
end
|
22
36
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
37
|
+
context 'when Strings are used to construct the TableChange' do
|
38
|
+
context 'when old_options is a string' do
|
39
|
+
subject { described_class.new(table_name, options_string, new_options) }
|
40
|
+
|
41
|
+
it 'raises' do
|
42
|
+
expect {
|
43
|
+
subject
|
44
|
+
}.to raise_exception(ArgumentError, /old_options must be a Hash but is: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"/)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when new_options is a string' do
|
49
|
+
subject { described_class.new(table_name, old_options, options_string) }
|
50
|
+
|
51
|
+
it 'raises' do
|
52
|
+
expect {
|
53
|
+
subject
|
54
|
+
}.to raise_exception(ArgumentError, /new_options must be a Hash but is: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"/)
|
55
|
+
end
|
27
56
|
end
|
28
57
|
end
|
29
58
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: declare_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.2.rp.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Invoca Development adapted from hobo_fields by Tom Locke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: 1.3.6
|
143
143
|
requirements: []
|
144
|
-
rubygems_version: 3.4.
|
144
|
+
rubygems_version: 3.4.10
|
145
145
|
signing_key:
|
146
146
|
specification_version: 4
|
147
147
|
summary: Database schema declaration and migration generator for Rails
|