declare_schema 0.13.2 → 0.14.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3a8974d1b6642065c32bf892d5b8eb2a7da63064bcc74a5b6f4982a21ac1771
4
- data.tar.gz: d1cd0489a73e399b4ed21ec3e83c761d5edf821bcc1435d4f42e171700ccc27c
3
+ metadata.gz: 444a7dd7bb3bac5706b293e51e2fa97bfa7e774cf0a5ef317b77122d991f10f2
4
+ data.tar.gz: 5c0d39fa31c10cb994bffc88fc312682896cb422f5b9bda45a7d5fa5cd64c131
5
5
  SHA512:
6
- metadata.gz: 8926952cc9aec61b28cc9fe74d5766d3c67f35734b9bec4d93a767e58966a48bccc8bd49b919f9699c9d0e386f0ae2b9d43ffa65fec764959e6389b3daf92496
7
- data.tar.gz: 9149635173ede506625904d2ffa6aa4864c7dae69c0edf1dba776a60c5a46e77c95ccbb711d8db6c2aef63e4f38ae58e795686bbcce1574fc1ace064077eb593
6
+ metadata.gz: c39f52e48a8e79e75c97133aaac82f481c85e6fc762cba834021cc4dd5d77e8f9e4b78b551f73c9b2c28f9e83818cdc4cb142323a64146d6961ec52df4974382
7
+ data.tar.gz: 82b743c5c2e387e6a0b0f0c112fa24b699873412242a1cefea5c842c441d3e4169b8ed6a6364b667194d1b2fcfd35ba3567bfdac0ab8e5858e5ee0c04e770f53
@@ -11,15 +11,11 @@ jobs:
11
11
  matrix:
12
12
  ruby: [ 2.4.5, 2.5.8, 2.6.5, 2.7.1 ]
13
13
  gemfile:
14
- - gemfiles/rails_4_mysql.gemfile
15
- - gemfiles/rails_4_sqlite.gemfile
16
14
  - gemfiles/rails_5_mysql.gemfile
17
15
  - gemfiles/rails_5_sqlite.gemfile
18
16
  - gemfiles/rails_6_mysql.gemfile
19
17
  - gemfiles/rails_6_sqlite.gemfile
20
18
  exclude:
21
- - { gemfile: gemfiles/rails_4_mysql.gemfile, ruby: 2.7.1 }
22
- - { gemfile: gemfiles/rails_4_sqlite.gemfile, ruby: 2.7.1 }
23
19
  - { gemfile: gemfiles/rails_5_mysql.gemfile, ruby: 2.4.5 }
24
20
  - { gemfile: gemfiles/rails_5_sqlite.gemfile, ruby: 2.4.5 }
25
21
  - { gemfile: gemfiles/rails_6_mysql.gemfile, ruby: 2.4.5 }
data/Appraisals CHANGED
@@ -1,15 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- appraise 'rails-4-sqlite' do
4
- gem 'rails', '~> 4.2'
5
- gem 'sqlite3', '~> 1.3.0'
6
- end
7
-
8
- appraise 'rails-4-mysql' do
9
- gem 'rails', '~> 4.2'
10
- gem 'mysql2'
11
- end
12
-
13
3
  appraise 'rails-5-sqlite' do
14
4
  gem 'rails', '~> 5.2'
15
5
  gem 'sqlite3'
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@
3
3
  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
+ ## [0.14.0] - 2021-08-10
7
+ ### Deprecated
8
+ - Dropped support for Rails versions less than 5.
6
9
 
7
10
  ## [0.13.2] - 2021-08-04
8
11
  ### Fixed
@@ -192,6 +195,7 @@ using the appropriate Rails configuration attributes.
192
195
  ### Added
193
196
  - Initial version from https://github.com/Invoca/hobo_fields v4.1.0.
194
197
 
198
+ [0.14.0]: https://github.com/Invoca/declare_schema/compare/v0.13.1...v0.14.0
195
199
  [0.13.1]: https://github.com/Invoca/declare_schema/compare/v0.13.0...v0.13.1
196
200
  [0.13.0]: https://github.com/Invoca/declare_schema/compare/v0.12.1...v0.13.0
