class Mountebank::Imposter

Constants

CREATE_PARAMS_HTTP
CREATE_PARAMS_HTTPS
CREATE_PARAMS_SMTP
CREATE_PARAMS_TCP
PROTOCOLS
PROTOCOL_HTTP
PROTOCOL_HTTPS
PROTOCOL_SMTP
PROTOCOL_TCP

Attributes

matches[R]
mode[R]
name[R]
port[R]
protocol[R]
requests[R]
stubs[R]

Public Class Methods

build(port, protocol=PROTOCOL_HTTP, options={}) click to toggle source
# File lib/mountebank/imposter.rb, line 26
def self.build(port, protocol=PROTOCOL_HTTP, options={})
  raise 'Invalid port number' unless port.is_a? Integer
  raise 'Invalid protocol' unless PROTOCOLS.include?(protocol)

  data = {port: port, protocol: protocol}.merge(options)
  Mountebank::Imposter.new(data)
end
create(port, protocol=PROTOCOL_HTTP, options={}) click to toggle source
# File lib/mountebank/imposter.rb, line 42
def self.create(port, protocol=PROTOCOL_HTTP, options={})
  self.build(port, protocol, options).save!
end
delete(port) click to toggle source
# File lib/mountebank/imposter.rb, line 53
def self.delete(port)
  response = Network.delete("/imposters/#{port}")
  response.success? && !response.body.empty?
end
find(port) click to toggle source
# File lib/mountebank/imposter.rb, line 46
def self.find(port)
  imposter_data = Imposter.get_imposter_config(port)
  return Mountebank::Imposter.new(imposter_data) unless imposter_data.empty?

  false
end
new(data={}) click to toggle source
# File lib/mountebank/imposter.rb, line 22
def initialize(data={})
  set_attributes(data)
end

Private Class Methods

get_imposter_config(port) click to toggle source
# File lib/mountebank/imposter.rb, line 111
def self.get_imposter_config(port)
  response = Network.get("/imposters/#{port}")
  response.success? ? response.body : []
end

Public Instance Methods

add_stub(response=nil, predicate=nil) click to toggle source
# File lib/mountebank/imposter.rb, line 69
def add_stub(response=nil, predicate=nil)
  responses, predicates = [], []

  if response.is_a? Array
    responses + response
  elsif response.is_a? Mountebank::Stub::Response
    responses << response
  end

  if predicate.is_a? Array
    predicates + predicate
  elsif predicate.is_a? Mountebank::Stub::Predicate
    predicates << predicate
  end

  @stubs << Mountebank::Stub.create(responses, predicates)
end
delete!() click to toggle source
# File lib/mountebank/imposter.rb, line 58
def delete!
  Imposter.delete(@port)
end
reload() click to toggle source
# File lib/mountebank/imposter.rb, line 62
def reload
  data = Imposter.get_imposter_config(@port)
  set_attributes(data) unless data.empty?

  self
end
replayable_data() click to toggle source
# File lib/mountebank/imposter.rb, line 87
def replayable_data
  data = serializable_hash
  data.delete(:requests)
  data.delete(:matches)

  data
end
save!() click to toggle source
# File lib/mountebank/imposter.rb, line 34
def save!
  delete!
  response = Network.post('/imposters', replayable_data)
  return reload if response.success?

  false
end
to_json(*args) click to toggle source
# File lib/mountebank/imposter.rb, line 95
def to_json(*args)
  serializable_hash.to_json(*args)
end

Private Instance Methods

serializable_hash() click to toggle source
# File lib/mountebank/imposter.rb, line 101
def serializable_hash
  data = {port: @port, protocol: @protocol, name: @name}
  data[:stubs] = @stubs unless @stubs.empty?
  data[:requests] = @requests unless @requests.empty?
  data[:matches] = @matches unless @matches.empty?
  data[:mode] = @mode unless @mode.nil?

  data
end
set_attributes(data) click to toggle source
# File lib/mountebank/imposter.rb, line 116
def set_attributes(data)
  @port = data[:port]
  @protocol = data[:protocol]
  @name = data[:name] || "imposter_#{@port}"
  @stubs = []
  if data[:stubs].respond_to?(:each)
    data[:stubs].each do |stub|
      stub = Mountebank::Stub.new(stub) unless stub.is_a? Mountebank::Stub
      @stubs << stub
    end
  end
  @requests = data[:requests] || []
  @matches = data[:matches] || []
  @mode = data[:mode] || nil
end