spec/spec_helper.rb in ridgepole-0.6.4 vs spec/spec_helper.rb in ridgepole-0.6.5.beta
- old
+ new
@@ -1,246 +1,175 @@
$: << File.expand_path('..', __FILE__)
-def travis?
- !!ENV['TRAVIS']
-end
+require 'spec_const'
+require 'spec_condition'
+require 'cli_helper'
-if travis?
- require 'simplecov'
- require 'coveralls'
+require 'processing_for_travis'
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
- SimpleCov.start do
- add_filter "spec/"
- end
+if condition(:mysql_awesome_enabled, :activerecord_5)
+ raise "Cannot use activerecord-mysql-awesome on ActiveRecord 5.0"
end
require 'ridgepole'
require 'ridgepole/cli/config'
require 'active_support/core_ext/string/strip'
require 'string_ext'
require 'open3'
require 'tempfile'
require 'json'
+require 'rspec/match_fuzzy'
+require 'erbh'
+require 'hash_modern_inspect'
+require 'hash_order_helper'
-TEST_SCHEMA = 'ridgepole_test'
+include ERBh
-if ENV['DEBUG']
- ActiveRecord::Migration.verbose = true
- logger = Ridgepole::Logger.instance
- logger.level = ::Logger::DEBUG
- ActiveRecord::Base.logger = logger
-else
- ActiveRecord::Migration.verbose = false
- Ridgepole::Logger.instance.level = ::Logger::ERROR
+class Hash
+ alias i modern_inspect_without_brace
end
RSpec.configure do |config|
- config.before(:each) do
+ config.before(:all) do
+ if condition(:debug)
+ ActiveRecord::Migration.verbose = true
+ logger = Ridgepole::Logger.instance
+ logger.level = ::Logger::DEBUG
+ ActiveRecord::Base.logger = logger
+ else
+ ActiveRecord::Migration.verbose = false
+ Ridgepole::Logger.instance.level = ::Logger::ERROR
+ end
+ end
+
+ config.before(:each) do |example|
+ if example.metadata[:condition]
+ skip unless condition(*example.metadata[:condition])
+ end
+
+ case example.metadata[:file_path]
+ when /mysql/
+ skip if condition(:postgresql)
+ when /postgresql/
+ skip unless condition(:postgresql)
+ end
+
restore_database
end
end
-def restore_database
- if postgresql?
- restore_database_postgresql
- else
- restore_database_mysql
+module SpecHelper
+ def restore_database
+ if condition(:postgresql)
+ restore_database_postgresql
+ else
+ restore_database_mysql
+ end
end
-end
-def system_raise_on_fail(*args)
- unless system(*args)
- raise RuntimeError.new("Failed to run: #{args}")
+ def system_raise_on_fail(*args)
+ unless system(*args)
+ raise "Failed to run: #{args}"
+ end
end
-end
-def restore_database_mysql
- sql_file = File.expand_path('../mysql/ridgepole_test_database.sql', __FILE__)
- system_raise_on_fail("mysql -uroot < #{sql_file}")
-end
+ def restore_database_mysql
+ sql_file = File.expand_path('../mysql/ridgepole_test_database.sql', __FILE__)
+ system_raise_on_fail("#{MYSQL_CLI} < #{sql_file}")
+ end
-def restore_database_postgresql
- sql_file = File.expand_path('../postgresql/ridgepole_test_database.sql', __FILE__)
- system("createdb ridgepole_test #{travis? ? '-U postgres' : ''} 2>/dev/null")
- system_raise_on_fail("psql ridgepole_test #{travis? ? '-U postgres' : ''} --set ON_ERROR_STOP=off -q -f #{sql_file} 2>/dev/null")
-end
-
-def restore_tables
- if postgresql?
- restore_tables_postgresql
- else
- restore_tables_mysql
+ def restore_database_postgresql
+ sql_file = File.expand_path('../postgresql/ridgepole_test_database.sql', __FILE__)
+ system("#{PG_CREATEDB} ridgepole_test 2>/dev/null")
+ system_raise_on_fail("#{PG_PSQL} ridgepole_test --set ON_ERROR_STOP=off -q -f #{sql_file} 2>/dev/null")
end
-end
-def restore_tables_mysql
- sql_file = File.expand_path('../mysql/ridgepole_test_tables.sql', __FILE__)
- system_raise_on_fail("mysql -uroot < #{sql_file}")
-end
-
-def restore_tables_postgresql
- sql_file = File.expand_path('../postgresql/ridgepole_test_tables.sql', __FILE__)
- system_raise_on_fail("psql ridgepole_test #{travis? ? '-U postgres' : ''} -q -f #{sql_file} 2>/dev/null")
-end
-
-def client(options = {}, config = {})
- config = conn_spec(config)
-
- default_options = {
- :debug => !!ENV['DEBUG'],
- }
-
- if mysql_awesome_enabled?
- default_options[:enable_mysql_awesome] = true
- default_options[:dump_without_table_options] = true
+ def restore_tables
+ if condition(:postgresql)
+ restore_tables_postgresql
+ else
+ restore_tables_mysql
+ end
end
- options = default_options.merge(options)
-
- Ridgepole::Client.new(config, options)
-end
-
-def conn_spec(config = {})
- if postgresql?
- spec = {
- adapter: 'postgresql',
- database: TEST_SCHEMA,
- }
-
- spec[:username] = 'postgres' if travis?
- spec.merge(config)
- else
- {
- adapter: 'mysql2',
- database: TEST_SCHEMA,
- }.merge(config)
+ def restore_tables_mysql
+ sql_file = File.expand_path('../mysql/ridgepole_test_tables.sql', __FILE__)
+ system_raise_on_fail("#{MYSQL_CLI} < #{sql_file}")
end
-end
-def show_create_table(table_name)
- if postgresql?
- show_create_table_postgresql(table_name)
- else
- show_create_table_mysql(table_name)
+ def restore_tables_postgresql
+ sql_file = File.expand_path('../postgresql/ridgepole_test_tables.sql', __FILE__)
+ system_raise_on_fail("#{PG_PSQL} ridgepole_test -q -f #{sql_file} 2>/dev/null")
end
-end
-def show_create_table_mysql(table_name)
- raw_conn = ActiveRecord::Base.connection.raw_connection
- raw_conn.query("SHOW CREATE TABLE `#{table_name}`").first[1]
-end
+ def client(options = {}, config = {})
+ config = conn_spec(config)
+ default_options = {debug: condition(:debug)}
-def show_create_table_postgresql(table_name)
- `pg_dump #{travis? ? '-U postgres' : ''} --schema-only #{TEST_SCHEMA} --table=#{table_name} | awk '/^CREATE TABLE/,/);/{print} /^CREATE INDEX/{print}'`.strip
-end
+ if condition(:mysql_awesome_enabled)
+ default_options[:enable_mysql_awesome] = true
+ default_options[:dump_without_table_options] = true
+ end
-def default_cli_hook
- <<-RUBY.strip_heredoc
- require 'ridgepole'
+ options = default_options.merge(options)
- class Ridgepole::Delta
- def initialize(*args);
- end
- def migrate(*args)
- puts "Ridgepole::Delta#migrate"
- [#{differ}, "create_table :table do\\nend"]
- end
- def script
- puts "Ridgepole::Delta#script"
+ Ridgepole::Client.new(config, options)
+ end
- "create_table :table do\\nend"
- end
- def differ?
- puts "Ridgepole::Delta#differ?"
- #{differ}
- end
+ def conn_spec(config = {})
+ if condition(:postgresql)
+ {
+ adapter: 'postgresql',
+ database: TEST_SCHEMA,
+ host: TEST_PG_HOST,
+ port: TEST_PG_PORT,
+ username: TEST_PG_USER,
+ password: TEST_PG_PASS,
+ }.merge(config)
+ else
+ {
+ adapter: 'mysql2',
+ database: TEST_SCHEMA,
+ host: TEST_MYSQL_HOST,
+ port: TEST_MYSQL_PORT,
+ username: TEST_MYSQL_USER,
+ password: TEST_MYSQL_PASS,
+ }.merge(config)
end
+ end
- class Ridgepole::Client
- def initialize(*args)
- puts "Ridgepole::Client#initialize([\#{args.map {|i| i.kind_of?(File) ? i.path : i.inspect}.join(', ')}])"
- end
- def dump
- puts "Ridgepole::Client#dump"
- end
- def diff(*args)
- puts "Ridgepole::Client#diff"
- Ridgepole::Delta.new
- end
- class << self
- def diff(*args)
- puts "Ridgepole::Client.diff([\#{args.map {|i| i.kind_of?(File) ? i.path : i.inspect}.join(', ')}])"
- Ridgepole::Delta.new
- end
- def dump(args)
- puts "Ridgepole::Client.dump"
- end
- end
+ def show_create_table(table_name)
+ if condition(:postgresql)
+ show_create_table_postgresql(table_name)
+ else
+ show_create_table_mysql(table_name)
end
- RUBY
-end
+ end
-def run_cli(options = {})
- args = options[:args] || []
- hook = options[:hook] || default_cli_hook
- path = File.expand_path('../../bin/ridgepole', __FILE__)
-
- Tempfile.open(["#{File.basename __FILE__}.#{$$}", '.rb']) do |f|
- f.puts(hook)
- f.puts(File.read(path))
- f.flush
-
- cmd = ([:ruby, f.path] + args).join(' ')
- Open3.capture2e(cmd)
+ def show_create_table_mysql(table_name)
+ raw_conn = ActiveRecord::Base.connection.raw_connection
+ raw_conn.query("SHOW CREATE TABLE `#{table_name}`").first[1]
end
-end
-def tempfile(basename, content = '')
- begin
- path = `mktemp /tmp/#{basename}.XXXXXX`
- open(path, 'wb') {|f| f << content }
- FileUtils.chmod(0777, path)
- yield(path)
- ensure
- FileUtils.rm_f(path) if path
+ def show_create_table_postgresql(table_name)
+ `#{PG_DUMP} --schema-only #{TEST_SCHEMA} --table=#{table_name} | awk '/^CREATE TABLE/,/);/{print} /^CREATE INDEX/{print}'`.strip
end
-end
-def mysql_awesome_enabled?
- ENV['ENABLE_MYSQL_AWESOME'] == '1'
-end
-
-def postgresql?
- ENV['POSTGRESQL'] == '1'
-end
-
-def if_mysql_awesome_enabled(then_str, else_str = '')
- if mysql_awesome_enabled?
- then_str
- else
- else_str
+ def tempfile(basename, content = '')
+ begin
+ path = `mktemp /tmp/#{basename}.XXXXXX`
+ open(path, 'wb') {|f| f << content }
+ FileUtils.chmod(0777, path)
+ yield(path)
+ ensure
+ FileUtils.rm_f(path) if path
+ end
end
-end
-def unsigned_if_enabled(prefix = ', ', suffix = '')
- if_mysql_awesome_enabled("#{prefix}unsigned: true#{suffix}")
-end
-
-def unsigned_false_if_enabled(prefix = ', ', suffix = '')
- if_mysql_awesome_enabled("#{prefix}unsigned: false#{suffix}")
-end
-
-def unsigned_if_enabled2(prefix = ', ', suffix = '')
- if_mysql_awesome_enabled("#{prefix}:unsigned=>true#{suffix}")
-end
-
-def unsigned_false_if_enabled2(prefix = ', ', suffix = '')
- if_mysql_awesome_enabled("#{prefix}:unsigned=>false#{suffix}")
-end
-
-def run_ridgepole(*args)
- Dir.chdir(File.expand_path('../..', __FILE__)) do
- cmd = [:bundle, :exec, './bin/ridgepole'] + args
- Open3.capture2e(cmd.join(' '))
+ def run_ridgepole(*args)
+ Dir.chdir(File.expand_path('../..', __FILE__)) do
+ cmd = [:bundle, :exec, './bin/ridgepole'] + args
+ Open3.capture2e(cmd.join(' '))
+ end
end
end
+include SpecHelper