declare_schema 0.13.1 → 0.14.2

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: 4caf19f1ddb0978b9e9bbc5c55d5941a934ded2e4bbd8adfba52c078e599106b
4
- data.tar.gz: 2a8d9f9434f6acae5cab5bfe4ffc6eee0d6ce0e31a59b471d0c48b63b0c3260c
3
+ metadata.gz: 2804b7a11446f5570e967f4ea65be3ee2da5af62a54c3a345acfd2d9b9f58d7b
4
+ data.tar.gz: 1c1787e5388145ec1a8ae81276fda0488be7fc2d7e192355aaf8d76ef0c00005
5
5
  SHA512:
6
- metadata.gz: 6edfafddcd596afd63417d2e8f59aec7bfcd637e35d0fb77fc06f39e6e78d461da5c2e0b6752cb8b18785afa0ac81cfb7569fa0be85ba06ad3432d3911a624e5
7
- data.tar.gz: 7d2d190f0c6928f7b70f96c8ce58517475ce1b512a31a7c33033314bff0405fb51d88c82c72bd0a8a1b25d8558039ef787b0314b60f7fdefbd75975c3320f57e
6
+ metadata.gz: 2eaff1f5f1e0e0ded155db135646df64a9e38a04c64511550e98ed7857e182b63f45558b309dcbaf93d3a22bff6781b95b94418aa90604fbdafda076384bbde5
7
+ data.tar.gz: a8e380d8e2b1fadf9aeceeea58d3a2a1503330191dcb8f4f4fc507f7b6d191b4dec2f191e94820d7fb21efacfc95c571e5589612517904c48d91dde2d2866973
@@ -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/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.5
1
+ 2.7.0
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
@@ -4,6 +4,22 @@ 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.14.2] - 2021-09-01
8
+ ### Fixed
9
+ - Fixed another Ruby 2.7 warning about needing `**options` when calling a method that has `**options` in its signature.
10
+
11
+ ## [0.14.1] - 2021-09-01
12
+ ### Fixed
13
+ - Fixed Ruby 2.7 warning about needing `**options` when calling a method that has `**options` in its signature.
14
+
15
+ ## [0.14.0] - 2021-08-10
16
+ ### Removed
17
+ - Dropped support for Rails versions less than 5.
18
+
19
+ ## [0.13.2] - 2021-08-04
20
+ ### Fixed
21
+ - Fixed issue with disable_auto_increment support for new tables.
22
+
7
23
  ## [0.13.1] - 2021-08-02
8
24
  ### Fixed
9
25
  - Fixed migration file indentation bug in Rails 5 where the first line was indented an extra 4 characters.
@@ -188,6 +204,9 @@ using the appropriate Rails configuration attributes.
188
204
  ### Added
189
205
  - Initial version from https://github.com/Invoca/hobo_fields v4.1.0.
190
206
 
207
+ [0.14.2]: https://github.com/Invoca/declare_schema/compare/v0.14.1...v0.14.2
208
+ [0.14.1]: https://github.com/Invoca/declare_schema/compare/v0.14.0...v0.14.1
209
+ [0.14.0]: https://github.com/Invoca/declare_schema/compare/v0.13.1...v0.14.0
191
210
  [0.13.1]: https://github.com/Invoca/declare_schema/compare/v0.13.0...v0.13.1
192
211
  [0.13.0]: https://github.com/Invoca/declare_schema/compare/v0.12.1...v0.13.0
193
212
  [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.1)
5
- rails (>= 4.2)
4
+ declare_schema (0.14.2)
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
@@ -36,7 +36,7 @@ module DeclareSchema
36
36
  def method_missing(*args, **options)
37
37
  args.count(&:itself) >= 2 or raise ::ArgumentError, "fields in declare_schema block must be declared as: type name, [:required], options (got #{args.inspect}, #{options.inspect})"
38
38
  type, name, *required = args
39
- field(name, type, *required, options)
39
+ field(name, type, *required, **options)
40
40
  end
41
41
  end
42
42
  end