197
201
  [0.12.1]: https://github.com/Invoca/declare_schema/compare/v0.12.0...v0.12.1
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- declare_schema (0.13.2)
5
- rails (>= 4.2)
4
+ declare_schema (0.14.0)
5
+ rails (>= 5.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -21,5 +21,5 @@ Gem::Specification.new do |s|
21
21
  s.required_rubygems_version = ">= 1.3.6"
22
22
  s.require_paths = ["lib"]
23
23
 
24
- s.add_dependency 'rails', '>= 4.2'
24
+ s.add_dependency 'rails', '>= 5.0'
25
25
  end
@@ -28,12 +28,7 @@ module DeclareSchema
28
28
  @default_null = false
29
29
  @default_generate_foreign_keys = true
30
30
  @default_generate_indexing = true
31
- @db_migrate_command =
32
- if ActiveSupport::VERSION::MAJOR < 5
33
- "bundle exec rake db:migrate"
34
- else
35
- "bundle exec rails db:migrate"
36
- end
31
+ @db_migrate_command = "bundle exec rails db:migrate"
37
32
 
38
33
  class << self
39
34
  attr_reader :default_charset, :default_collation, :default_text_limit, :default_string_limit, :default_null,
@@ -131,11 +131,7 @@ module DeclareSchema
131
131
 
132
132
  fk_options[:dependent] = options.delete(:far_end_dependent) if options.has_key?(:far_end_dependent)
133
133
 
134
- if ActiveSupport::VERSION::MAJOR >= 5
135
- super
136
- else
137
- super(name, scope, options.except(:optional))
138
- end
134
+ super
139
135
 
140
136
  refl = reflections[name.to_s] or raise "Couldn't find reflection #{name} in #{reflections.keys}"
141
137
  fkey = refl.foreign_key or raise "Couldn't find foreign_key for #{name} in #{refl.inspect}"
@@ -190,12 +186,6 @@ module DeclareSchema
190
186
  end
191
187
  end
192
188
 
193
- if ::ActiveSupport::VERSION::MAJOR < 5
194
- def primary_key
195
- super || 'id'
196
- end
197
- end
198
-
199
189
  # returns the primary key (String) as declared with primary_key =
200
190
  # unlike the `primary_key` method, DOES NOT query the database to find the actual primary key in use right now
201
191
  # if no explicit primary key set, returns the _default_declared_primary_key
@@ -268,10 +258,8 @@ module DeclareSchema
268
258
  ActiveRecord::Coders::JSON
269
259
  elsif [:load, :dump].all? { |x| class_name_or_coder.respond_to?(x) }
270
260
  class_name_or_coder
271
- elsif ActiveSupport::VERSION::MAJOR >= 5
261
+ else
272
262
  ActiveRecord::Coders::YAMLColumn.new(attr_name, class_name_or_coder)
273
- else
274
- ActiveRecord::Coders::YAMLColumn.new(class_name_or_coder)
275
263
  end
276
264
 
277
265
  if default == coder.load(nil)
@@ -52,17 +52,9 @@ module DeclareSchema
52
52
 
53
53
  def deserialize_default_value(column, type, default_value)
54
54
  type or raise ArgumentError, "must pass type; got #{type.inspect}"
55
-
56
- case ActiveSupport::VERSION::MAJOR
57
- when 4
58
- # TODO: Delete this Rails 4 support ASAP! This could be wrong, since it's using the type of the old column...which
59
- # might be getting migrated to a new type. We should be using just type as below. -Colin
60
- column.type_cast_from_database(default_value)
61
- else
62
- cast_type = ActiveRecord::Base.connection.send(:lookup_cast_type, type.to_s) or
63
- raise "cast_type not found for #{type}"
64
- cast_type.deserialize(default_value)
65
- end
55
+ cast_type = ActiveRecord::Base.connection.send(:lookup_cast_type, type.to_s) or
56
+ raise "cast_type not found for #{type}"
57
+ cast_type.deserialize(default_value)
66
58
  end
67
59
 
68
60
  # Normalizes schema attributes for the given database adapter name.
@@ -63,32 +63,6 @@ module DeclareSchema
63
63
  def index_name(columns)
64
64
  "on_#{Array(columns).join("_and_")}"
65
65
  end
66
-
67
- private
68
-
69
- # This is the old approach which is still needed for MySQL in Rails 4 and SQLite
70
- def fallback_find_primary_key(model, table)
71
- ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/) || ActiveSupport::VERSION::MAJOR < 5 or return nil
72
-
73
- connection = model.connection.dup
74
-
75
- class << connection # defeat Rails MySQL driver code that skips the primary key by changing its name to a symbol
76
- def each_hash(result)
77
- super do |hash|
78
- if hash[:Key_name] == PRIMARY_KEY_NAME
79
- hash[:Key_name] = PRIMARY_KEY_NAME.to_sym
80
- end
81
- yield hash
82
- end
83
- end
84
- end
85
-
86
- if (pk_index = connection.indexes(table).find { |index| index.name.to_s == PRIMARY_KEY_NAME })
87
- Array(pk_index.columns)
88
- elsif model.connection.columns(table).any? { |col| col.name == 'id' }
89
- ['id']
90
- end
91
- end
92
66
  end
