declare_schema 0.2.0.pre.1 → 0.2.0
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/CHANGELOG.md +6 -2
- data/Gemfile.lock +1 -1
- data/lib/declare_schema/model/field_spec.rb +1 -1
- data/lib/declare_schema/version.rb +1 -1
- data/lib/generators/declare_schema/migration/migrator.rb +29 -22
- data/spec/lib/declare_schema/migration_generator_spec.rb +3 -3
- data/spec/lib/generators/declare_schema/migration/migrator_spec.rb +42 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f3116a6fbb5a47de5809f3f813c88783284bad601452679fa59784f3598834b
|
4
|
+
data.tar.gz: 8f4b6fee7b4d17e5b644f32a4b624a3f77526f91826a8c0b82d61b6e25130332
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b833000d28d64e7856de05c9ae822c88dcceeb7861f777f13177ea8017e56bf937aba42b9da14ae1ce4810fd275c5462cb08c18c32839255ab46f1de116eee1d
|
7
|
+
data.tar.gz: c41c8cbdafd96eeb92fcf5c646ff9d18f4ce2374f06ecc6977015fa8406bc4639ab3722354212d1a75274c5af982f10b6c2f4c838de94f4b9436da20f836d5d3
|
data/CHANGELOG.md
CHANGED
@@ -4,14 +4,18 @@ 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
|
-
## [0.2.0] -
|
7
|
+
## [0.2.0] - 2020-10-26
|
8
8
|
### Added
|
9
9
|
- Automatically eager_load! all Rails::Engines before generating migrations.
|
10
10
|
|
11
11
|
### Changed
|
12
12
|
- Changed tests from rdoctest to rspec.
|
13
13
|
|
14
|
-
|
14
|
+
### Fixed
|
15
|
+
- Fixed a bug where `:text limit: 0xffff_ffff` (max size) was omitted from migrations.
|
16
|
+
- Fixed a bug where `:bigint` foreign keys were omitted from the migration.
|
17
|
+
|
18
|
+
## [0.1.3] - 2020-10-08
|
15
19
|
### Changed
|
16
20
|
- Updated the `always_ignore_tables` list in `Migrator` to access Rails metadata table names
|
17
21
|
using the appropriate Rails configuration attributes.
|
data/Gemfile.lock
CHANGED
@@ -53,7 +53,7 @@ module DeclareSchema
|
|
53
53
|
@options[:limit] = self.class.round_up_mysql_text_limit(@options[:limit] || MYSQL_LONGTEXT_LIMIT)
|
54
54
|
end
|
55
55
|
when :string
|
56
|
-
@options[:limit] or raise "limit must be given for :string field #{model}##{@name}: #{@options.inspect}; do you want 255
|
56
|
+
@options[:limit] or raise "limit must be given for :string field #{model}##{@name}: #{@options.inspect}; do you want `limit: 255`?"
|
57
57
|
end
|
58
58
|
@position = position_option || model.field_specs.length
|
59
59
|
end
|
@@ -96,6 +96,20 @@ module Generators
|
|
96
96
|
def connection
|
97
97
|
ActiveRecord::Base.connection
|
98
98
|
end
|
99
|
+
|
100
|
+
def fix_native_types(types)
|
101
|
+
case connection.class.name
|
102
|
+
when /mysql/i
|
103
|
+
types[:integer][:limit] ||= 11
|
104
|
+
types[:text][:limit] ||= 0xffff
|
105
|
+
types[:binary][:limit] ||= 0xffff
|
106
|
+
end
|
107
|
+
types
|
108
|
+
end
|
109
|
+
|
110
|
+
def native_types
|
111
|
+
@native_types ||= fix_native_types(connection.native_database_types)
|
112
|
+
end
|
99
113
|
end
|
100
114
|
|
101
115
|
def initialize(ambiguity_resolver = {})
|
@@ -129,22 +143,6 @@ module Generators
|
|
129
143
|
self.class.connection
|
130
144
|
end
|
131
145
|
|
132
|
-
class << self
|
133
|
-
def fix_native_types(types)
|
134
|
-
case connection.class.name
|
135
|
-
when /mysql/i
|
136
|
-
types[:integer][:limit] ||= 11
|
137
|
-
types[:text][:limit] ||= 0xffff
|
138
|
-
types[:binary][:limit] ||= 0xffff
|
139
|
-
end
|
140
|
-
types
|
141
|
-
end
|
142
|
-
|
143
|
-
def native_types
|
144
|
-
@native_types ||= fix_native_types(connection.native_database_types)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
146
|
def native_types
|
149
147
|
self.class.native_types
|
150
148
|
end
|
@@ -412,7 +410,7 @@ module Generators
|
|
412
410
|
spec = model.field_specs[c]
|
413
411
|
if spec.different_to?(col) # TODO: DRY this up to a diff function that returns the differences. It's different if it has differences. -Colin
|
414
412
|
change_spec = fk_field_options(model, c)
|
415
|
-
change_spec[:limit]
|
413
|
+
change_spec[:limit] ||= spec.limit if (spec.sql_type != :text ||
|
416
414
|
::DeclareSchema::Model::FieldSpec.mysql_text_limits?) &&
|
417
415
|
(spec.limit || col.limit)
|
418
416
|
change_spec[:precision] = spec.precision unless spec.precision.nil?
|
@@ -518,8 +516,7 @@ module Generators
|
|
518
516
|
next if k == :null && v == true
|
519
517
|
end
|
520
518
|
|
521
|
-
next if k == :limit && type == :text &&
|
522
|
-
(!::DeclareSchema::Model::FieldSpec.mysql_text_limits? || v == ::DeclareSchema::Model::FieldSpec::MYSQL_LONGTEXT_LIMIT)
|
519
|
+
next if k == :limit && type == :text && !::DeclareSchema::Model::FieldSpec.mysql_text_limits?
|
523
520
|
|
524
521
|
if k.is_a?(Symbol)
|
525
522
|
"#{k}: #{v.inspect}"
|
@@ -530,10 +527,20 @@ module Generators
|
|
530
527
|
end
|
531
528
|
|
532
529
|
def fk_field_options(model, field_name)
|
533
|
-
|
530
|
+
foreign_key = model.constraint_specs.find { |fk| field_name == fk.foreign_key.to_s }
|
531
|
+
if foreign_key && (parent_table = foreign_key.parent_table_name)
|
534
532
|
parent_columns = connection.columns(parent_table) rescue []
|
535
|
-
|
536
|
-
|
533
|
+
pk_limit =
|
534
|
+
if (pk_column = parent_columns.find { |column| column.name.to_s == "id" }) # right now foreign keys assume id is the target
|
535
|
+
if Rails::VERSION::MAJOR <= 4
|
536
|
+
pk_column.cast_type.limit
|
537
|
+
else
|
538
|
+
pk_column.limit
|
539
|
+
end
|
540
|
+
else
|
541
|
+
8
|
542
|
+
end
|
543
|
+
|
537
544
|
{ limit: pk_limit }
|
538
545
|
else
|
539
546
|
{}
|
@@ -196,7 +196,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
196
196
|
|
197
197
|
up, down = Generators::DeclareSchema::Migration::Migrator.run
|
198
198
|
expect(up).to eq(<<~EOS.strip)
|
199
|
-
add_column :adverts, :notes, :text, null: false
|
199
|
+
add_column :adverts, :notes, :text, null: false, limit: 4294967295
|
200
200
|
add_column :adverts, :description, :text, null: false, limit: 255
|
201
201
|
EOS
|
202
202
|
|
@@ -238,7 +238,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
238
238
|
end
|
239
239
|
|
240
240
|
up, down = Generators::DeclareSchema::Migration::Migrator.run
|
241
|
-
expect(up).to eq("change_column :adverts, :description, :text, null: false")
|
241
|
+
expect(up).to eq("change_column :adverts, :description, :text, limit: 4294967295, null: false")
|
242
242
|
expect(down).to eq("change_column :adverts, :description, :text")
|
243
243
|
|
244
244
|
# TODO TECH-4814: The above test should have this output:
|
@@ -253,7 +253,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
253
253
|
end
|
254
254
|
|
255
255
|
up, down = Generators::DeclareSchema::Migration::Migrator.run
|
256
|
-
expect(up).to eq("change_column :adverts, :description, :text, null: false")
|
256
|
+
expect(up).to eq("change_column :adverts, :description, :text, limit: 4294967295, null: false")
|
257
257
|
expect(down).to eq("change_column :adverts, :description, :text")
|
258
258
|
::DeclareSchema::Model::FieldSpec::instance_variable_set(:@mysql_text_limits, false)
|
259
259
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
require 'rails/generators'
|
5
|
+
|
6
|
+
module Generators
|
7
|
+
module DeclareSchema
|
8
|
+
module Migration
|
9
|
+
RSpec.describe Migrator do
|
10
|
+
before do
|
11
|
+
ActiveRecord::Base.connection.tables
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { described_class.new }
|
15
|
+
|
16
|
+
describe 'format_options' do
|
17
|
+
let(:mysql_longtext_limit) { 0xffff_ffff }
|
18
|
+
|
19
|
+
context 'MySQL' do
|
20
|
+
before do
|
21
|
+
expect(::DeclareSchema::Model::FieldSpec).to receive(:mysql_text_limits?).and_return(true)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns text limits' do
|
25
|
+
expect(subject.format_options({ limit: mysql_longtext_limit }, :text)).to eq(["limit: #{mysql_longtext_limit}"])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'non-MySQL' do
|
30
|
+
before do
|
31
|
+
expect(::DeclareSchema::Model::FieldSpec).to receive(:mysql_text_limits?).and_return(false)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns text limits' do
|
35
|
+
expect(subject.format_options({ limit: mysql_longtext_limit }, :text)).to eq([])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
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: 0.2.0
|
4
|
+
version: 0.2.0
|
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: 2020-10-
|
11
|
+
date: 2020-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- spec/lib/declare_schema/interactive_primary_key_spec.rb
|
78
78
|
- spec/lib/declare_schema/migration_generator_spec.rb
|
79
79
|
- spec/lib/declare_schema/prepare_testapp.rb
|
80
|
+
- spec/lib/generators/declare_schema/migration/migrator_spec.rb
|
80
81
|
- spec/spec_helper.rb
|
81
82
|
- test_responses.txt
|
82
83
|
homepage: https://github.com/Invoca/declare_schema
|