schema_dev 0.0.3 → 0.1.0

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: f04bd845d7a3791a23b9935d8878a44a2266d152
4
- data.tar.gz: 7cb7389eae47263b264794cee8a2d0989e0fca0d
3
+ metadata.gz: 21d86e552e688fc882a7f7e3f165c2e6a140ae93
4
+ data.tar.gz: 854490fbea9efd8801f64cc86668f99fd93b9877
5
5
  SHA512:
6
- metadata.gz: 683fffa2803f678edb0d5fe5680b605091a95a6fe662bb884444ea2ae4e9c6aca1901d43a60e739a0df9ab63b7defcf06c40699c6f5da237f65b1b6e19475da7
7
- data.tar.gz: d7494a010a989097980189159ab8613de012771945dc4e915d6e3fc5dca115b6cc024f0181e2ddb20c4bcbb32cae4aa92289b10189fca04c426f4d054aaca820
6
+ metadata.gz: 1967c1cb6a9c6798fad74869236336fe17b2cb8204f330d9018f1a7e18549b39908dbe6f83eaff7154fa993010bb288f6848f73f43cae25a3f5fdc388ba60efd
7
+ data.tar.gz: fef0914899f5aa01a8c573805f558a188a0635068021935853a59df179a0b673a790e9b8ebe09444b84844ea50cff43a365413511db84ebefedaa0c4f2a5dd96
data/bin/schema_dev CHANGED
@@ -20,26 +20,26 @@ class CLI < Thor
20
20
 
21
21
  desc "run command", "run a command over the matrix"
22
22
  matrix_options
23
- def do(*args)
23
+ def matrix(*args)
24
24
  $runner.run(args, **options.symbolize_keys)
25
25
  end
26
26
 
27
- desc "bundle", "shorthand for '#{$0} do bundle ...'"
27
+ desc "bundle", "shorthand for '#{$0} matrix bundle ...'"
28
28
  matrix_options
29
29
  def bundle(*args)
30
30
  $runner.run('bundle', args, **options.symbolize_keys)
31
31
  end
32
32
 
33
- desc "rake", "shorthand for '#{$0} do rake ...'"
33
+ desc "rake", "shorthand for '#{$0} matrix bundle exec rake ...'"
34
34
  matrix_options
35
35
  def rake(*args)
36
- $runner.run('rake', args, **options.symbolize_keys)
36
+ $runner.run('bundle', 'exec', 'rake', args, **options.symbolize_keys)
37
37
  end
38
38
 
39
- desc "rspec", "shorthand for '#{$0} do rspec ...'"
39
+ desc "rspec", "shorthand for '#{$0} bundle exec rspec ...'"
40
40
  matrix_options
41
41
  def rspec(*args)
42
- $runner.run('rspec', args, **options.symbolize_keys)
42
+ $runner.run('bundle', 'exec', 'rspec', args, **options.symbolize_keys)
43
43
  end
44
44
 
45
45
  end
@@ -11,10 +11,10 @@ module SchemaDev
11
11
 
12
12
  class Config
13
13
 
14
- attr_accessor :quick
14
+ attr_accessor :quick, :db
15
15
 
16
16
  def self.load
17
- new (YAML.load Pathname.new(CONFIG_FILE).read).deep_symbolize_keys
17
+ @@config ||= new (YAML.load Pathname.new(CONFIG_FILE).read).deep_symbolize_keys
18
18
  end
19
19
 
20
20
  class Tuple < KeyStruct[:ruby, :rails, :db]
@@ -10,11 +10,10 @@ module SchemaDev
10
10
  def initialize(ruby:, rails:, db: nil)
11
11
  @ruby_selector = RubySelector.command(ruby)
12
12
  @gemfile_selector = GemfileSelector.command(rails: rails, db: db)
13
- @dev_env = "SCHEMA_DEV_DB=#{db.inspect}"
14
13
  end
15
14
 
16
15
  def run(cmd, dry_run: false)
17
- fullcommand = ["/usr/bin/env", @dev_env, @gemfile_selector, @ruby_selector, cmd].compact.join(' ')
16
+ fullcommand = ["/usr/bin/env", @gemfile_selector, @ruby_selector, cmd].compact.join(' ')
18
17
  puts "* #{fullcommand}"
19
18
  return true if dry_run
20
19
 
@@ -16,5 +16,10 @@ module SchemaDev
16
16
  def self.command(rails:, db: nil)
17
17
  "BUNDLE_GEMFILE=#{gemfile(rails: rails, db: db)}"
18
18
  end