@@ -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?
@@ -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}"
@@ -156,7 +152,7 @@ module DeclareSchema
156
152
  end
157
153
  end
158
154
 
159
- declare_field(fkey.to_sym, :bigint, fkey_id_column_options)
155
+ declare_field(fkey.to_sym, :bigint, **fkey_id_column_options)
160
156
 
161
157
  if refl.options[:polymorphic]
162
158
  foreign_type = options[:foreign_type] || "#{name}_type"
@@ -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
@@ -224,7 +214,7 @@ module DeclareSchema
224
214
  # Declares the "foo_type" field that accompanies the "foo_id"
225
215
  # field for a polymorphic belongs_to
226
216
  def _declare_polymorphic_type_field(foreign_type, column_options)
227
- declare_field(foreign_type, :string, column_options.merge(limit: 255))
217
+ declare_field(foreign_type, :string, **column_options.merge(limit: 255))
228
218
  # FIXME: Before declare_schema was extracted, this used to now do:
229
219
  # never_show(type_col)
230
220
  # That needs doing somewhere
@@ -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)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeclareSchema
4
- VERSION = "0.13.1"
4
+ VERSION = "0.14.2"
5
5
  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,
@@ -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
@@ -226,7 +226,9 @@ module Generators
226
226
 
227
227
  primary_key_definition =
228
228
  if disable_auto_increment
229
- [:integer, :id, limit: 8, auto_increment: false, primary_key: true]
229
+ [[:integer, :id, limit: 8, auto_increment: false, primary_key: true]]
230
+ else
231
+ []
230
232
  end
231
233
 
232
234
  field_definitions = model.field_specs.values.sort_by(&:position).map do |f|
@@ -237,7 +239,7 @@ module Generators
237
239
  table_options = create_table_options(model, disable_auto_increment)
238
240
 
239
241
  table_add = ::DeclareSchema::SchemaChange::TableAdd.new(t,
240
- Array(primary_key_definition) + field_definitions,
242
+ primary_key_definition + field_definitions,
241
243
  table_options,
242
244
  sql_options: table_options_definition.settings)
243
245
  [
@@ -487,11 +489,7 @@ module Generators
487
489
  parent_columns = connection.columns(parent_table) rescue []
488
490
  pk_limit =
489
491
  if (pk_column = parent_columns.find { |column| column.name.to_s == "id" }) # right now foreign keys assume id is the target
490
- if ActiveSupport::VERSION::MAJOR < 5
491
- pk_column.cast_type.limit
492
- else
493
- pk_column.limit
494
- end
492
+ pk_column.limit
495
493
  else
496
494
  8
497
495
  end
@@ -553,12 +551,8 @@ module Generators
553
551
  end
554
552
  end
555
553
 
556
- SchemaDumper = case ActiveSupport::VERSION::MAJOR
557
- when 4
558
- ActiveRecord::SchemaDumper
559
- else
560
- ActiveRecord::ConnectionAdapters::SchemaDumper
561
- end
554
+ SchemaDumper = ActiveRecord::ConnectionAdapters::SchemaDumper
555
+
562
556
 
563
557
  def add_table_back(table)
564
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
@@ -803,9 +793,36 @@ RSpec.describe 'DeclareSchema Migration Generator' do
803
793
  EOS
804
794
  )
805
795
 
796
+ Advert.connection.schema_cache.clear!
797
+ Advert.reset_column_information
798
+
806
799
  nuke_model_class(Advert)
807
800
  ActiveRecord::Base.connection.execute("drop table `adverts`;")
808
801
 
802
+ if !defined?(SQLite3) && ActiveSupport::VERSION::MAJOR >= 5
803
+ class Advert < ActiveRecord::Base
804
+ def self.disable_auto_increment
805
+ true
806
+ end
807
+
808
+ fields do
809
+ description :text, limit: 250, null: true
810
+ end
811
+ end
812
+
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
824
+ end
825
+
809
826
  ## DSL
810
827
 
811
828
  # The DSL allows lambdas and constants
@@ -886,7 +903,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
886
903
  nuke_model_class(Advertiser)