93
67
 
94
68
  def primary_key?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeclareSchema
4
- VERSION = "0.13.2"
4
+ VERSION = "0.14.0"
5
5
  end
@@ -83,11 +83,7 @@ module DeclareSchema
83
83
  if options[:migrate]
84
84
  say db_migrate_command
85
85
  bare_rails_command = db_migrate_command.sub(/\Abundle exec +/, '').sub(/\Arake +|rails +/, '')
86
- if ActiveSupport::VERSION::MAJOR < 5
87
- rake(bare_rails_command)
88
- else
89
- rails_command(bare_rails_command)
90
- end
86
+ rails_command(bare_rails_command)
91
87
  else
92
88
  say "\nNot running migration since --migrate not given. When you are ready, run:\n\n #{db_migrate_command}\n\n"
93
89
  end
@@ -97,24 +93,15 @@ module DeclareSchema
97
93
 
98
94
  private
99
95
 
100
- if ActiveSupport::VERSION::MAJOR < 5
101
- def indent(string, columns)
102
- whitespace = ' ' * columns
103
- string.gsub("\n", "\n#{whitespace}").gsub(/ +\n/, "\n")
104
- end
105
- end
106
-
107
96
  def migrations_pending?
108
97
  migrations = case ActiveSupport::VERSION::MAJOR
109
- when 4
110
- ActiveRecord::Migrator.migrations('db/migrate')
111
98
  when 5
112
99
  ActiveRecord::MigrationContext.new(ActiveRecord::Migrator.migrations_paths).migrations
113
100
  else
114
101
  ActiveRecord::MigrationContext.new(ActiveRecord::Migrator.migrations_paths, ActiveRecord::SchemaMigration).migrations
115
102
  end
116
103
  pending_migrations = case ActiveSupport::VERSION::MAJOR
117
- when 4, 5
104
+ when 5
118
105
  ActiveRecord::Migrator.new(:up, migrations).pending_migrations
119
106
  else
120
107
  ActiveRecord::Migrator.new(:up, migrations, ActiveRecord::SchemaMigration).pending_migrations
@@ -489,11 +489,7 @@ module Generators
489
489
  parent_columns = connection.columns(parent_table) rescue []
490
490
  pk_limit =
491
491
  if (pk_column = parent_columns.find { |column| column.name.to_s == "id" }) # right now foreign keys assume id is the target
492
- if ActiveSupport::VERSION::MAJOR < 5
493
- pk_column.cast_type.limit
494
- else
495
- pk_column.limit
496
- end
492
+ pk_column.limit
497
493
  else
498
494
  8
499
495
  end
@@ -555,12 +551,8 @@ module Generators
555
551
  end
556
552
  end
557
553
 
558
- SchemaDumper = case ActiveSupport::VERSION::MAJOR
559
- when 4
560
- ActiveRecord::SchemaDumper
561
- else
562
- ActiveRecord::ConnectionAdapters::SchemaDumper
563
- end
554
+ SchemaDumper = ActiveRecord::ConnectionAdapters::SchemaDumper
555
+
564
556
 
565
557
  def add_table_back(table)
566
558
  dumped_schema_stream = StringIO.new
@@ -1,4 +1,4 @@
1
- class <%= @migration_class_name %> < (ActiveSupport::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)
1
+ class <%= @migration_class_name %> < (ActiveRecord::Migration[4.2])
2
2
  def self.up
3
3
  <%= @up.presence or raise "no @up given!" %>
4
4
  end
@@ -11,10 +11,6 @@ RSpec.describe DeclareSchema::Model::FieldSpec do
11
11
 
