ridgepole 0.7.0.beta18 → 0.7.0.beta19

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
  SHA1:
3
- metadata.gz: 7179716cf14a5382522a62ed4d93806ce547a10b
4
- data.tar.gz: ccce44bf2506174bb829aa0c4faa4c5742ff558c
3
+ metadata.gz: 3d69dc66de98a5b2e1b71adc21896d9cfb54a153
4
+ data.tar.gz: 30cfacc9b97bb51ac60172a06c6ac157469210a0
5
5
  SHA512:
6
- metadata.gz: 2084f496ee48ac860e23f05059df599c9dff978badf91c656982e446a774fc3bd1313d4c05c60f78910ef8aef24dc914a10231359e464687f344468ae54b003a
7
- data.tar.gz: e1b01b8c8292b090fd8be7724698deb344804f8befc345537d80cb830c0af66450cea7b656869d83ee1493df07f664726963e098660eb12eb5979e0223c3195e
6
+ metadata.gz: bc8cbc9963b3334d7848c07a31c294e35a5ca352a7420cf4f94733179330ba74180c00178a60a43806f6968f40e273b65f5f02338158d47a6af5a17b5aa77c41
7
+ data.tar.gz: 5bae656215f07994b3da071953e9c7f82e2c95e49ffe3147f5bacbf5159fe9add6c34a8d428bb014b06829daf64ff9d6015bf6287aa2ac08dd171b1609d475cb
data/README.md CHANGED
@@ -9,7 +9,7 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
9
9
  [![Build Status](https://travis-ci.org/winebarrel/ridgepole.svg?branch=0.6)](https://travis-ci.org/winebarrel/ridgepole)
10
10
  [![Coverage Status](https://coveralls.io/repos/github/winebarrel/ridgepole/badge.svg?branch=0.6)](https://coveralls.io/github/winebarrel/ridgepole?branch=0.6)
11
11
 
12
- [![Edge Version](https://img.shields.io/badge/edge_version-0.7.0.beta18-brightgreen.svg)](https://rubygems.org/gems/ridgepole/versions/0.7.0.beta18)
12
+ [![Edge Version](https://img.shields.io/badge/edge_version-0.7.0.beta19-brightgreen.svg)](https://rubygems.org/gems/ridgepole/versions/0.7.0.beta19)
13
13
  [![Build Status](https://travis-ci.org/winebarrel/ridgepole.svg?branch=0.7)](https://travis-ci.org/winebarrel/ridgepole)
14
14
  [![Coverage Status](https://coveralls.io/repos/github/winebarrel/ridgepole/badge.svg?branch=0.7)](https://coveralls.io/github/winebarrel/ridgepole?branch=0.7)
15
15
 
@@ -391,6 +391,7 @@ bundle install
391
391
  bundle exec appraisal install
392
392
  bundle exec appraisal activerecord-5.1 rake
393
393
  # POSTGRESQL=1 bundle exec appraisal activerecord-5.1 rake
394
+ # MYSQL57=1 bundle exec appraisal activerecord-5.1 rake
394
395
  ```
395
396
 
396
397
  **Notice:** mysql-client/postgresql-client is required.
data/docker-compose.yml CHANGED
@@ -1,18 +1,18 @@
1
1
  mysql:
2
2
  image: "mysql:5.6"
3
3
  ports:
4
- - "3306:3306"
4
+ - "13316:3306"
5
5
  environment:
6
6
  MYSQL_ROOT_PASSWORD: password
7
7
  mysql57:
8
8
  image: "mysql:5.7"
9
9
  ports:
10
- - "3307:3306"
10
+ - "13317:3306"
11
11
  environment:
12
12
  MYSQL_ROOT_PASSWORD: password
13
13
  postgres:
14
14
  image: "postgres:9.5"
15
15
  ports:
16
- - "5432:5432"
16
+ - "15442:5432"
17
17
  environment:
18
18
  POSTGRES_PASSWORD: password
@@ -17,14 +17,6 @@ class Ridgepole::Client
17
17
  if @options[:mysql_use_alter]
18
18
  require 'ridgepole/ext/abstract_mysql_adapter/use_alter_index'
19
19
  end
20
-
21
- if @options[:dump_with_default_fk_name]
22
- require 'ridgepole/ext/schema_dumper'
23
- end
24
-
25
- if @options[:dump_without_table_options]
26
- require 'ridgepole/ext/abstract_mysql_adapter/disable_table_options'
27
- end
28
20
  end
29
21
 
30
22
  def dump(&block)
@@ -38,6 +30,9 @@ class Ridgepole::Client
38
30
 
39
31
  logger.verbose_info('# Parse DSL')
40
32
  expected_definition, expected_execute = @parser.parse(dsl, opts)
33
+ expected_definition.each do |table, definition|
34
+ definition[:options][:options] ||= @options[:table_options] if @options[:table_options]
35
+ end
41
36
  logger.verbose_info('# Load tables')
42
37
  current_definition, _current_execute = @parser.parse(@dumper.dump, opts)
43
38
  logger.verbose_info('# Compare definitions')
@@ -218,7 +218,6 @@ class Ridgepole::Delta
218
218
 
219
219
  def append_create_table(table_name, attrs, buf, post_buf_for_fk)
220
220
  options = attrs[:options] || {}
221
- options[:options] ||= @options[:table_options] if @options[:table_options]
222
221
  definition = attrs[:definition] || {}
223
222
  indices = attrs[:indices] || {}
224
223
 
@@ -4,7 +4,6 @@ class Ridgepole::Dumper
4
4
  end
5
5
 
6
6
  def dump
7
- stream = StringIO.new
8
7
  conn = ActiveRecord::Base.connection
9
8
  target_tables = @options[:tables]
10
9
  ignore_tables = @options[:ignore_tables]
@@ -24,7 +23,7 @@ class Ridgepole::Dumper
24
23
  end
25
24
  end
26
25
 
27
- ActiveRecord::SchemaDumper.dump(conn, stream)
26
+ stream = dump_from(conn)
28
27
 
29
28
  if target_tables or ignore_tables
30
29
  ActiveRecord::SchemaDumper.ignore_tables.clear
@@ -80,4 +79,14 @@ class Ridgepole::Dumper
80
79
  def target?(table_name)
81
80
  not @options[:tables] or @options[:tables].include?(table_name)
82
81
  end
82
+
83
+ def dump_from(conn)
84
+ stream = StringIO.new
85
+ conn.without_table_options(@options[:dump_without_table_options]) do
86
+ ActiveRecord::SchemaDumper.with_default_fk_name(@options[:dump_with_default_fk_name]) do
87
+ ActiveRecord::SchemaDumper.dump(conn, stream)
88
+ end
89
+ end
90
+ stream
91
+ end
83
92
  end
@@ -0,0 +1,32 @@
1
+ require 'active_record/connection_adapters/abstract_adapter'
2
+
3
+ module Ridgepole
4
+ module Ext
5
+ module AbstractAdapter
6
+ module DisableTableOptions
7
+ def without_table_options(value)
8
+ @__without_table_options = value
9
+ yield
10
+ ensure
11
+ remove_instance_variable(:@__without_table_options)
12
+ end
13
+
14
+ def table_options(table_name)
15
+ options = super
16
+ options.delete(:options) if options && @__without_table_options
17
+ options
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ module ActiveRecord
25
+ module ConnectionAdapters
26
+ class AbstractAdapter
27
+ def self.inherited(subclass)
28
+ subclass.prepend Ridgepole::Ext::AbstractAdapter::DisableTableOptions
29
+ end
30
+ end
31
+ end
32
+ end
@@ -3,7 +3,24 @@ require 'active_record/schema_dumper'
3
3
  module Ridgepole
4
4
  module Ext
5
5
  module SchemaDumper
6
+ def self.prepended(klass)
7
+ klass.extend ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ attr_reader :__with_default_fk_name
12
+
13
+ def with_default_fk_name(value)
14
+ @__with_default_fk_name = value
15
+ yield
16
+ ensure
17
+ remove_instance_variable(:@__with_default_fk_name)
18
+ end
19
+ end
20
+
6
21
  def foreign_keys(table, stream)
22
+ return super unless self.class.__with_default_fk_name
23
+
7
24
  if (foreign_keys = @connection.foreign_keys(table)).any?
8
25
  add_foreign_key_statements = foreign_keys.map do |foreign_key|
9
26
  parts = [
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.7.0.beta18'
2
+ VERSION = '0.7.0.beta19'
3
3
  end
data/lib/ridgepole.rb CHANGED
@@ -13,7 +13,9 @@ require 'diffy'
13
13
 
14
14
  module Ridgepole; end
15
15
 
16
+ require 'ridgepole/ext/abstract_adapter/disable_table_options'
16
17
  require 'ridgepole/ext/pp_sort_hash'
18
+ require 'ridgepole/ext/schema_dumper'
17
19
  require 'ridgepole/client'
18
20
  require 'ridgepole/connection_adapters'
19
21
  require 'ridgepole/default_limit'
@@ -0,0 +1,40 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ before { subject.diff(actual_dsl).migrate }
3
+ subject { client(:table_options => table_options, :dump_without_table_options => false) }
4
+
5
+ let(:warning_regexp) { /table options differ/ }
6
+
7
+ let(:actual_dsl) {
8
+ erbh(<<-EOS)
9
+ create_table "employees", primary_key: "emp_no", force: :cascade, options: 'ENGINE=InnoDB DEFAULT CHARSET=utf8' do |t|
10
+ end
11
+ EOS
12
+ }
13
+
14
+ let(:expected_dsl) {
15
+ erbh(<<-EOS)
16
+ create_table :employees, primary_key: :emp_no, force: :cascade do |t|
17
+ end
18
+ EOS
19
+ }
20
+
21
+ context 'when change options (no change)' do
22
+ let(:table_options) { 'ENGINE=InnoDB DEFAULT CHARSET=utf8' }
23
+
24
+ it {
25
+ expect(Ridgepole::Logger.instance).to_not receive(:warn).with(warning_regexp)
26
+ delta = subject.diff(expected_dsl)
27
+ expect(delta.differ?).to be_falsey
28
+ }
29
+ end
30
+
31
+ context 'when change options (change)' do
32
+ let(:table_options) { 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4' }
33
+
34
+ it {
35
+ expect(Ridgepole::Logger.instance).to receive(:warn).with(warning_regexp)
36
+ delta = subject.diff(expected_dsl)
37
+ expect(delta.differ?).to be_falsey
38
+ }
39
+ end
40
+ end
@@ -26,4 +26,32 @@ describe 'Ridgepole::Client#diff -> migrate' do
26
26
  EOS
27
27
  }
28
28
  end
29
+
30
+ context 'when create table (table definition options takes precedence)' do
31
+ let(:expected_dsl) {
32
+ <<-EOS
33
+ create_table "employee_clubs", force: :cascade, options: "ENGINE=InnoDB CHARSET=utf8mb4" do |t|
34
+ t.integer "emp_no", null: false, unsigned: true
35
+ t.integer "club_id", null: false, unsigned: true
36
+ end
37
+
38
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
39
+ EOS
40
+ }
41
+
42
+ subject { client(table_options: 'ENGINE=MyISAM CHARSET=utf8') }
43
+
44
+ it {
45
+ delta = subject.diff(expected_dsl)
46
+ expect(delta.differ?).to be_truthy
47
+
48
+ expect(delta.script).to match_fuzzy <<-EOS
49
+ create_table("employee_clubs", {:options=>"ENGINE=InnoDB CHARSET=utf8mb4"}) do |t|
50
+ t.column("emp_no", :"integer", {:null=>false, :unsigned=>true, :limit=>4})
51
+ t.column("club_id", :"integer", {:null=>false, :unsigned=>true, :limit=>4})
52
+ end
53
+ add_index("employee_clubs", ["emp_no", "club_id"], {:name=>"idx_emp_no_club_id", :using=>:btree})
54
+ EOS
55
+ }
56
+ end
29
57
  end
@@ -31,7 +31,6 @@ describe 'Ridgepole::Client#diff -> migrate' do
31
31
 
32
32
  it {
33
33
  delta = subject.diff(expected_dsl)
34
- puts delta.script
35
34
  expect(delta.differ?).to be_falsey
36
35
  }
37
36
  end
data/spec/spec_const.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  TEST_MYSQL_HOST = '127.0.0.1'
2
- TEST_MYSQL_PORT = ENV['MYSQL57'] == '1' ? 3307 : 3306
2
+ TEST_MYSQL_PORT = ENV['MYSQL57'] == '1' ? 13317 : 13316
3
3
  TEST_MYSQL_USER = 'root'
4
4
  TEST_MYSQL_PASS = 'password'
5
5
 
6
6
  MYSQL_CLI = "mysql -h #{TEST_MYSQL_HOST} -P #{TEST_MYSQL_PORT} -u #{TEST_MYSQL_USER} -p#{TEST_MYSQL_PASS} 2>/dev/null"
7
7
 
8
8
  TEST_PG_HOST = '127.0.0.1'
9
- TEST_PG_PORT = 5432
9
+ TEST_PG_PORT = 15442
10
10
  TEST_PG_USER = 'postgres'
11
11
  TEST_PG_PASS = 'password'
12
12
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridgepole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0.beta18
4
+ version: 0.7.0.beta19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-02 00:00:00.000000000 Z
11
+ date: 2017-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -231,7 +231,7 @@ files:
231
231
  - lib/ridgepole/dsl_parser/table_definition.rb
232
232
  - lib/ridgepole/dumper.rb
233
233
  - lib/ridgepole/execute_expander.rb
234
- - lib/ridgepole/ext/abstract_mysql_adapter/disable_table_options.rb
234
+ - lib/ridgepole/ext/abstract_adapter/disable_table_options.rb
235
235
  - lib/ridgepole/ext/abstract_mysql_adapter/use_alter_index.rb
236
236
  - lib/ridgepole/ext/pp_sort_hash.rb
237
237
  - lib/ridgepole/ext/schema_dumper.rb
@@ -274,6 +274,7 @@ files:
274
274
  - spec/mysql/migrate/migrate_change_column5_spec.rb
275
275
  - spec/mysql/migrate/migrate_change_column6_spec.rb
276
276
  - spec/mysql/migrate/migrate_change_column7_spec.rb
277
+ - spec/mysql/migrate/migrate_change_column8_spec.rb
277
278
  - spec/mysql/migrate/migrate_change_column_default_spec.rb
278
279
  - spec/mysql/migrate/migrate_change_column_float_spec.rb
279
280
  - spec/mysql/migrate/migrate_change_column_spec.rb
@@ -420,6 +421,7 @@ test_files:
420
421
  - spec/mysql/migrate/migrate_change_column5_spec.rb
421
422
  - spec/mysql/migrate/migrate_change_column6_spec.rb
422
423
  - spec/mysql/migrate/migrate_change_column7_spec.rb
424
+ - spec/mysql/migrate/migrate_change_column8_spec.rb
423
425
  - spec/mysql/migrate/migrate_change_column_default_spec.rb
424
426
  - spec/mysql/migrate/migrate_change_column_float_spec.rb
425
427
  - spec/mysql/migrate/migrate_change_column_spec.rb
@@ -1,23 +0,0 @@
1
- require 'active_record/connection_adapters/abstract_mysql_adapter'
2
-
3
- module Ridgepole
4
- module Ext
5
- module AbstractMysqlAdapter
6
- module DisableTableOptions
7
- def table_options(table_name)
8
- options = super
9
- options.delete(:options)
10
- options
11
- end
12
- end
13
- end
14
- end
15
- end
16
-
17
- module ActiveRecord
18
- module ConnectionAdapters
19
- class AbstractMysqlAdapter
20
- prepend Ridgepole::Ext::AbstractMysqlAdapter::DisableTableOptions
21
- end
22
- end
23
- end