Class: Fixturama::Changes

Inherits:
Object
  • Object
show all
Defined in:
lib/fixturama/changes.rb,
lib/fixturama/changes/base.rb,
lib/fixturama/changes/seed.rb,
lib/fixturama/changes/chain.rb,
lib/fixturama/changes/const.rb,
lib/fixturama/changes/request.rb

Overview

Registry of changes (stubs and seeds)

Defined Under Namespace

Classes: Base, Chain, Const, Request, Seed

Constant Summary collapse

TYPES =

Match option keys to the type of an item

{
  actions: Chain,
  arguments: Chain,
  basic_auth: Request,
  body: Request,
  chain: Chain,
  class: Chain,
  const: Const,
  count: Seed,
  headers: Request,
  http_method: Request,
  object: Chain,
  params: Seed,
  query: Request,
  response: Request,
  responses: Request,
  traits: Seed,
  type: Seed,
  uri: Request,
  url: Request,
  value: Const,
}.freeze

Instance Method Summary collapse

Instance Method Details

#add(options) ⇒ Fixturama::Changes

Adds new change to the registry

Parameters:

  • options (Hash)

Returns:

Raises:



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/fixturama/changes.rb', line 41

def add(options)
  options = Hash(options).transform_keys(&:to_sym)
  types = options.keys.map { |key| TYPES[key] }.compact.uniq
  raise "Wrong count" unless types.count == 1

  @changes << types.first.new(options)
  self
rescue FixtureError => err
  raise err
rescue StandardError => err
  raise FixtureError.new("an operation", options, err)
end

#call(example) ⇒ self

Apply all registered changes to the RSpec example

Parameters:

  • example (RSpec::Core::Example)

Returns:

  • (self)


57
58
59
60
61
62
63
# File 'lib/fixturama/changes.rb', line 57

def call(example)
  @changes
    .group_by(&:key)
    .values
    .map { |changes| changes.reduce :merge }
    .each { |change| change.call(example) }
end