11require 'active_support/core_ext/hash'
22require 'enumerator'
3- require 'fastandand'
4- require 'its-it'
5- require 'key_struct'
63require 'pathname'
74require 'yaml'
8- require 'hash_keyword_args'
95
106module SchemaDev
117 CONFIG_FILE = "schema_dev.yml"
@@ -17,22 +13,21 @@ class Config
1713 def self . _reset ; @@config = nil end # for use by rspec
1814
1915 def self . read
20- new ( ( YAML . load Pathname . new ( CONFIG_FILE ) . read ) . symbolize_keys )
16+ new ( ** ( YAML . load Pathname . new ( CONFIG_FILE ) . read ) . symbolize_keys )
2117 end
2218
2319 def self . load
2420 @@config ||= read
2521 end
2622
27- def initialize ( opts = { } ) # once we no longer support ruby 1.9.3, can switch to native keyword args
28- opts = opts . keyword_args ( ruby : :required , activerecord : :required , db : :required , dbversions : nil , exclude : nil , notify : nil , quick : nil )
29- @ruby = Array . wrap ( opts . ruby )
30- @activerecord = Array . wrap ( opts . activerecord )
31- @db = Array . wrap ( opts . db )
32- @dbversions = ( opts . dbversions || { } ) . symbolize_keys
33- @exclude = Array . wrap ( opts . exclude ) . map ( &:symbolize_keys ) . map { |tuple | Tuple . new ( tuple ) }
34- @notify = Array . wrap ( opts . notify )
35- @quick = Array . wrap ( opts . quick || { ruby : @ruby . last , activerecord : @activerecord . last , db : @db . last } )
23+ def initialize ( ruby :, activerecord :, db :, dbversions : nil , exclude : nil , notify : nil , quick : nil )
24+ @ruby = Array . wrap ( ruby )
25+ @activerecord = Array . wrap ( activerecord )
26+ @db = Array . wrap ( db )
27+ @dbversions = ( dbversions || { } ) . symbolize_keys
28+ @exclude = Array . wrap ( exclude ) . map ( &:symbolize_keys ) . map { |tuple | Tuple . new ( **tuple ) }
29+ @notify = Array . wrap ( notify )
30+ @quick = Array . wrap ( quick || { ruby : @ruby . last , activerecord : @activerecord . last , db : @db . last } )
3631 end
3732
3833 def dbms
@@ -43,37 +38,36 @@ def dbms_versions_for(db, default = [])
4338 @dbversions . fetch ( db , default )
4439 end
4540
46- def matrix ( opts = { } ) # once we no longer support ruby 1.9.3, can switch to native keyword args
47- opts = opts . keyword_args ( quick : false , ruby : nil , activerecord : nil , db : nil , excluded : nil )
41+ def matrix ( quick : false , ruby : nil , activerecord : nil , db : nil , excluded : nil )
4842 use_ruby = @ruby
4943 use_activerecord = @activerecord
5044 use_db = @db
51- if opts . quick
45+ if quick
5246 use_ruby = @quick . map { |q | q [ :ruby ] }
5347 use_activerecord = @quick . map { |q | q [ :activerecord ] }
5448 use_db = @quick . map { |q | q [ :db ] }
5549 end
56- use_ruby = Array . wrap ( opts . ruby ) if opts . ruby
57- use_activerecord = Array . wrap ( opts . activerecord ) if opts . activerecord
58- use_db = Array . wrap ( opts . db ) if opts . db
50+ use_ruby = Array . wrap ( ruby ) if ruby
51+ use_activerecord = Array . wrap ( activerecord ) if activerecord
52+ use_db = Array . wrap ( db ) if db
5953
6054 use_ruby = [ nil ] unless use_ruby . any?
6155 use_activerecord = [ nil ] unless use_activerecord . any?
6256 use_db = [ nil ] unless use_db . any?
6357
6458 m = use_ruby . product ( use_activerecord , use_db )
6559 m = m . map { |_ruby , _activerecord , _db | Tuple . new ( ruby : _ruby , activerecord : _activerecord , db : _db ) } . compact
66- m = m . reject ( & it . match_any? ( @exclude ) ) unless opts . excluded == :none
60+ m = m . reject { | r | r . match_any? ( @exclude ) } unless excluded == :none
6761 m = m . map ( &:to_hash )
6862
69- if opts . excluded == :only
70- return matrix ( opts . merge ( excluded : :none ) ) - m
63+ if excluded == :only
64+ matrix ( quick : quick , ruby : ruby , activerecord : activerecord , db : db , excluded : :none ) - m
7165 else
72- return m
66+ m
7367 end
7468 end
7569
76- class Tuple < KeyStruct [ :ruby , :activerecord , :db ]
70+ Tuple = Struct . new ( :ruby , :activerecord , :db , keyword_init : true ) do
7771 def match? ( other )
7872 return false if self . ruby and other . ruby and self . ruby != other . ruby
7973 return false if self . activerecord and other . activerecord and self . activerecord != other . activerecord
@@ -86,9 +80,8 @@ def match_any?(others)
8680 end
8781
8882 def to_hash
89- super . reject { | k , val | val . nil? }
83+ to_h . compact
9084 end
9185 end
92-
9386 end
9487end
0 commit comments