12
12
  before do
13
13
  load File.expand_path('prepare_testapp.rb', __dir__)
14
-
15
- if ActiveSupport::VERSION::MAJOR < 5
16
- allow(col_spec).to receive(:type_cast_from_database, &:itself)
17
- end
18
14
  end
19
15
 
20
16
  describe '#initialize' do
@@ -226,14 +222,8 @@ RSpec.describe DeclareSchema::Model::FieldSpec do
226
222
 
227
223
  describe '#schema_attributes' do
228
224
  let(:col_spec) do
229
- case ActiveSupport::VERSION::MAJOR
230
- when 4
231
- cast_type = ActiveRecord::Type::Integer.new(limit: 8)
232
- ActiveRecord::ConnectionAdapters::Column.new("price", nil, cast_type, "integer(8)", false)
233
- else
234
- sql_type_metadata = ActiveRecord::ConnectionAdapters::SqlTypeMetadata.new(sql_type: "integer(8)", type: :integer, limit: 8)
235
- ActiveRecord::ConnectionAdapters::Column.new("price", nil, sql_type_metadata, false, "adverts")
236
- end
225
+ sql_type_metadata = ActiveRecord::ConnectionAdapters::SqlTypeMetadata.new(sql_type: "integer(8)", type: :integer, limit: 8)
226
+ ActiveRecord::ConnectionAdapters::Column.new("price", nil, sql_type_metadata, false, "adverts")
237
227
  end
238
228
 
239
229
  it 'returns the attributes except name, position, and non-SQL options' do
@@ -28,7 +28,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
28
28
  EOS
29
29
 
30
30
  case ActiveSupport::VERSION::MAJOR
31
- when 4, 5
31
+ when 5
32
32
  expect_test_definition_to_eq('alpha/beta', <<~EOS)
33
33
  require "test_helper"
34
34
 
@@ -51,20 +51,6 @@ RSpec.describe 'DeclareSchema Migration Generator' do
51
51
  end
52
52
 
53
53
  case ActiveSupport::VERSION::MAJOR
54
- when 4
55
- expect_test_fixture_to_eq('alpha/beta', <<~EOS)
56
- # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
57
-
58
- # This model initially had no columns defined. If you add columns to the
59
- # model remove the '{}' from the fixture names and add the columns immediately
60
- # below each fixture, per the syntax in the comments below
61
- #
62
- one: {}
63
- # column: value
64
- #
65
- two: {}
66
- # column: value
67
- EOS
68
54
  when 5
69
55
  expect_test_fixture_to_eq('alpha/beta', <<~EOS)
70
56
  # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
@@ -62,7 +62,7 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
62
62
  ActiveRecord::Base.connection.execute("CREATE TABLE foos (id integer PRIMARY KEY AUTOINCREMENT NOT NULL)")
63
63
  end
64
64
 
65
- if ActiveSupport::VERSION::MAJOR >= 5 && !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
65
+ if !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
66
66
  # replace custom primary_key
67
67
  class Foo < ActiveRecord::Base
68
68
  fields do
@@ -128,7 +128,7 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
128
128
  ActiveRecord::Base.connection.execute("CREATE TABLE foos (id integer PRIMARY KEY AUTOINCREMENT NOT NULL)")
129
129
  end
130
130
 
131
- if ActiveSupport::VERSION::MAJOR >= 5 && !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
131
+ if !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
132
132
  # replace custom primary_key
133
133
  class Foo < ActiveRecord::Base
134
134
  declare_schema do
@@ -30,7 +30,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
30
30
  end
31
31
  end
32
32
  let(:datetime_precision) do
33
- if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR >= 5
33
+ if defined?(Mysql2)
34
34
  ', precision: 0'
35
35
  end
36
36
  end
@@ -43,7 +43,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
43
43
  ''
44
44
  end
45
45
  else
46
- ", id: :integer" unless ActiveSupport::VERSION::MAJOR < 5
46
+ ", id: :integer"
47
47
  end
48
48
  end
49
49
  let(:lock_version_limit) do
@@ -91,16 +91,6 @@ RSpec.describe 'DeclareSchema Migration Generator' do
91
91
  ActiveRecord::Migration.class_eval(up)
92
92
  expect(Advert.columns.map(&:name)).to eq(["id", "name"])
