debian-mirror-gitlab/elasticsearch-model/spec/spec_helper.rb
2020-03-13 15:44:24 +05:30

162 lines
4.2 KiB
Ruby

require 'pry-nav'
require 'kaminari'
require 'kaminari/version'
require 'will_paginate'
require 'will_paginate/collection'
require 'elasticsearch/model'
require 'hashie/version'
require 'active_model'
require 'mongoid'
require 'yaml'
require 'active_record'
unless defined?(ELASTICSEARCH_URL)
ELASTICSEARCH_URL = ENV['ELASTICSEARCH_URL'] || "localhost:#{(ENV['TEST_CLUSTER_PORT'] || 9200)}"
end
RSpec.configure do |config|
config.formatter = 'documentation'
config.color = true
config.before(:suite) do
require 'ansi'
tracer = ::Logger.new(STDERR)
tracer.formatter = lambda { |s, d, p, m| "#{m.gsub(/^.*$/) { |n| ' ' + n }.ansi(:faint)}\n" }
Elasticsearch::Model.client = Elasticsearch::Client.new host: ELASTICSEARCH_URL,
tracer: (ENV['QUIET'] ? nil : tracer)
unless ActiveRecord::Base.connected?
ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => ":memory:" )
end
require 'support/app'
if ::ActiveRecord::Base.respond_to?(:raise_in_transactional_callbacks) && ::ActiveRecord::VERSION::MAJOR.to_s < '5'
::ActiveRecord::Base.raise_in_transactional_callbacks = true
end
end
config.after(:all) do
drop_all_tables!
delete_all_indices!
end
end
# Is the ActiveRecord version at least 4.0?
#
# @return [ true, false ] Whether the ActiveRecord version is at least 4.0.
#
# @since 6.0.1
def active_record_at_least_4?
defined?(::ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 4
end
# Delete all documents from the indices of the provided list of models.
#
# @param [ Array<ActiveRecord::Base> ] models The list of models.
#
# @return [ true ]
#
# @since 6.0.1
def clear_indices(*models)
models.each do |model|
begin; Elasticsearch::Model.client.delete_by_query(index: model.index_name, q: '*'); rescue; end
end and true
end
# Delete all documents from the tables of the provided list of models.
#
# @param [ Array<ActiveRecord::Base> ] models The list of models.
#
# @return [ true ]
#
# @since 6.0.1
def clear_tables(*models)
begin; models.map(&:delete_all); rescue; end and true
end
# Drop all tables of models registered as subclasses of ActiveRecord::Base.
#
# @return [ true ]
#
# @since 6.0.1
def drop_all_tables!
ActiveRecord::Base.descendants.each do |model|
begin
ActiveRecord::Schema.define do
drop_table model
end if model.table_exists?
rescue
end
end and true
end
# Drop all indices of models registered as subclasses of ActiveRecord::Base.
#
# @return [ true ]
#
# @since 6.0.1
def delete_all_indices!
client = Elasticsearch::Model.client
ActiveRecord::Base.descendants.each do |model|
begin
client.indices.delete(index: model.index_name) if model.__elasticsearch__.index_exists?
rescue
end
end and true
end
# Remove all classes.
#
# @param [ Array<Class> ] classes The list of classes to remove.
#
# @return [ true ]
#
# @since 6.0.1
def remove_classes(*classes)
classes.each do |_class|
Object.send(:remove_const, _class.name.to_sym) if defined?(_class)
end and true
end
# Determine whether the tests with Mongoid should be run.
# Depends on whether MongoDB is running on the default host and port, `localhost:27017`.
#
# @return [ true, false ]
#
# @since 6.0.1
def test_mongoid?
$mongoid_available ||= begin
require 'mongoid'
if defined?(Mongo) # older versions of Mongoid use the driver, Moped
client = Mongo::Client.new(['localhost:27017'])
Timeout.timeout(1) do
client.database.command(ping: 1) && true
end
end and true
rescue Timeout::Error, LoadError, Mongo::Error => e
client.close
$stderr.puts("MongoDB not installed or running: #{e}")
end
end
# Connect Mongoid and set up its Logger if Mongoid tests should be run.
#
# @since 6.0.1
def connect_mongoid(source)
if test_mongoid?
$stderr.puts "Mongoid #{Mongoid::VERSION}", '-'*80
if !ENV['QUIET'] == 'true'
logger = ::Logger.new($stderr)
logger.formatter = lambda { |s, d, p, m| " #{m.ansi(:faint, :cyan)}\n" }
logger.level = ::Logger::DEBUG
Mongoid.logger = logger
Mongo::Logger.logger = logger
else
Mongo::Logger.logger.level = ::Logger::WARN
end
Mongoid.connect_to(source)
end
end