887
904
  nuke_model_class(Affiliate)
888
905
  end
889
- end if !defined?(SQLite3) && ActiveRecord::VERSION::MAJOR >= 5
906
+ end if !defined?(SQLite3)
890
907
 
891
908
  describe 'serialize' do
892
909
  before do
@@ -1073,13 +1090,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1073
1090
  end
1074
1091
 
1075
1092
  context "for Rails #{ActiveSupport::VERSION::MAJOR}" do
1076
- if ActiveSupport::VERSION::MAJOR >= 5
1077
- let(:optional_true) { { optional: true } }
1078
- let(:optional_false) { { optional: false } }
1079
- else
1080
- let(:optional_true) { {} }
1081
- let(:optional_false) { {} }
1082
- end
1093
+ let(:optional_true) { { optional: true } }
1094
+ let(:optional_false) { { optional: false } }
1083
1095
  let(:optional_flag) { { false => optional_false, true => optional_true } }
1084
1096
 
1085
1097
  describe 'belongs_to' do
@@ -1179,36 +1191,30 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1179
1191
  migration_content = File.read(migrations.first)
1180
1192
  first_line = migration_content.split("\n").first
1181
1193
  base_class = first_line.split(' < ').last
1182
- 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])")
1183
1195
  end
1184
1196
  end
1185
1197
 
1186
1198
  context 'Does not generate migrations' do
1187
1199
  it 'for aliased fields bigint -> integer limit 8' do
1188
- if ActiveSupport::VERSION::MAJOR >= 5 || !ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/)
1189
- class Advert < active_record_base_class.constantize
1190
- fields do
1191
- price :bigint
1192
- end
1200
+ class Advert < active_record_base_class.constantize
1201
+ fields do
1202
+ price :bigint
1193
1203
  end
1204
+ end
1194
1205
 
1195
- generate_migrations '-n', '-m'
1196
-
1197
- migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
1198
- expect(migrations.size).to eq(1), migrations.inspect
1206
+ generate_migrations '-n', '-m'
1199
1207
 
1200
- if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR < 5
1201
- ActiveRecord::Base.connection.execute("ALTER TABLE adverts ADD PRIMARY KEY (id)")
1202
- end
1208
+ migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
1209
+ expect(migrations.size).to eq(1), migrations.inspect
1203
1210
 
1204
- class Advert < active_record_base_class.constantize
1205
- fields do
1206
- price :integer, limit: 8
1207
- end
1211
+ class Advert < active_record_base_class.constantize
1212
+ fields do
1213
+ price :integer, limit: 8
1208
1214
  end
1209
-
1210
- expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
1211
1215
  end
1216
+
1217
+ expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
1212
1218
  end
1213
1219
  end
1214
1220
  end
@@ -1250,16 +1256,6 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1250
1256
  ActiveRecord::Migration.class_eval(up)
1251
1257
  expect(Advert.columns.map(&:name)).to eq(["id", "name"])
1252
1258
 
1253
- if ActiveSupport::VERSION::MAJOR < 5
1254
- # Rails 4 drivers don't always create PK properly. Fix that by dropping and recreating.
1255
- ActiveRecord::Base.connection.execute("drop table adverts")
1256
- if defined?(Mysql2)
1257
- ActiveRecord::Base.connection.execute("CREATE TABLE adverts (id integer PRIMARY KEY AUTO_INCREMENT NOT NULL, name varchar(250)) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin")
1258
- else
1259
- ActiveRecord::Base.connection.execute("CREATE TABLE adverts (id integer PRIMARY KEY AUTOINCREMENT NOT NULL, name varchar(250))")
1260
- end
1261
- end
1262
-
1263
1259
  class Advert < ActiveRecord::Base
1264
1260
  declare_schema do
1265
1261
  string :name, limit: 250, null: true
@@ -2046,7 +2042,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2046
2042
  nuke_model_class(Advertiser)
2047
2043
  nuke_model_class(Affiliate)
2048
2044
  end
