class Pact::Provider::State::ProviderState

Attributes

name[RW]
namespace[RW]
no_op_defined[RW]
set_up_defined[RW]
tear_down_defined[RW]

Public Class Methods

new(name, namespace, &block) click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 74
def initialize name, namespace, &block
  @name = name
  @namespace = namespace
  @set_up_defined = false
  @tear_down_defined = false
  @no_op_defined = false
end

Public Instance Methods

finalize() click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 101
def finalize
  validate
end
no_op() click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 91
def no_op
  self.register_no_op
end
register() click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 96
def register
  ProviderStates.register(namespaced(name), self)
  self
end
register_no_op() click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 115
def register_no_op
  @no_op_defined = true
end
register_set_up(&block) click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 105
def register_set_up &block
  @set_up_block = block
  @set_up_defined = true
end
register_tear_down(&block) click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 110
def register_tear_down &block
  @tear_down_block = block
  @tear_down_defined = true
end
set_up(&block) click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 83
def set_up &block
  self.register_set_up(&block)
end
tear_down(&block) click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 87
def tear_down &block
  self.register_tear_down(&block)
end

Private Instance Methods

error_message_for_extra_block(block_name) click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 147
def error_message_for_extra_block block_name
  "Provider state \"#{name}\" has been defined as a no_op but it also has a #{block_name} block. Please remove one or the other."
end
include_provider_state_configured_modules() click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 159
def include_provider_state_configured_modules
  # Doing this at runtime means the order of the Pact configuration block
  # and the provider state declarations doesn't matter.
  # Using include ProviderStateConfiguredModules on the class doesn't seem to work -
  # modules dynamically added to ProviderStateConfiguredModules don't seem to be
  # included in the including class.
  self.extend(ProviderStateConfiguredModules) unless self.singleton_class.ancestors.include?(ProviderStateConfiguredModules)
end
namespaced(name) click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 151
def namespaced(name)
  if namespace.empty?
    name
  else
    "#{namespace}.#{name}"
  end
end
validate() click to toggle source
# File lib/pact/provider/state/provider_state.rb, line 137
def validate
  if no_op_defined && set_up_defined
    raise error_message_for_extra_block 'set_up'
  elsif no_op_defined && tear_down_defined
    raise error_message_for_extra_block 'tear_down'
  elsif !(no_op_defined || set_up_defined || tear_down_defined)
    raise "Please provide a set_up or tear_down block for provider state \"#{name}\". If there is no data to set up or tear down, you can use \"no_op\" instead."
  end
end