93
93
 
94
- if ActiveSupport::VERSION::MAJOR < 5
95
- # Rails 4 drivers don't always create PK properly. Fix that by dropping and recreating.
96
- ActiveRecord::Base.connection.execute("drop table adverts")
97
- if defined?(Mysql2)
98
- ActiveRecord::Base.connection.execute("CREATE TABLE adverts (id integer PRIMARY KEY AUTO_INCREMENT NOT NULL, name varchar(250)) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin")
99
- else
100
- ActiveRecord::Base.connection.execute("CREATE TABLE adverts (id integer PRIMARY KEY AUTOINCREMENT NOT NULL, name varchar(250))")
101
- end
102
- end
103
-
104
94
  class Advert < ActiveRecord::Base
105
95
  fields do
106
96
  name :string, limit: 250, null: true
@@ -809,26 +799,28 @@ RSpec.describe 'DeclareSchema Migration Generator' do
809
799
  nuke_model_class(Advert)
810
800
  ActiveRecord::Base.connection.execute("drop table `adverts`;")
811
801
 
812
- class Advert < ActiveRecord::Base
813
- def self.disable_auto_increment
814
- true
815
- end
802
+ if !defined?(SQLite3) && ActiveSupport::VERSION::MAJOR >= 5
803
+ class Advert < ActiveRecord::Base
804
+ def self.disable_auto_increment
805
+ true
806
+ end
816
807
 
817
- fields do
818
- description :text, limit: 250, null: true
808
+ fields do
809
+ description :text, limit: 250, null: true
810
+ end
819
811
  end
820
- end
821
812
 
822
- up, _ = Generators::DeclareSchema::Migration::Migrator.run.tap do |migrations|
823
- expect(migrations).to(
824
- migrate_up(<<~EOS.strip)
825
- create_table :adverts, id: false do |t|
826
- t.integer :id, limit: 8, auto_increment: false, primary_key: true
827
- t.text :description, limit: nil, null: true
828
- end
829
- EOS
830
- .and migrate_down("drop_table :adverts")
831
- )
813
+ up, _ = Generators::DeclareSchema::Migration::Migrator.run.tap do |migrations|
814
+ expect(migrations).to(
815
+ migrate_up(<<~EOS.strip)
816
+ create_table :adverts, id: false, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
817
+ t.integer :id, limit: 8, auto_increment: false, primary_key: true
818
+ t.text :description, limit: 255, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
819
+ end
820
+ EOS
821
+ .and migrate_down("drop_table :adverts")
822
+ )
823
+ end
832
824
  end
833
825
 
834
826
  ## DSL
@@ -911,7 +903,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
911
903
  nuke_model_class(Advertiser)
912
904
  nuke_model_class(Affiliate)
913
905
  end
914
- end if !defined?(SQLite3) && ActiveRecord::VERSION::MAJOR >= 5
906
+ end if !defined?(SQLite3)
915
907
 
916
908
  describe 'serialize' do
917
909
  before do
@@ -1098,13 +1090,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1098
1090
  end
1099
1091
 
1100
1092
  context "for Rails #{ActiveSupport::VERSION::MAJOR}" do
1101
- if ActiveSupport::VERSION::MAJOR >= 5
1102
- let(:optional_true) { { optional: true } }
1103
- let(:optional_false) { { optional: false } }
1104
- else
1105
- let(:optional_true) { {} }
1106
- let(:optional_false) { {} }
1107
- end
1093
+ let(:optional_true) { { optional: true } }
1094
+ let(:optional_false) { { optional: false } }
1108
1095
  let(:optional_flag) { { false => optional_false, true => optional_true } }
1109
1096
 
1110
1097
  describe 'belongs_to' do
@@ -1204,36 +1191,30 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1204
1191
  migration_content = File.read(migrations.first)
1205
1192
  first_line = migration_content.split("\n").first
1206
1193
  base_class = first_line.split(' < ').last
1207
- expect(base_class).to eq("(ActiveSupport::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)")
1194
+ expect(base_class).to eq("(ActiveRecord::Migration[4.2])")
1208
1195
  end
1209
1196
  end
1210
1197
 
1211
1198
  context 'Does not generate migrations' do
1212
1199
  it 'for aliased fields bigint -> integer limit 8' do
