ridgepole 0.6.5.beta7 → 0.6.5.beta8

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: 8bfdbdbe18ee81346ff1898576d11df4ab60a503
4
- data.tar.gz: 9b02af4d28f9c6ff7197c14f9a65bc895ec09e7e
3
+ metadata.gz: 8adb357a8559da5ebe42cc89f6e8916c2c387c39
4
+ data.tar.gz: f03ec0b86a0289241ebb64c42fa9eb0d3bdbdd6c
5
5
  SHA512:
6
- metadata.gz: 41c250fe64085736fb1358234bc6a62cfa13bed0c141b13628ed75d3fdd2aa2243d28e6661d3ba1807635f0d333f129456c13ad5c1f7dfb9a9afd019d4764bd2
7
- data.tar.gz: 3fd83db98c3e39b9a2e15b301da56fd38699a970dc79361975146d998e8bf050ccf3caf8cf279b9adf5c105025296a5e5fccf0c2432c4e2017c6e3e0c2d82f75
6
+ metadata.gz: ab0dd2cc1ad788f6728407421f9b77ea81f641f8d8ea7d665a6fef4e6123c2dbb59db72bcdb01192d12c338622db356f0b82edeaf24df0be3a6b922606e65b3b
7
+ data.tar.gz: 8fa5ba2e3478b9e83c3da2bb332452e717b57da509b54385de35c2ef6c6a4efe41d7de25b86155c15ed74ead0cc0be958f52bed291a635f8ce2c4c47c4a8fbaf
data/README.md CHANGED
@@ -55,6 +55,7 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
55
55
  * Support new types ([pull#84](https://github.com/winebarrel/ridgepole/pull/84))
56
56
  * Support `default: -> { ... }` ([pull#85](https://github.com/winebarrel/ridgepole/pull/85))
57
57
  * Support DDL Comment (Rails5 only)
58
+ * Output schema diff when `--version`
58
59
 
59
60
  ## Installation
60
61
 
data/lib/ridgepole.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'logger'
2
2
  require 'open3'
3
+ require 'pp'
3
4
  require 'shellwords'
4
5
  require 'singleton'
5
6
  require 'stringio'
@@ -8,6 +9,8 @@ require 'active_record'
8
9
  require 'active_support'
9
10
  require 'active_support/core_ext'
10
11
 
12
+ require 'diffy'
13
+
11
14
  module Ridgepole; end
12
15
 
13
16
  require 'ridgepole/client'
@@ -1,6 +1,7 @@
1
1
  class Ridgepole::Diff
2
2
  def initialize(options = {})
3
3
  @options = options
4
+ @logger = Ridgepole::Logger.instance
4
5
  end
5
6
 
6
7
  def diff(from, to, options = {})
@@ -20,6 +21,12 @@ class Ridgepole::Diff
20
21
  next unless target?(table_name)
21
22
 
22
23
  if (from_attrs = from.delete(table_name))
24
+ @logger.verbose_info("# #{table_name}")
25
+
26
+ unless (attrs_delta = diff_inspect(from_attrs, to_attrs)).empty?
27
+ @logger.verbose_info(attrs_delta)
28
+ end
29
+
23
30
  scan_change(table_name, from_attrs, to_attrs, delta)
24
31
  else
25
32
  delta[:add] ||= {}
@@ -358,4 +365,14 @@ class Ridgepole::Diff
358
365
 
359
366
  attrs1 == attrs2
360
367
  end
368
+
369
+ def diff_inspect(obj1, obj2, options = {})
370
+ diffy = Diffy::Diff.new(
371
+ obj1.pretty_inspect,
372
+ obj2.pretty_inspect,
373
+ :diff => '-u'
374
+ )
375
+
376
+ diffy.to_s(:text).gsub(/\s+\z/m, '')
377
+ end
361
378
  end
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.6.5.beta7'
2
+ VERSION = '0.6.5.beta8'
3
3
  end
data/ridgepole.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_dependency 'activerecord', '>= 4.2', '< 6'
22
+ spec.add_dependency 'diffy'
22
23
  spec.add_development_dependency 'bundler'
23
24
  spec.add_development_dependency 'rake'
24
25
  spec.add_development_dependency 'rspec', '>= 3.0.0'
@@ -0,0 +1,64 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'with verbose log' do
3
+ let(:actual_dsl) {
4
+ erbh(<<-EOS)
5
+ create_table "employees", primary_key: "emp_no", <%= i unsigned(true) + {force: :cascade} %> do |t|
6
+ t.date "birth_date", null: false
7
+ t.string "first_name", limit: 14, null: false
8
+ t.string "last_name", limit: 16, null: false
9
+ t.string "gender", limit: 1, null: false
10
+ t.date "hire_date", null: false
11
+ end
12
+ EOS
13
+ }
14
+
15
+ let(:expected_dsl) {
16
+ erbh(<<-EOS)
17
+ create_table "employees", primary_key: "emp_no", <%= i unsigned(true) + {force: :cascade} %> do |t|
18
+ t.date "birth_date", null: false
19
+ t.string "first_name", limit: 14, null: false
20
+ t.string "last_name", limit: 16, null: false
21
+ t.string "gender2", limit: 1, null: false
22
+ t.date "hire_date", null: false
23
+ end
24
+ EOS
25
+ }
26
+
27
+ before { subject.diff(actual_dsl).migrate }
28
+ subject { client }
29
+
30
+ it {
31
+ verbose_infos = []
32
+ allow(Ridgepole::Logger.instance).to receive(:verbose_info) {|m| verbose_infos << m }
33
+
34
+ Ridgepole::Logger.verbose = true
35
+ delta = subject.diff(expected_dsl)
36
+ expect(delta.differ?).to be_truthy
37
+ expect(subject.dump).to match_fuzzy actual_dsl
38
+ delta.migrate
39
+ expect(subject.dump).to match_fuzzy expected_dsl
40
+ Ridgepole::Logger.verbose = false
41
+
42
+ expected_verbose_infos = [
43
+ "# Parse DSL",
44
+ "# Load tables",
45
+ "# employees",
46
+ "# Compare definitions",
47
+ "# employees",
48
+ "# Load tables",
49
+ "# employees",
50
+ "# Load tables",
51
+ "# employees",
52
+ ]
53
+
54
+
55
+ if condition(:mysql_awesome_enabled)
56
+ expected_verbose_infos << " {\"birth_date\"=>{:type=>:date, :options=>{:null=>false}},\n \"first_name\"=>{:type=>:string, :options=>{:limit=>14, :null=>false}},\n \"last_name\"=>{:type=>:string, :options=>{:limit=>16, :null=>false}},\n- \"gender\"=>{:type=>:string, :options=>{:limit=>1, :null=>false}},\n+ \"gender2\"=>{:type=>:string, :options=>{:limit=>1, :null=>false}},\n \"hire_date\"=>{:type=>:date, :options=>{:null=>false}}},\n :options=>{:primary_key=>\"emp_no\", :unsigned=>true}}"
57
+ else
58
+ expected_verbose_infos << " {\"birth_date\"=>{:type=>:date, :options=>{:null=>false}},\n \"first_name\"=>{:type=>:string, :options=>{:limit=>14, :null=>false}},\n \"last_name\"=>{:type=>:string, :options=>{:limit=>16, :null=>false}},\n- \"gender\"=>{:type=>:string, :options=>{:limit=>1, :null=>false}},\n+ \"gender2\"=>{:type=>:string, :options=>{:limit=>1, :null=>false}},\n \"hire_date\"=>{:type=>:date, :options=>{:null=>false}}},\n :options=>{:primary_key=>\"emp_no\"}}"
59
+ end
60
+
61
+ expect(verbose_infos).to match_array expected_verbose_infos
62
+ }
63
+ end
64
+ end
@@ -0,0 +1,67 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when add bigint column' do
3
+ let(:actual_dsl) { '' }
4
+
5
+ let(:expected_dsl) {
6
+ if condition(:activerecord_5)
7
+ erbh(<<-EOS)
8
+ create_table "bigint_test", id: false, force: :cascade do |t|
9
+ t.bigint "b"
10
+ end
11
+ EOS
12
+ else
13
+ erbh(<<-EOS)
14
+ create_table "bigint_test", id: false, force: :cascade do |t|
15
+ t.integer "b", limit: 8
16
+ end
17
+ EOS
18
+ end
19
+ }
20
+
21
+ before { subject.diff(actual_dsl).migrate }
22
+ subject { client }
23
+
24
+ it {
25
+ delta = subject.diff(expected_dsl)
26
+ expect(delta.differ?).to be_truthy
27
+ delta.migrate
28
+ expect(subject.dump).to match_fuzzy expected_dsl
29
+ }
30
+ end
31
+
32
+ context 'when no change' do
33
+ let(:dsl) {
34
+ erbh(<<-EOS)
35
+ create_table "bigint_test", id: false, force: :cascade do |t|
36
+ t.bigint "b"
37
+ end
38
+ EOS
39
+ }
40
+
41
+ let(:expected_dsl) {
42
+ if condition(:activerecord_5)
43
+ erbh(<<-EOS)
44
+ create_table "bigint_test", id: false, force: :cascade do |t|
45
+ t.bigint "b"
46
+ end
47
+ EOS
48
+ else
49
+ erbh(<<-EOS)
50
+ create_table "bigint_test", id: false, force: :cascade do |t|
51
+ t.integer "b", limit: 8
52
+ end
53
+ EOS
54
+ end
55
+ }
56
+
57
+ before { subject.diff(dsl).migrate }
58
+ subject { client }
59
+
60
+ it {
61
+ delta = subject.diff(expected_dsl)
62
+ expect(delta.differ?).to be_falsey
63
+ delta.migrate
64
+ expect(subject.dump).to match_fuzzy expected_dsl
65
+ }
66
+ end
67
+ end
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.6.5.beta7
4
+ version: 0.6.5.beta8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-06 00:00:00.000000000 Z
11
+ date: 2016-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '6'
33
+ - !ruby/object:Gem::Dependency
34
+ name: diffy
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: bundler
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -289,6 +303,7 @@ files:
289
303
  - spec/mysql/migrate/migrate_with_ignore_tables_spec.rb
290
304
  - spec/mysql/migrate/migrate_with_pre_post_query_spec.rb
291
305
  - spec/mysql/migrate/migrate_with_tables_spec.rb
306
+ - spec/mysql/migrate/migrate_with_verbose_log_spec.rb
292
307
  - spec/mysql/migrate_/migrate_create_index_with_alter_spec.rb
293
308
  - spec/mysql/migrate_/migrate_drop_index_with_alter_spec.rb
294
309
  - spec/mysql/ridgepole_test_database.sql
@@ -303,6 +318,7 @@ files:
303
318
  - spec/postgresql/fk/migrate_create_fk_spec.rb
304
319
  - spec/postgresql/fk/migrate_drop_fk_spec.rb
305
320
  - spec/postgresql/migrate/migrate_add_column_spec.rb
321
+ - spec/postgresql/migrate/migrate_bigint_spec.rb
306
322
  - spec/postgresql/migrate/migrate_change_column_default_spec.rb
307
323
  - spec/postgresql/migrate/migrate_change_column_spec.rb
308
324
  - spec/postgresql/migrate/migrate_change_index_spec.rb
@@ -415,6 +431,7 @@ test_files:
415
431
  - spec/mysql/migrate/migrate_with_ignore_tables_spec.rb
416
432
  - spec/mysql/migrate/migrate_with_pre_post_query_spec.rb
417
433
  - spec/mysql/migrate/migrate_with_tables_spec.rb
434
+ - spec/mysql/migrate/migrate_with_verbose_log_spec.rb
418
435
  - spec/mysql/migrate_/migrate_create_index_with_alter_spec.rb
419
436
  - spec/mysql/migrate_/migrate_drop_index_with_alter_spec.rb
420
437
  - spec/mysql/ridgepole_test_database.sql
@@ -429,6 +446,7 @@ test_files:
429
446
  - spec/postgresql/fk/migrate_create_fk_spec.rb
430
447
  - spec/postgresql/fk/migrate_drop_fk_spec.rb
431
448
  - spec/postgresql/migrate/migrate_add_column_spec.rb
449
+ - spec/postgresql/migrate/migrate_bigint_spec.rb
432
450
  - spec/postgresql/migrate/migrate_change_column_default_spec.rb
433
451
  - spec/postgresql/migrate/migrate_change_column_spec.rb
434
452
  - spec/postgresql/migrate/migrate_change_index_spec.rb