2049
- end if !defined?(SQLite3) && ActiveRecord::VERSION::MAJOR >= 5
2045
+ end if !defined?(SQLite3)
2050
2046
 
2051
2047
  describe 'serialize' do
2052
2048
  before do
@@ -2233,13 +2229,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2233
2229
  end
2234
2230
 
2235
2231
  context "for Rails #{ActiveSupport::VERSION::MAJOR}" do
2236
- if ActiveSupport::VERSION::MAJOR >= 5
2237
- let(:optional_true) { { optional: true } }
2238
- let(:optional_false) { { optional: false } }
2239
- else
2240
- let(:optional_true) { {} }
2241
- let(:optional_false) { {} }
2242
- end
2232
+ let(:optional_true) { { optional: true } }
2233
+ let(:optional_false) { { optional: false } }
2243
2234
  let(:optional_flag) { { false => optional_false, true => optional_true } }
2244
2235
 
2245
2236
  describe 'belongs_to' do
@@ -2348,9 +2339,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2348
2339
  end
2349
2340
  class Fk < ActiveRecord::Base
2350
2341
  declare_schema { }
2351
- belongs_to :id_default, (ActiveSupport::VERSION::MAJOR < 5 ? { constraint: false } : {})
2352
- belongs_to :id4, (ActiveSupport::VERSION::MAJOR < 5 ? { constraint: false } : {})
2353
- belongs_to :id8, (ActiveSupport::VERSION::MAJOR < 5 ? { constraint: false } : {})
2342
+ belongs_to :id_default, ({})
2343
+ belongs_to :id4, ({})
2344
+ belongs_to :id8, ({})
2354
2345
  end
2355
2346
  end
2356
2347
 
@@ -2461,36 +2452,30 @@ RSpec.describe 'DeclareSchema Migration Generator' do
2461
2452
  migration_content = File.read(migrations.first)
2462
2453
  first_line = migration_content.split("\n").first
2463
2454
  base_class = first_line.split(' < ').last
2464
- 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])")
2465
2456
  end
2466
2457
  end
2467
2458
 
2468
2459
  context 'Does not generate migrations' do
2469
2460
  it 'for aliased fields bigint -> integer limit 8' do
2470
- if ActiveSupport::VERSION::MAJOR >= 5 || !ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/)
2471
- class Advert < active_record_base_class.constantize
2472
- declare_schema do
2473
- bigint :price
2474
- end
2461
+ class Advert < active_record_base_class.constantize
2462
+ declare_schema do
2463
+ bigint :price
2475
2464
  end
2465
+ end
2476
2466
 
2477
- generate_migrations '-n', '-m'
2478
-
2479
- migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
2480
- expect(migrations.size).to eq(1), migrations.inspect
2467
+ generate_migrations '-n', '-m'
2481
2468
 
2482
- if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR < 5
2483
- ActiveRecord::Base.connection.execute("ALTER TABLE adverts ADD PRIMARY KEY (id)")
2484
- end
2469
+ migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
2470
+ expect(migrations.size).to eq(1), migrations.inspect
2485
2471
 
2486
- class Advert < active_record_base_class.constantize
2487
- declare_schema do
2488
- integer :price, limit: 8
2489
- end
2472
+ class Advert < active_record_base_class.constantize
2473
+ declare_schema do
2474
+ integer :price, limit: 8
2490
2475
  end
2491
-
2492
- expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
2493
2476
  end
2477
+
2478
+ expect { generate_migrations '-n', '-g' }.to output("Database and models match -- nothing to change\n").to_stdout
2494
2479
  end
2495
2480
  end
2496
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.1
4
+ version: 0.14.2
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-02 00:00:00.000000000 Z
11
+ date: 2021-09-01 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
@@ -143,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
141
  - !ruby/object:Gem::Version
144
142
  version: 1.3.6
145
143
  requirements: []
146
- rubygems_version: 3.0.3
144
+ rubygems_version: 3.1.2
147
145
  signing_key:
148
146
  specification_version: 4
149
147
  summary: Database schema declaration and migration generator for Rails
@@ -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: "../"