module RspecDatabaseHelper::ClassMethods

Public Class Methods

rewriter_class() click to toggle source
# File lib/rspec_database_helper.rb, line 6
def self.rewriter_class
  return Parser::TreeRewriter if defined?(Parser::TreeRewriter)
  return Parser::Rewriter if defined?(Parser::Rewriter)
end

Public Instance Methods

database(&block) click to toggle source

Tiny DSL for creating list or single database records via factory_bot syntax and Rspec :let or :let! methods Usage: user(:user, name: 'Bob') is translated to let(:user) { FactoryBot.create(:user, name: 'Bob') } user!(:user, name: 'Bob') is translated to let!(:user) { FactoryBot.create(:user, name: 'Bob') } user_list(:user, name: 'Bob', 3) is translated to let(:user) { FactoryBot.create_list(:user, 3, name: 'Bob') } user_list!(:user, name: 'Bob', 3) is translated to let!(:user) { FactoryBot.create_list(:user, 3, name: 'Bob') }

# File lib/rspec_database_helper.rb, line 41
def database(&block)
  parser        = Parser::CurrentRuby.new
  rewriter      = DatabaseDSLTranslator.new
  buffer        = Parser::Source::Buffer.new('(string)')
  buffer.source = Parser::CurrentRuby.parse(block.source).children.last.loc.expression.source
  rspec_factory = rewriter.rewrite(buffer, parser.parse(buffer))
  self.class_eval(rspec_factory)
end