1
0
Fork 0
mirror of https://github.com/thoughtbot/factory_bot.git synced 2022-11-09 11:43:51 -05:00
thoughtbot--factory_bot/spec/support/matchers/declaration.rb
Joshua Clayton 3114dcd935 Wrap up DeclarationList
DeclarationList knows how to generate an attribute
list, which never really made sense outside of being generated from
declarations. Now, the declaration list builds a list of attributes
which is combined in Factory#attributes with attributes from traits and
its parents.
2011-10-31 19:05:34 -04:00

71 lines
1.5 KiB
Ruby

module DeclarationMatchers
def have_static_declaration(name)
DeclarationMatcher.new(:static).named(name)
end
def have_dynamic_declaration(name)
DeclarationMatcher.new(:dynamic).named(name)
end
def have_association_declaration(name)
DeclarationMatcher.new(:association).named(name)
end
def have_implicit_declaration(name)
DeclarationMatcher.new(:implicit).named(name)
end
class DeclarationMatcher
def initialize(declaration_type)
@declaration_type = declaration_type
end
def matches?(subject)
subject.declarations.include?(expected_declaration)
end
def named(name)
@name = name
self
end
def ignored
@ignored = true
self
end
def with_value(value)
@value = value
self
end
def with_factory(factory)
@factory = factory
self
end
def with_options(options)
@options = options
self
end
private
def expected_declaration
case @declaration_type
when :static then FactoryGirl::Declaration::Static.new(@name, @value, ignored?)
when :dynamic then FactoryGirl::Declaration::Dynamic.new(@name, ignored?, @value)
when :implicit then FactoryGirl::Declaration::Implicit.new(@name, @factory, ignored?)
when :association then FactoryGirl::Declaration::Association.new(@name, options)
end
end
def ignored?
!!@ignored
end
def options
@options || {}
end
end
end