Skip to content

Commit 5642276

Browse files
authored
Merge pull request #26 from SchemaPlus/feat-cleanup
Remove no longer needed gems and update code to be ruby 2.5+ compliant
2 parents 55dc43b + f116297 commit 5642276

8 files changed

Lines changed: 50 additions & 58 deletions

File tree

lib/schema_dev/config.rb

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
require 'active_support/core_ext/hash'
22
require 'enumerator'
3-
require 'fastandand'
4-
require 'its-it'
5-
require 'key_struct'
63
require 'pathname'
74
require 'yaml'
8-
require 'hash_keyword_args'
95

106
module 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
9487
end

lib/schema_dev/gem.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ def get_binding
4343
def self.schema_plus_core_version
4444
@core_version ||= begin
4545
gems = JSON.parse Faraday.get('https://rubygems.org/api/v1/versions/schema_plus_core.json').body
46-
gems.reject(&it["prerelease"]).sort_by(&it["number"].split('.')).last["number"]
46+
gems.reject { |e| e["prerelease"] }
47+
.sort_by { |e| e["number"].split('.') }
48+
.last["number"]
4749
end
4850
end
4951

@@ -163,7 +165,11 @@ def freshen
163165
def git_init
164166
Dir.chdir gem_name do
165167
system "git init"
166-
system "git add #{gem_root.find.select(&:exist?).reject(&it.basename.to_s == 'Gemfile.local').join(' ')}"
168+
add_param = gem_root.find
169+
.select(&:exist?)
170+
.reject { |e| e.basename.to_s == 'Gemfile.local' }
171+
.join(' ')
172+
system "git add #{add_param}"
167173
system "git commit -m 'Initial skeleton generated by `schema_dev gem #{gem_name}`'"
168174
end
169175
end

lib/schema_dev/gemfile_selector.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ module SchemaDev
66
module GemfileSelector
77
extend self
88

9-
def gemfile(opts = {})
10-
opts = opts.keyword_args(activerecord: :required, db: :required)
11-
Pathname.new(GEMFILES_DIR).join("activerecord-#{opts.activerecord}", "Gemfile.#{opts.db}")
9+
def gemfile(activerecord:, db:)
10+
Pathname.new(GEMFILES_DIR).join("activerecord-#{activerecord}", "Gemfile.#{db}")
1211
end
1312

14-
def command(opts={})
15-
opts = opts.keyword_args(activerecord: :required, db: :required)
16-
"BUNDLE_GEMFILE=#{gemfile(activerecord: opts.activerecord, db: opts.db)}"
13+
def command(activerecord:, db:)
14+
"BUNDLE_GEMFILE=#{gemfile(activerecord: activerecord, db: db)}"
1715
end
1816

1917
def infer_db

lib/schema_dev/readme.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def sub_matrix(lines)
2929
replace_block(lines, %r{^\s*<!-- SCHEMA_DEV: MATRIX}) do |contents|
3030
contents << "<!-- SCHEMA_DEV: MATRIX - begin -->\n"
3131
contents << "<!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->\n"
32-
self.matrix.group_by(&it.slice(:ruby, :activerecord)).each do |pair, items|
32+
self.matrix.group_by {|e| e.slice(:ruby, :activerecord) }.each do |pair, items|
3333
contents << "* ruby **#{pair[:ruby]}** with activerecord **#{pair[:activerecord]}**, using #{items.map{|item| "**#{item[:db]}**"}.to_sentence(last_word_connector: ' or ')}\n"
3434
end
3535
contents << "\n"
@@ -57,9 +57,9 @@ def sub_template(template, lines)
5757
end
5858

5959
def replace_block(lines, pattern)
60-
before = lines.take_while(&it !~ pattern)
60+
before = lines.take_while { |e| e !~ pattern }
6161
return lines if before == lines
62-
after = lines.reverse.take_while(&it !~ pattern).reverse
62+
after = lines.reverse.take_while { |e| e !~ pattern }.reverse
6363
contents = []
6464
yield contents
6565
before + contents + after

lib/schema_dev/rspec.rb

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ def self.setup
77
Db.setup
88
end
99

10-
def self.setup_db
11-
ActiveSupport::Deprecation.warn "SchemaDev::Rspec.setup_db is deprecated. Use SchemaDev::Rspec.setup"
12-
self.setup
13-
end
14-
1510
def self.db_configuration
1611
Db.configuration
1712
end

