class Rohbau::Interface::Caller

Public Class Methods

new(domain) click to toggle source
# File lib/rohbau/interface.rb, line 82
def initialize(domain)
  @domain = validate_and_return!(domain)
end

Public Instance Methods

call(use_case, args, options = {}) click to toggle source
# File lib/rohbau/interface.rb, line 86
def call(use_case, args, options = {})
  type = options[:stub_type]
  stubbed_result = options[:stub_result]
  use_case = get_use_case_for(use_case, args)

  if stubbed_result
    stub_use_case(use_case, type, stubbed_result)
  else
    call_use_case(use_case, args)
  end
end

Private Instance Methods

call_use_case(use_case, args) click to toggle source
# File lib/rohbau/interface.rb, line 100
def call_use_case(use_case, args)
  request = RequestCache.for[domain]
  input = get_input_for(use_case, args)

  use_case.new(request, input).call
end
domain() click to toggle source
# File lib/rohbau/interface.rb, line 134
def domain
  @domain
end
get_input_for(use_case, args) click to toggle source
# File lib/rohbau/interface.rb, line 114
def get_input_for(use_case, args)
  use_case.const_get(:Input).new(args)
end
get_use_case_for(use_case, args) click to toggle source
# File lib/rohbau/interface.rb, line 118
def get_use_case_for(use_case, args)
  [domain, :UseCases, use_case].inject(Object) do |ns, const|
    ns.const_get(const)
  end
end
missing_domain_message(domain) click to toggle source
# File lib/rohbau/interface.rb, line 129
def missing_domain_message(domain)
  "You tried to call a use case from the #{domain}, but that domain " \
  "does not exist."
end
stub_use_case(use_case, type, result) click to toggle source
# File lib/rohbau/interface.rb, line 107
def stub_use_case(use_case, type, result)
  result_class = use_case.const_get type

  return result_class.new if result == true
  result_class.new(result)
end
validate_and_return!(domain) click to toggle source
# File lib/rohbau/interface.rb, line 124
def validate_and_return!(domain)
  return domain if Object.const_defined?(domain)
  raise ArgumentError, missing_domain_message(domain)
end