1213
- if ActiveSupport::VERSION::MAJOR >= 5 || !ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/)
1214
- class Advert < active_record_base_class.constantize
1215
- fields do
1216
- price :bigint
1217
- end
1200
+ class Advert < active_record_base_class.constantize
1201
+ fields do
1202
+ price :bigint
1218
1203
  end
1204
+ end
1219
1205
 
1220
- generate_migrations '-n', '-m'
1221
-
1222
- migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
1223
- expect(migrations.size).to eq(1), migrations.inspect
1206
+ generate_migrations '-n', '-m'
1224
1207
 
1225
- if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR < 5
1226
- ActiveRecord::Base.connection.execute("ALTER TABLE adverts ADD PRIMARY KEY (id)")
1227
- end
1208
+ migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
1209
+ expect(migrations.size).to eq(1), migrations.inspect
1228
1210
 
1229
- class Advert < active_record_base_class.constantize
1230
- fields do
1231
- price :integer, limit: 8
1232
- end
1211
+ class Advert < active_record_base_class.constantize
1212
+ fields do
1213
+ price :integer, limit: 8
1233
1214
  end
1234
-
1235
- expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
1236
1215
  end
1216
+
1217
+ expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
1237
1218
  end
1238
1219
  end
1239
1220
  end
@@ -1275,16 +1256,6 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1275
1256
  ActiveRecord::Migration.class_eval(up)
1276
1257
  expect(Advert.columns.map(&:name)).to eq(["id", "name"])
1277
1258
 
1278
- if ActiveSupport::VERSION::MAJOR < 5
1279
- # Rails 4 drivers don't always create PK properly. Fix that by dropping and recreating.
1280
- ActiveRecord::Base.connection.execute("drop table adverts")
1281
- if defined?(Mysql2)
1282
- ActiveRecord::Base.connection.execute("CREATE TABLE adverts (id integer PRIMARY KEY AUTO_INCREMENT NOT NULL, name varchar(250)) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin")
1283
- else
1284
- ActiveRecord::Base.connection.execute("CREATE TABLE adverts (id integer PRIMARY KEY AUTOINCREMENT NOT NULL, name varchar(250))")
1285
- end
1286
- end
1287
-
1288
1259
  class Advert < ActiveRecord::Base
1289
1260
  declare_schema do
1290
1261
  string :name, limit: 250, null: true
@@ -2071,7 +2042,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2071
2042
  nuke_model_class(Advertiser)
2072
2043
  nuke_model_class(Affiliate)
2073
2044
  end
2074
- end if !defined?(SQLite3) && ActiveRecord::VERSION::MAJOR >= 5
2045
+ end if !defined?(SQLite3)
2075
2046
 
2076
2047
  describe 'serialize' do
2077
2048
  before do
@@ -2258,13 +2229,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2258
2229
  end
2259
2230
 
2260
2231
  context "for Rails #{ActiveSupport::VERSION::MAJOR}" do
2261
- if ActiveSupport::VERSION::MAJOR >= 5
2262
- let(:optional_true) { { optional: true } }
2263
- let(:optional_false) { { optional: false } }
2264
- else
2265
- let(:optional_true) { {} }
2266
- let(:optional_false) { {} }
2267
- end
2232
+ let(:optional_true) { { optional: true } }
2233
+ let(:optional_false) { { optional: false } }
2268
2234
  let(:optional_flag) { { false => optional_false, true => optional_true } }
2269
2235
 
2270
2236
  describe 'belongs_to' do
@@ -2373,9 +2339,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2373
2339
  end
2374
2340
  class Fk < ActiveRecord::Base
2375
2341
  declare_schema { }
2376
- belongs_to :id_default, (ActiveSupport::VERSION::MAJOR < 5 ? { constraint: false } : {})
2377
- belongs_to :id4, (ActiveSupport::VERSION::MAJOR < 5 ? { constraint: false } : {})
2378
- belongs_to :id8, (ActiveSupport::VERSION::MAJOR < 5 ? { constraint: false } : {})
2342
+ belongs_to :id_default, ({})
2343
+ belongs_to :id4, ({})
2344
+ belongs_to :id8, ({})
2379
2345
  end
2380
2346
  end
2381
2347
 
@@ -2486,36 +2452,30 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2486
2452
  migration_content = File.read(migrations.first)
2487
2453
  first_line = migration_content.split("\n").first