lib/schema_dev/ruby_selector.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
module SchemaDev
55
module RubySelector
66
def self.command(ruby)
7-
@@selector ||= [Chruby, Rvm, Rbenv].find(&:installed?).andand.new || abort("No ruby version manager found")
7+
@@selector ||= [Chruby, Rvm, Rbenv].find(&:installed?)&.new || abort("No ruby version manager found")
88
@@selector.command ruby
99
end
1010
def self._reset # for rspec, to avoid stickiness
@@ -21,11 +21,15 @@ class Chruby < ManagerBase
2121
CORE_COMMAND = "chruby-exec"
2222

2323
def initialize
24-
@rubies = Pathname.new(ENV['HOME']).join(".rubies").entries().map(&its.basename.to_s)
24+
@rubies = Pathname.new(ENV['HOME'])
25+
.join(".rubies")
26+
.entries()
27+
.map { |e| e.basename.to_s }
2528
end
2629
def command(ruby)
2730
bash = Which.which 'bash' || abort("no bash shell found")
28-
ruby = @rubies.select(&it =~ /^(ruby-)?#{ruby}(-p.*)?$/).last || ruby
31+
ruby = @rubies.select { |e| e =~ /^(ruby-)?#{ruby}(-p.*)?$/ }
32+
.last || ruby
2933
"SHELL=#{bash} #{CORE_COMMAND} #{ruby} --"
3034
end
3135
end

lib/schema_dev/travis.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def build(config)
6969
else
7070
# we need to include against the various gemfiles so we only use PG for PG tests (and not other DBs)
7171
config.matrix(db: 'postgresql').map { |entry|
72-
gemfile = GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s
72+
gemfile = GemfileSelector.gemfile(**entry.slice(:activerecord, :db)).to_s
7373
skip_gemfiles << gemfile
7474
include.concat versions.map {|version|
7575
{
@@ -86,7 +86,7 @@ def build(config)
8686
services << 'mysql'
8787
else
8888
config.matrix(db: 'mysql2').map do |entry|
89-
gemfile = GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s
89+
gemfile = GemfileSelector.gemfile(**entry.slice(:activerecord, :db)).to_s
9090
skip_gemfiles << gemfile
9191
include << {
9292
"gemfile" => gemfile,
@@ -99,12 +99,12 @@ def build(config)
9999
end
100100
env = env.join(' ')
101101

102-
gemfiles = config.matrix.map{|entry| GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s}.uniq
102+
gemfiles = config.matrix.map{|entry| GemfileSelector.gemfile(**entry.slice(:activerecord, :db)).to_s}.uniq
103103
gemfiles.reject! { |gemfile| skip_gemfiles.include?(gemfile) }
104104

105105
exclude = config.matrix(excluded: :only).map { |entry| {}.tap {|ex|
106106
ex["rvm"] = entry[:ruby]
107-
ex["gemfile"] = GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s
107+
ex["gemfile"] = GemfileSelector.gemfile(**entry.slice(:activerecord, :db)).to_s
108108
}}.reject{|ex| not gemfiles.include? ex["gemfile"]}
109109

110110
{}.tap { |travis|

schema_dev.gemspec

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,14 @@ Gem::Specification.new do |gem|
2222

2323
gem.add_dependency "activesupport", ">= 5.2", "< 6.2"
2424
gem.add_dependency "coveralls_reborn", "~> 0.23"
25-
gem.add_dependency "faraday", "~> 0.9"
26-
gem.add_dependency "fastandand", "~> 1.0"
27-
gem.add_dependency "hash_keyword_args", "~> 0.1"
28-
gem.add_dependency "its-it", "~> 1.3"
29-
gem.add_dependency "key_struct", "~> 0.4"
30-
gem.add_dependency "thor", "~> 0.19"
25+
gem.add_dependency "faraday", "~> 1.0"
26+
gem.add_dependency "thor", '>= 0.19', '< 2.0'
3127
gem.add_dependency "which_works", "~> 1.0"
3228

3329
gem.add_development_dependency "bundler"
34-
gem.add_development_dependency "rake", "~> 10.0"
30+
gem.add_development_dependency "rake", "~> 13.0"
3531
gem.add_development_dependency "rspec", "~> 3.0"
3632
gem.add_development_dependency "rspec-given", "~> 3.8"
3733
gem.add_development_dependency "simplecov"
38-
gem.add_development_dependency "webmock", "~> 2.1"
34+
gem.add_development_dependency "webmock", "~> 3.0"
3935
end

0 commit comments

Comments
 (0)