19
+
20
+ def self.infer_db
21
+ (env = ENV['BUNDLE_GEMFILE']) =~ %r{rails.*/Gemfile[.](.*)}
22
+ $1 or raise "Can't infer db: Env BUNDLE_GEMFILE=#{env.inspect}) isn't a schema_dev Gemfile path with db"
23
+ end
19
24
  end
20
25
  end
@@ -0,0 +1,96 @@
1
+ require 'logger'
2
+ require 'pathname'
3
+ require_relative '../gemfile_selector'
4
+
5
+ module SchemaDev
6
+ module Rspec
7
+ module Db
8
+ extend self
9
+
10
+ def setup(db = nil)
11
+ @db = db || GemfileSelector.infer_db
12
+ set_logger
13
+ connect
14
+ RSpec.configure do |config|
15
+ config.include Helpers
16
+ config.filter_run_excluding :postgresql => :only unless Helpers.postgresql?
17
+ config.filter_run_excluding :postgresql => :skip if Helpers.postgresql?
18
+ config.filter_run_excluding :mysql => :only unless Helpers.mysql?
19
+ config.filter_run_excluding :mysql => :skip if Helpers.mysql?
20
+ config.filter_run_excluding :sqlite3 => :only unless Helpers.sqlite3?
21
+ config.filter_run_excluding :sqlite3 => :skip if Helpers.sqlite3?
22
+ end
23
+ end
24
+
25
+ def tmproot
26
+ @tmproot ||= Pathname.new('tmp').tap { |path| path.mkpath }
27
+ end
28
+
29
+ def configuration
30
+ case @db
31
+ when 'mysql'
32
+ {
33
+ :adapter => 'mysql',
34
+ :database => 'schema_plus_test',
35
+ :username => ENV.fetch('MYSQL_DB_USER', 'schema_plus'),
36
+ :encoding => 'utf8',
37
+ :min_messages => 'warning'
38
+ }
39
+ when 'mysql2'
40
+ {
41
+ :adapter => 'mysql2',
42
+ :database => 'schema_plus_test',
43
+ :username => ENV.fetch('MYSQL_DB_USER', 'schema_plus'),
44
+ :encoding => 'utf8',
45
+ :min_messages => 'warning'
46
+ }
47
+ when 'postgresql'
48
+ {
49
+ :adapter => 'postgresql',
50
+ :username => ENV['POSTGRESQL_DB_USER'],
51
+ :database => 'schema_plus_test',
52
+ :min_messages => 'warning'
53
+ }
54
+ when 'sqlite3'
55
+ {
56
+ :adapter => 'sqlite3',
57
+ :database => tmproot.join('schema_plus.sqlite3').to_s
58
+ }
59
+ else
60
+ raise "Unknown db adapter #{@db.inspect}"
61
+ end
62
+ end
63
+
64
+ def connect
65
+ ActiveRecord::Base.configurations = { 'schema_dev' => configuration }
66
+ ActiveRecord::Base.establish_connection :schema_dev
67
+ case @db
68
+ when 'sqlite3'
69
+ ActiveRecord::Base.connection.execute "PRAGMA synchronous = OFF"
70
+ end
71
+ end
72
+
73
+ def set_logger
74
+ ruby = "#{RUBY_ENGINE}-#{RUBY_VERSION}"
75
+ rails = "rails-#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
76
+ ActiveRecord::Base.logger = Logger.new(tmproot.join("#{ruby}.#{rails}.#{@db}.log").open("w"))
77
+ end
78
+
79
+ module Helpers
80
+ extend self
81
+
82
+ def mysql?
83
+ ActiveRecord::Base.connection.adapter_name =~ /^mysql/i
84
+ end
85
+
86
+ def postgresql?
87
+ ActiveRecord::Base.connection.adapter_name =~ /^postgresql/i
88
+ end
89
+
90
+ def sqlite3?
91
+ ActiveRecord::Base.connection.adapter_name =~ /^sqlite/i
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -1,58 +1,20 @@
1
- require 'logger'
2
- require 'pathname'
1
+ require_relative 'rspec/db'
3
2
 
4
3
  module SchemaDev
5
4
  module Rspec
6
5
 
