ridgepole 0.8.4 → 0.8.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +38 -4
- data/.travis.yml +5 -7
- data/README.md +13 -1
- data/bin/ridgepole +4 -2
- data/lib/ridgepole/cli/config.rb +5 -3
- data/lib/ridgepole/delta.rb +29 -22
- data/lib/ridgepole/diff.rb +13 -1
- data/lib/ridgepole/dsl_parser.rb +2 -1
- data/lib/ridgepole/dsl_parser/context.rb +5 -2
- data/lib/ridgepole/external_sql_executer.rb +1 -1
- data/lib/ridgepole/version.rb +1 -1
- data/spec/dsl_parser/context_spec.rb +16 -0
- data/spec/fixtures/for_require_relative_spec.rb +3 -0
- data/spec/mysql/cli/config_spec.rb +54 -1
- data/spec/mysql/cli/ridgepole_spec.rb +1 -0
- data/spec/mysql/collation/collation_spec.rb +6 -0
- data/spec/mysql/diff/diff2_spec.rb +3 -3
- data/spec/mysql/diff/diff_spec.rb +3 -3
- data/spec/mysql/fk/migrate_create_fk_spec.rb +27 -7
- data/spec/mysql/fk/migrate_drop_fk_spec.rb +1 -1
- data/spec/mysql/fk/migrate_fk_with_column_spec.rb +2 -2
- data/spec/mysql/migrate/migrate_add_column_spec.rb +5 -5
- data/spec/mysql/migrate/migrate_change_column8_spec.rb +1 -1
- data/spec/mysql/migrate/migrate_change_column_spec.rb +5 -5
- data/spec/mysql/migrate/migrate_change_index_spec.rb +9 -9
- data/spec/mysql/migrate/migrate_change_table_comment_spec.rb +1 -1
- data/spec/mysql/migrate/migrate_change_table_option_spec.rb +1 -1
- data/spec/mysql/migrate/migrate_create_index_spec.rb +6 -6
- data/spec/mysql/migrate/migrate_create_table_with_index_spec.rb +7 -7
- data/spec/mysql/migrate/migrate_create_table_with_options_spec.rb +8 -8
- data/spec/mysql/migrate/migrate_drop_column_and_index_spec.rb +4 -4
- data/spec/mysql/migrate/migrate_drop_column_spec.rb +3 -3
- data/spec/mysql/migrate/migrate_drop_index_spec.rb +6 -6
- data/spec/mysql/migrate/migrate_rename_column_spec.rb +3 -3
- data/spec/mysql/migrate/migrate_script_error_spec.rb +1 -1
- data/spec/mysql/text_blob_types/text_blob_types_spec.rb +4 -1
- data/spec/mysql/~default_name_fk/migrate_create_fk_spec.rb +1 -1
- data/spec/mysql/~default_name_fk/migrate_drop_fk_spec.rb +1 -1
- data/spec/mysql/~dump_auto_increment/migrate_create_table_with_index_spec.rb +7 -7
- data/spec/postgresql/diff/diff_spec.rb +2 -2
- data/spec/postgresql/fk/migrate_create_fk_spec.rb +2 -2
- data/spec/postgresql/fk/migrate_drop_fk_spec.rb +1 -1
- data/spec/postgresql/migrate/migrate_add_column_spec.rb +5 -5
- data/spec/postgresql/migrate/migrate_change_column_spec.rb +4 -4
- data/spec/postgresql/migrate/migrate_change_index_spec.rb +9 -9
- data/spec/postgresql/migrate/migrate_drop_column_spec.rb +3 -3
- data/spec/postgresql/migrate/migrate_drop_column_with_index_spec.rb +5 -5
- data/spec/postgresql/migrate/migrate_drop_expression_index_spec.rb +1 -1
- data/spec/postgresql/migrate/migrate_drop_index_spec.rb +6 -6
- data/spec/postgresql/migrate/migrate_rename_column_spec.rb +2 -2
- data/spec/postgresql/~default_name_fk/migrate_create_fk_spec.rb +1 -1
- data/spec/postgresql/~default_name_fk/migrate_drop_fk_spec.rb +1 -1
- data/spec/spec_condition.rb +0 -4
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4a820687bccfcbcfaa3290b28536a0ea3599d32a35a16e897f37a20a4e1ef75
|
4
|
+
data.tar.gz: c25c8a48b003aa297f7b1a979f609898b776c3393628d42c2dc2a0897d87be0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d58fae0cd35607eb2980be9600b0d31b04605c559445932d7f73ab7cec066267bb45da5ef783c0ab577fec2272f664214afd190d088c1976f299fcfb30a6c54a
|
7
|
+
data.tar.gz: 498c6a55c4d7480a7ac019e58ddc63a8212961bda3d587f9d30d860be1d04d8a8f33e5bcbac72044d759919a3abba46f36750cc4cf2bcd44b87d4af352f7318d
|
data/.rubocop.yml
CHANGED
@@ -6,7 +6,7 @@ AllCops:
|
|
6
6
|
Bundler/OrderedGems:
|
7
7
|
Include:
|
8
8
|
- 'Appraisals'
|
9
|
-
Layout/
|
9
|
+
Layout/HeredocIndentation:
|
10
10
|
Enabled: false
|
11
11
|
Metrics/AbcSize:
|
12
12
|
Enabled: false
|
@@ -18,7 +18,7 @@ Metrics/ClassLength:
|
|
18
18
|
Enabled: false
|
19
19
|
Metrics/CyclomaticComplexity:
|
20
20
|
Enabled: false
|
21
|
-
|
21
|
+
Layout/LineLength:
|
22
22
|
Enabled: false
|
23
23
|
Metrics/MethodLength:
|
24
24
|
Enabled: false
|
@@ -30,8 +30,6 @@ Style/Documentation:
|
|
30
30
|
Enabled: false
|
31
31
|
Style/GuardClause:
|
32
32
|
Enabled: false
|
33
|
-
Style/MethodMissingSuper:
|
34
|
-
Enabled: false
|
35
33
|
Style/MixinUsage:
|
36
34
|
Exclude:
|
37
35
|
- 'spec/**/*'
|
@@ -41,3 +39,39 @@ Layout/ClosingHeredocIndentation:
|
|
41
39
|
Enabled: false
|
42
40
|
Style/NumericPredicate:
|
43
41
|
Enabled: false
|
42
|
+
Layout/EmptyLinesAroundAttributeAccessor:
|
43
|
+
Enabled: true
|
44
|
+
Layout/SpaceAroundMethodCallOperator:
|
45
|
+
Enabled: true
|
46
|
+
Lint/DeprecatedOpenSSLConstant:
|
47
|
+
Enabled: true
|
48
|
+
Lint/MissingSuper:
|
49
|
+
Enabled: false
|
50
|
+
Lint/MixedRegexpCaptureTypes:
|
51
|
+
Enabled: true
|
52
|
+
Lint/RaiseException:
|
53
|
+
Enabled: true
|
54
|
+
Lint/StructNewOverride:
|
55
|
+
Enabled: true
|
56
|
+
Style/AccessorGrouping:
|
57
|
+
Enabled: true
|
58
|
+
Style/BisectedAttrAccessor:
|
59
|
+
Enabled: true
|
60
|
+
Style/ExponentialNotation:
|
61
|
+
Enabled: true
|
62
|
+
Style/HashEachMethods:
|
63
|
+
Enabled: true
|
64
|
+
Style/HashTransformKeys:
|
65
|
+
Enabled: true
|
66
|
+
Style/HashTransformValues:
|
67
|
+
Enabled: true
|
68
|
+
Style/RedundantAssignment:
|
69
|
+
Enabled: true
|
70
|
+
Style/RedundantFetchBlock:
|
71
|
+
Enabled: true
|
72
|
+
Style/RedundantRegexpCharacterClass:
|
73
|
+
Enabled: true
|
74
|
+
Style/RedundantRegexpEscape:
|
75
|
+
Enabled: true
|
76
|
+
Style/SlicingWithRange:
|
77
|
+
Enabled: true
|
data/.travis.yml
CHANGED
@@ -4,11 +4,11 @@ group: edge
|
|
4
4
|
language: ruby
|
5
5
|
cache:
|
6
6
|
- bundler
|
7
|
-
- apt
|
8
7
|
rvm:
|
9
|
-
- 2.4.
|
10
|
-
- 2.5.
|
11
|
-
- 2.6.
|
8
|
+
- 2.4.9
|
9
|
+
- 2.5.7
|
10
|
+
- 2.6.5
|
11
|
+
- 2.7.1
|
12
12
|
before_script:
|
13
13
|
- sudo service mysql stop
|
14
14
|
- sudo service postgresql stop
|
@@ -41,7 +41,5 @@ addons:
|
|
41
41
|
- postgresql-client-9.4
|
42
42
|
matrix:
|
43
43
|
exclude:
|
44
|
-
- rvm: 2.
|
45
|
-
gemfile: gemfiles/activerecord_6.0.gemfile
|
46
|
-
- rvm: 2.4.6
|
44
|
+
- rvm: 2.4.9
|
47
45
|
gemfile: gemfiles/activerecord_6.0.gemfile
|
data/README.md
CHANGED
@@ -109,6 +109,17 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
|
|
109
109
|
* Fix "topological sort failed" error ([pull#287](https://github.com/winebarrel/ridgepole/pull/287))
|
110
110
|
* `>= 0.8.4`
|
111
111
|
* Display a warning if an InnoDB table doesn't have any indexes on a column where it has a foreign key ([pull#290](https://github.com/winebarrel/ridgepole/pull/290))
|
112
|
+
* `>= 0.8.5`
|
113
|
+
* Improve warning message on table options ([pull#291](https://github.com/winebarrel/ridgepole/pull/291))
|
114
|
+
* `>= 0.8.6`
|
115
|
+
* Support multiple databases feature ([pull#297](https://github.com/winebarrel/ridgepole/pull/297))
|
116
|
+
* `>= 0.8.7`
|
117
|
+
* Support `require_relative` ([pull#298](https://github.com/winebarrel/ridgepole/pull/298))
|
118
|
+
* `>= 0.8.8`
|
119
|
+
* Fix keyword arguments warnings in Ruby 2.7 ([pull#303](https://github.com/winebarrel/ridgepole/pull/303))
|
120
|
+
* `>= 0.8.9`
|
121
|
+
* Fix unexpected differences on text types and blob types on Rails 6 ([pull#306](https://github.com/winebarrel/ridgepole/pull/306))
|
122
|
+
* Fix unexpected warning when a foreign key is added on the primary key ([pull#307](https://github.com/winebarrel/ridgepole/pull/307))
|
112
123
|
</details>
|
113
124
|
|
114
125
|
## Installation
|
@@ -150,6 +161,7 @@ sudo /opt/ridgepole/embedded/bin/gem install mysql2
|
|
150
161
|
Usage: ridgepole [options]
|
151
162
|
-c, --config CONF_OR_FILE
|
152
163
|
-E, --env ENVIRONMENT
|
164
|
+
-s, --spec-name SPEC_NAME
|
153
165
|
-a, --apply
|
154
166
|
-m, --merge
|
155
167
|
-f, --file SCHEMAFILE
|
@@ -186,6 +198,7 @@ Usage: ridgepole [options]
|
|
186
198
|
--ignore-table-comment
|
187
199
|
--skip-column-comment-change
|
188
200
|
--create-table-with-index
|
201
|
+
--allow-pk-change
|
189
202
|
--mysql-dump-auto-increment
|
190
203
|
-r, --require LIBS
|
191
204
|
--log-file LOG_FILE
|
@@ -302,7 +315,6 @@ end
|
|
302
315
|
```
|
303
316
|
|
304
317
|
## Collation/Charset
|
305
|
-
You can use the column collation by passing `--enable-mysql-awesome` ([activerecord-mysql-awesome](https://github.com/kamipo/activerecord-mysql-awesome) is required)
|
306
318
|
|
307
319
|
```ruby
|
308
320
|
create_table "articles", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
|
data/bin/ridgepole
CHANGED
@@ -38,6 +38,7 @@ split = false
|
|
38
38
|
diff_files = nil
|
39
39
|
diff_with_apply = false
|
40
40
|
exit_code = 0
|
41
|
+
spec_name = ''
|
41
42
|
|
42
43
|
options = {
|
43
44
|
dry_run: false,
|
@@ -76,6 +77,7 @@ ARGV.options do |opt|
|
|
76
77
|
begin
|
77
78
|
opt.on('-c', '--config CONF_OR_FILE') { |v| config = v }
|
78
79
|
opt.on('-E', '--env ENVIRONMENT') { |v| env = v }
|
80
|
+
opt.on('-s', '--spec-name SPEC_NAME') { |v| spec_name = v }
|
79
81
|
opt.on('-a', '--apply') { set_mode[:apply] }
|
80
82
|
opt.on('-m', '--merge') do
|
81
83
|
set_mode[:apply]
|
@@ -168,7 +170,7 @@ begin
|
|
168
170
|
logger = Ridgepole::Logger.instance
|
169
171
|
logger.debug = options[:debug]
|
170
172
|
|
171
|
-
client = Ridgepole::Client.new(Ridgepole::Config.load(config, env), options) if config
|
173
|
+
client = Ridgepole::Client.new(Ridgepole::Config.load(config, env, spec_name), options) if config
|
172
174
|
|
173
175
|
ActiveRecord::Base.logger = logger
|
174
176
|
ActiveSupport::LogSubscriber.colorize_logging = options[:color]
|
@@ -247,7 +249,7 @@ begin
|
|
247
249
|
file_ext = File.extname(diff_file)
|
248
250
|
|
249
251
|
if %w[.yml .yaml].include?(file_ext)
|
250
|
-
Ridgepole::Config.load(diff_file, env)
|
252
|
+
Ridgepole::Config.load(diff_file, env, spec_name)
|
251
253
|
else
|
252
254
|
File.open(diff_file)
|
253
255
|
end
|
data/lib/ridgepole/cli/config.rb
CHANGED
@@ -6,7 +6,7 @@ require 'yaml'
|
|
6
6
|
module Ridgepole
|
7
7
|
class Config
|
8
8
|
class << self
|
9
|
-
def load(config, env = 'development')
|
9
|
+
def load(config, env = 'development', spec_name = '')
|
10
10
|
config = ENV.fetch(Regexp.last_match(1)) if config =~ /\Aenv:(.+)\z/
|
11
11
|
|
12
12
|
parsed_config = if File.exist?(config)
|
@@ -26,8 +26,10 @@ module Ridgepole
|
|
26
26
|
|
27
27
|
parsed_config = parse_database_url(config) unless parsed_config.is_a?(Hash)
|
28
28
|
|
29
|
-
if parsed_config.key?(env.to_s)
|
30
|
-
|
29
|
+
parsed_config = parsed_config.fetch(env.to_s) if parsed_config.key?(env.to_s)
|
30
|
+
|
31
|
+
if parsed_config.key?(spec_name.to_s)
|
32
|
+
parsed_config.fetch(spec_name.to_s)
|
31
33
|
else
|
32
34
|
parsed_config
|
33
35
|
end
|
data/lib/ridgepole/delta.rb
CHANGED
@@ -246,7 +246,7 @@ create_table(#{table_name.inspect}, #{inspect_options_include_default_proc(optio
|
|
246
246
|
end
|
247
247
|
|
248
248
|
buf.puts(<<-RUBY)
|
249
|
-
|
249
|
+
end
|
250
250
|
RUBY
|
251
251
|
|
252
252
|
if !(@options[:create_table_with_index]) && !indices.empty?
|
@@ -326,7 +326,7 @@ execute "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(table_name
|
|
326
326
|
end
|
327
327
|
|
328
328
|
def append_change_table(table_name, buf)
|
329
|
-
buf.puts "change_table(#{table_name.inspect},
|
329
|
+
buf.puts "change_table(#{table_name.inspect}, bulk: true) do |t|" if @options[:bulk_change]
|
330
330
|
yield
|
331
331
|
buf.puts 'end' if @options[:bulk_change]
|
332
332
|
end
|
@@ -429,11 +429,11 @@ remove_column(#{table_name.inspect}, #{column_name.inspect})
|
|
429
429
|
|
430
430
|
if force_bulk_change || @options[:bulk_change]
|
431
431
|
buf.puts(<<-RUBY)
|
432
|
-
t.index(#{column_name.inspect},
|
432
|
+
t.index(#{column_name.inspect}, **#{options.inspect})
|
433
433
|
RUBY
|
434
434
|
else
|
435
435
|
buf.puts(<<-RUBY)
|
436
|
-
add_index(#{table_name.inspect}, #{column_name.inspect},
|
436
|
+
add_index(#{table_name.inspect}, #{column_name.inspect}, **#{options.inspect})
|
437
437
|
RUBY
|
438
438
|
end
|
439
439
|
end
|
@@ -441,15 +441,20 @@ add_index(#{table_name.inspect}, #{column_name.inspect}, #{options.inspect})
|
|
441
441
|
def append_remove_index(table_name, _index_name, attrs, buf)
|
442
442
|
column_name = attrs.fetch(:column_name)
|
443
443
|
options = attrs[:options] || {}
|
444
|
-
target =
|
444
|
+
target =
|
445
|
+
if options[:name]
|
446
|
+
"name: #{options[:name].inspect}"
|
447
|
+
else
|
448
|
+
column_name.inspect
|
449
|
+
end
|
445
450
|
|
446
451
|
if @options[:bulk_change]
|
447
452
|
buf.puts(<<-RUBY)
|
448
|
-
t.remove_index(#{target
|
453
|
+
t.remove_index(#{target})
|
449
454
|
RUBY
|
450
455
|
else
|
451
456
|
buf.puts(<<-RUBY)
|
452
|
-
remove_index(#{table_name.inspect}, #{target
|
457
|
+
remove_index(#{table_name.inspect}, #{target})
|
453
458
|
RUBY
|
454
459
|
end
|
455
460
|
end
|
@@ -469,7 +474,7 @@ remove_index(#{table_name.inspect}, #{target.inspect})
|
|
469
474
|
attrs_options = attrs[:options] || {}
|
470
475
|
|
471
476
|
buf.puts(<<-RUBY)
|
472
|
-
add_foreign_key(#{table_name.inspect}, #{to_table.inspect},
|
477
|
+
add_foreign_key(#{table_name.inspect}, #{to_table.inspect}, **#{attrs_options.inspect})
|
473
478
|
RUBY
|
474
479
|
end
|
475
480
|
|
@@ -478,13 +483,13 @@ add_foreign_key(#{table_name.inspect}, #{to_table.inspect}, #{attrs_options.insp
|
|
478
483
|
fk_name = attrs_options[:name]
|
479
484
|
|
480
485
|
target = if fk_name
|
481
|
-
|
486
|
+
"name: #{fk_name.inspect}"
|
482
487
|
else
|
483
|
-
attrs.fetch(:to_table)
|
488
|
+
attrs.fetch(:to_table).inspect
|
484
489
|
end
|
485
490
|
|
486
491
|
buf.puts(<<-RUBY)
|
487
|
-
remove_foreign_key(#{table_name.inspect}, #{target
|
492
|
+
remove_foreign_key(#{table_name.inspect}, #{target})
|
488
493
|
RUBY
|
489
494
|
end
|
490
495
|
|
@@ -500,17 +505,19 @@ remove_foreign_key(#{table_name.inspect}, #{target.inspect})
|
|
500
505
|
def inspect_options_include_default_proc(options)
|
501
506
|
options = options.dup
|
502
507
|
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
508
|
+
kwargs =
|
509
|
+
if options[:default].is_a?(Proc)
|
510
|
+
proc_default = options.delete(:default)
|
511
|
+
proc_default = ":default=>proc{#{proc_default.call.inspect}}"
|
512
|
+
options_inspect = options.inspect
|
513
|
+
options_inspect.sub!(/\}\z/, '')
|
514
|
+
options_inspect << ', ' if options_inspect !~ /\{\z/
|
515
|
+
options_inspect << proc_default << '}'
|
516
|
+
options_inspect
|
517
|
+
else
|
518
|
+
options.inspect
|
519
|
+
end
|
520
|
+
"**#{kwargs}"
|
514
521
|
end
|
515
522
|
end
|
516
523
|
end
|
data/lib/ridgepole/diff.rb
CHANGED
@@ -169,7 +169,7 @@ module Ridgepole
|
|
169
169
|
|
170
170
|
unless from == to
|
171
171
|
@logger.warn(<<-MSG)
|
172
|
-
[WARNING]
|
172
|
+
[WARNING] Table option changes are ignored on `#{table_name}`.
|
173
173
|
from: #{from}
|
174
174
|
to: #{to}
|
175
175
|
MSG
|
@@ -386,6 +386,18 @@ module Ridgepole
|
|
386
386
|
attrs[:type] = :bigint
|
387
387
|
opts.delete(:limit)
|
388
388
|
end
|
389
|
+
|
390
|
+
if opts[:size] && (attrs[:type] == :text || attrs[:type] == :blob || attrs[:type] == :binary)
|
391
|
+
case opts.delete(:size)
|
392
|
+
when :tiny
|
393
|
+
attrs[:type] = :blob if attrs[:type] == :binary
|
394
|
+
opts[:limit] = 255
|
395
|
+
when :medium
|
396
|
+
opts[:limit] = 16_777_215
|
397
|
+
when :long
|
398
|
+
opts[:limit] = 4_294_967_295
|
399
|
+
end
|
400
|
+
end
|
389
401
|
end
|
390
402
|
end
|
391
403
|
|
data/lib/ridgepole/dsl_parser.rb
CHANGED
@@ -37,10 +37,11 @@ module Ridgepole
|
|
37
37
|
attrs[:foreign_keys].each do |_, foreign_key_attrs|
|
38
38
|
fk_index = foreign_key_attrs[:options][:column] || "#{foreign_key_attrs[:to_table].singularize}_id"
|
39
39
|
next if attrs[:indices]&.any? { |_k, v| v[:column_name].first == fk_index }
|
40
|
+
next if attrs[:options][:primary_key] == fk_index
|
40
41
|
|
41
42
|
Ridgepole::Logger.instance.warn(<<-MSG)
|
42
43
|
[WARNING] Table `#{table_name}` has a foreign key on `#{fk_index}` column, but doesn't have any indexes on the column.
|
43
|
-
Although an index will be added automatically by InnoDB, please add an index explicitly
|
44
|
+
Although an index will be added automatically by InnoDB, please add an index explicitly before the next operation.
|
44
45
|
MSG
|
45
46
|
end
|
46
47
|
end
|
@@ -3,8 +3,7 @@
|
|
3
3
|
module Ridgepole
|
4
4
|
class DSLParser
|
5
5
|
class Context
|
6
|
-
attr_reader :__definition
|
7
|
-
attr_reader :__execute
|
6
|
+
attr_reader :__definition, :__execute
|
8
7
|
|
9
8
|
def initialize(opts = {})
|
10
9
|
@__working_dir = File.expand_path(opts[:path] ? File.dirname(opts[:path]) : Dir.pwd)
|
@@ -104,6 +103,10 @@ module Ridgepole
|
|
104
103
|
end
|
105
104
|
end
|
106
105
|
|
106
|
+
def require_relative(relative_path)
|
107
|
+
require(File.expand_path(relative_path, File.dirname(caller[0])))
|
108
|
+
end
|
109
|
+
|
107
110
|
def execute(sql, _name = nil, &cond)
|
108
111
|
@__execute << {
|
109
112
|
sql: sql,
|
data/lib/ridgepole/version.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe Ridgepole::DSLParser::Context do
|
4
|
+
describe '#require_relative' do
|
5
|
+
subject { context.require_relative(relative_path) }
|
6
|
+
|
7
|
+
let!(:context) do
|
8
|
+
Ridgepole::DSLParser::Context.new
|
9
|
+
end
|
10
|
+
let!(:relative_path) do
|
11
|
+
'../fixtures/for_require_relative_spec.rb'
|
12
|
+
end
|
13
|
+
|
14
|
+
it { is_expected.to be_truthy }
|
15
|
+
end
|
16
|
+
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
describe Ridgepole::Config do
|
4
|
-
subject { Ridgepole::Config.load(config, env) }
|
4
|
+
subject { Ridgepole::Config.load(config, env, spec_name) }
|
5
|
+
|
6
|
+
let(:spec_name) { '' }
|
5
7
|
|
6
8
|
context 'when passed toplevel yaml' do
|
7
9
|
let(:config) do
|
@@ -154,4 +156,55 @@ describe Ridgepole::Config do
|
|
154
156
|
expect(subject['port']).to eq 3307
|
155
157
|
}
|
156
158
|
end
|
159
|
+
|
160
|
+
context 'when passed rails database.yml multiple databases style yaml' do
|
161
|
+
let(:config) do
|
162
|
+
<<-YAML.strip_heredoc
|
163
|
+
development:
|
164
|
+
primary:
|
165
|
+
adapter: sqlspecifye
|
166
|
+
database: db/sample.db
|
167
|
+
production:
|
168
|
+
primary:
|
169
|
+
adapter: mysql2
|
170
|
+
encoding: utf8
|
171
|
+
database: blog
|
172
|
+
username: root
|
173
|
+
primary_replica:
|
174
|
+
adapter: mysql2
|
175
|
+
encoding: utf8
|
176
|
+
database: blog
|
177
|
+
username: readonly
|
178
|
+
YAML
|
179
|
+
end
|
180
|
+
|
181
|
+
context 'in development env with primary spec name' do
|
182
|
+
let(:env) { 'development' }
|
183
|
+
let(:spec_name) { 'primary' }
|
184
|
+
specify do
|
185
|
+
expect(subject['adapter']).to eq 'sqlspecifye'
|
186
|
+
expect(subject['database']).to eq 'db/sample.db'
|
187
|
+
expect(subject['username']).to be_nil
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context 'in production env with primary spec name' do
|
192
|
+
let(:env) { 'production' }
|
193
|
+
let(:spec_name) { 'primary' }
|
194
|
+
specify do
|
195
|
+
expect(subject['adapter']).to eq 'mysql2'
|
196
|
+
expect(subject['encoding']).to eq 'utf8'
|
197
|
+
expect(subject['database']).to eq 'blog'
|
198
|
+
expect(subject['username']).to eq 'root'
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
context 'in production env with primary_replica spec name' do
|
203
|
+
let(:env) { 'production' }
|
204
|
+
let(:spec_name) { 'primary_replica' }
|
205
|
+
specify do
|
206
|
+
expect(subject['username']).to eq 'readonly'
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
157
210
|
end
|