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