7
- def self.db_connect
8
- db = ENV['SCHEMA_DEV_DB']
9
- ruby = "#{RUBY_ENGINE}-#{RUBY_VERSION}"
10
- rails = "rails-#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
11
- root = Pathname.new('tmp')
12
- root.mkpath
13
- configuration = case db
14
- when 'mysql'
15
- {
16
- :adapter => 'mysql',
17
- :database => 'schema_plus_test',
18
- :username => ENV.fetch('MYSQL_DB_USER', 'schema_plus'),
19
- :encoding => 'utf8',
20
- :min_messages => 'warning'
21
- }
22
- when 'mysql2'
23
- {
24
- :adapter => 'mysql2',
25
- :database => 'schema_plus_test',
26
- :username => ENV.fetch('MYSQL_DB_USER', 'schema_plus'),
27
- :encoding => 'utf8',
28
- :min_messages => 'warning'
29
- }
30
- when 'postgresql'
31
- {
32
- :adapter => 'postgresql',
33
- :username => ENV['POSTGRESQL_DB_USER'],
34
- :database => 'schema_plus_test',
35
- :min_messages => 'warning'
36
- }
37
- when 'sqlite3'
38
- {
39
- :adapter => 'sqlite3',
40
- :database => root.join('schema_plus.sqlite3').to_s
41
- }
42
- else
43
- raise "Unknown db adapter #{db.inspect}"
44
- end
45
-
46
- ActiveRecord::Base.logger = Logger.new(root.join("#{ruby}.#{rails}.#{db}.log").open("w"))
47
- ActiveRecord::Base.configurations = { 'schema_dev' => configuration }
48
- ActiveRecord::Base.establish_connection :schema_dev
6
+ def self.setup_db(db=nil)
7
+ Db.setup(db)
8
+ end
49
9
 
50
- case db
51
- when 'sqlite3'
52
- ActiveRecord::Base.connection.execute "PRAGMA synchronous = OFF"
53
- end
10
+ def self.db_configuration
11
+ Db.configuration
12
+ end
54
13
 
14
+ end
55
15
 
56
- end
16
+ module Helpers
17
+ extend Rspec::Db::Helpers
57
18
  end
19
+
58
20
  end
@@ -0,0 +1,51 @@
1
+ require_relative 'config'
2
+
3
+ config = SchemaDev::Config.load
4
+
5
+ DATABASES = %w[schema_plus_test]
6
+
7
+ dbms = [:postgresql, :mysql].select{|dbm| config.db.grep(/^#{dbm}/).any?}
8
+
9
+ if dbms.any?
10
+ {
11
+ postgresql: { uservar: 'POSTGRESQL_DB_USER', defaultuser: 'schema_plus', create: "createdb -U '%{user}' %{dbname}", drop: "dropdb -U '%{user}' %{dbname}" },
12
+ mysql: { uservar: 'MYSQL_DB_USER', defaultuser: 'schema_plus', create: "mysqladmin -u '%{user}' create %{dbname}", drop: "mysqladmin -u '%{user}' -f drop %{dbname}" }
13
+ }.slice(*dbms).each do |dbm, info|
14
+ namespace dbm do
15
+ user = ENV.fetch info[:uservar], info[:defaultuser]
16
+ task :create_databases do
17
+ DATABASES.each do |dbname|
18
+ system(info[:create] % {user: user, dbname: dbname})
19
+ end
20
+ end
21
+ task :drop_databases do
22
+ DATABASES.each do |dbname|
23
+ system(info[:drop] % {user: user, dbname: dbname})
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ desc 'Create test databases'
30
+ task :create_databases do
31
+ invoke_multiple(dbms, "create_databases")
32
+ end
33
+
34
+ desc 'Drop test databases'
35
+ task :drop_databases do
36
+ invoke_multiple(dbms, "drop_databases")
37
+ end
38
+
39
+ def invoke_multiple(namespaces, task)
40
+ failed = namespaces.reject { |adapter|
41
+ begin
42
+ Rake::Task["#{adapter}:#{task}"].invoke
43
+ true
44
+ rescue => e
45
+ warn "\n#{e}\n"
46
+ false
47
+ end
48
+ }
49
+ fail "Failure in: #{failed.join(', ')}" if failed.any?
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  module SchemaDev
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
data/schema_dev.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["ronen@barzel.org"]
11
11
  spec.summary = %q{SchemaPlus development tools}
12
12
  spec.description = %q{SchemaPlus development tools}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/SchemaPlus/schema_dev"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ronen barzel
@@ -143,14 +143,16 @@ files:
143
143
  - lib/schema_dev/gemfile_selector.rb
144
144
  - lib/schema_dev/matrix_executor.rb
145
145
  - lib/schema_dev/rspec.rb
146
+ - lib/schema_dev/rspec/db.rb
146
147
  - lib/schema_dev/ruby_selector.rb
147
148
  - lib/schema_dev/runner.rb
149
+ - lib/schema_dev/tasks.rb
148
150
  - lib/schema_dev/version.rb
149
151
  - schema_dev.gemspec
150
152
  - schema_dev.yml
151
153
  - spec/config_spec.rb
152
154
  - spec/spec_helper.rb
153
- homepage: ''
155
+ homepage: https://github.com/SchemaPlus/schema_dev
154
156
  licenses:
155
157
  - MIT
156
158
  metadata: {}