2488
2454
  base_class = first_line.split(' < ').last
2489
- expect(base_class).to eq("(ActiveSupport::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)")
2455
+ expect(base_class).to eq("(ActiveRecord::Migration[4.2])")
2490
2456
  end
2491
2457
  end
2492
2458
 
2493
2459
  context 'Does not generate migrations' do
2494
2460
  it 'for aliased fields bigint -> integer limit 8' do
2495
- if ActiveSupport::VERSION::MAJOR >= 5 || !ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/)
2496
- class Advert < active_record_base_class.constantize
2497
- declare_schema do
2498
- bigint :price
2499
- end
2461
+ class Advert < active_record_base_class.constantize
2462
+ declare_schema do
2463
+ bigint :price
2500
2464
  end
2465
+ end
2501
2466
 
2502
- generate_migrations '-n', '-m'
2503
-
2504
- migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
2505
- expect(migrations.size).to eq(1), migrations.inspect
2467
+ generate_migrations '-n', '-m'
2506
2468
 
2507
- if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR < 5
2508
- ActiveRecord::Base.connection.execute("ALTER TABLE adverts ADD PRIMARY KEY (id)")
2509
- end
2469
+ migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
2470
+ expect(migrations.size).to eq(1), migrations.inspect
2510
2471
 
2511
- class Advert < active_record_base_class.constantize
2512
- declare_schema do
2513
- integer :price, limit: 8
2514
- end
2472
+ class Advert < active_record_base_class.constantize
2473
+ declare_schema do
2474
+ integer :price, limit: 8
2515
2475
  end
2516
-
2517
- expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
2518
2476
  end
2477
+
2478
+ expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
2519
2479
  end
2520
2480
  end
2521
2481
 
@@ -14,11 +14,8 @@ RSpec.describe DeclareSchema::Model::Column do
14
14
 
15
15
  describe 'class methods' do
16
16
  describe '.native_type?' do
17
- if ActiveSupport::VERSION::MAJOR >= 5
18
- let(:native_types) { [:string, :text, :integer, :float, :decimal, :datetime, :time, :date, :binary, :boolean, :json] }
19
- else
20
- let(:native_types) { [:string, :text, :integer, :float, :decimal, :datetime, :time, :date, :binary, :boolean] }
21
- end
17
+ let(:native_types) { [:string, :text, :integer, :float, :decimal, :datetime, :time, :date, :binary, :boolean, :json] }
18
+
22
19
 
23
20
  it 'is falsey for :primary_key' do
24
21
  expect(described_class.native_type?(:primary_key)).to be_falsey
@@ -63,19 +60,17 @@ RSpec.describe DeclareSchema::Model::Column do
63
60
  end
64
61
 
65
62
  describe '.deserialize_default_value' do
66
- if ::ActiveSupport::VERSION::MAJOR >= 5
67
- it 'deserializes :boolean' do
68
- expect(described_class.deserialize_default_value(nil, :boolean, 'true')).to eq(true)
69
- expect(described_class.deserialize_default_value(nil, :boolean, 'false')).to eq(false)
70
- end
63
+ it 'deserializes :boolean' do
64
+ expect(described_class.deserialize_default_value(nil, :boolean, 'true')).to eq(true)
65
+ expect(described_class.deserialize_default_value(nil, :boolean, 'false')).to eq(false)
66
+ end
71
67
 
72
- it 'deserializes :integer' do
73
- expect(described_class.deserialize_default_value(nil, :integer, '12')).to eq(12)
74
- end
68
+ it 'deserializes :integer' do
69
+ expect(described_class.deserialize_default_value(nil, :integer, '12')).to eq(12)
70
+ end
75
71
 
76
- it 'deserializes :json' do
77
- expect(described_class.deserialize_default_value(nil, :json, '{}')).to eq({})
78
- end
72
+ it 'deserializes :json' do
73
+ expect(described_class.deserialize_default_value(nil, :json, '{}')).to eq({})
79
74
  end
80
75
  end
81
76
  end
@@ -110,16 +110,6 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
110
110
  let(:model_class) { IndexDefinitionCompoundIndexModel }
111
111
 
112
112
  it 'returns the indexes for the model' do
113
- if ActiveSupport::VERSION::MAJOR < 5
114
- expect(model_class.connection).to receive(:primary_key).with('index_definition_compound_index_models').and_return(nil)
115
- connection_stub = instance_double(ActiveRecord::Base.connection.class, "connection")
116
- expect(connection_stub).to receive(:indexes).
117
- with('index_definition_compound_index_models').
118
- and_return([DeclareSchema::Model::IndexDefinition.new(model_class, ['fk1_id', 'fk2_id'], name: 'PRIMARY')])
119
-
120
- expect(model_class.connection).to receive(:dup).and_return(connection_stub)
121
- end
122
-
123
113
  expect(subject.size).to eq(1), subject.inspect
124
114
  expect([:name, :columns, :unique].map { |attr| subject[0].send(attr) }).to eq(
125
115
  ['PRIMARY', ['fk1_id', 'fk2_id'], true]
@@ -219,16 +209,6 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
219
209
  let(:model_class) { IndexDefinitionCompoundIndexModel }
220
210
 
221
211
  it 'returns the indexes for the model' do
222
- if ActiveSupport::VERSION::MAJOR < 5
223
- expect(model_class.connection).to receive(:primary_key).with('index_definition_compound_index_models').and_return(nil)
224
- connection_stub = instance_double(ActiveRecord::Base.connection.class, "connection")
225
- expect(connection_stub).to receive(:indexes).
226
- with('index_definition_compound_index_models').
227
- and_return([DeclareSchema::Model::IndexDefinition.new(model_class, ['fk1_id', 'fk2_id'], name: 'PRIMARY')])
228
-
229
- expect(model_class.connection).to receive(:dup).and_return(connection_stub)
230
- end
231
-
232
212
  expect(subject.size).to eq(1), subject.inspect
233
213
  expect([:name, :columns, :unique].map { |attr| subject[0].send(attr) }).to eq(
234
214
  ['PRIMARY', ['fk1_id', 'fk2_id'], true]
data/spec/spec_helper.rb CHANGED
@@ -27,11 +27,7 @@ RSpec.configure do |config|
27
27
  RSpec::Support::ObjectFormatter.default_instance.max_formatted_output_length = 2_000
28
28
 
29
29
  def active_record_base_class
30
- if ActiveSupport::VERSION::MAJOR == 4
31
- 'ActiveRecord::Base'
32
- else
33
- 'ApplicationRecord'
34
- end
30
+ 'ApplicationRecord'
35
31
  end
36
32
 
37
33
  def migrate(renames = {})
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.13.2
4
+ version: 0.14.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: 2021-08-04 00:00:00.000000000 Z
11
+ date: 2021-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.2'
26
+ version: '5.0'
27
27
  description: Declare your Rails/active_record model schemas and have database migrations
28
28
  generated for you!
29
29
  email: development@invoca.com
@@ -49,8 +49,6 @@ files:
49
49
  - bin/declare_schema
50
50
  - declare_schema.gemspec
51
51
  - gemfiles/.bundle/config
52
- - gemfiles/rails_4_mysql.gemfile
53
- - gemfiles/rails_4_sqlite.gemfile
54
52
  - gemfiles/rails_5_mysql.gemfile
55
53
  - gemfiles/rails_5_sqlite.gemfile
56
54
  - gemfiles/rails_6_mysql.gemfile
@@ -1,22 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "bundler", "< 2"
7
- gem "climate_control", "~> 0.2"
8
- gem "pry"
9
- gem "pry-byebug"
10
- gem "rails", "~> 4.2"
11
- gem "responders"
12
- gem "rspec"
13
- gem "rubocop"
14
- gem "yard"
15
- gem "mysql2"
16
-
17
- group :testapp do
18
- gem "bootsnap", ">= 1.1.0", require: false
19
- gem "listen"
20
- end
21
-
22
- gemspec path: "../"
@@ -1,22 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "bundler", "< 2"
7
- gem "climate_control", "~> 0.2"
8
- gem "pry"
9
- gem "pry-byebug"
10
- gem "rails", "~> 4.2"
11
- gem "responders"
12
- gem "rspec"
13
- gem "rubocop"
14
- gem "yard"
15
- gem "sqlite3", "~> 1.3.0"
16
-
17
- group :testapp do
18
- gem "bootsnap", ">= 1.1.0", require: false
19
- gem "listen"
20
- end
21
-
22
- gemspec path: "../"