class RestMyCase::Base

Attributes

context[R]

INSTANCE METHODS BELLOW ###########################

options[R]

INSTANCE METHODS BELLOW ###########################

Public Class Methods

context_accessor(*methods) click to toggle source
# File lib/rest_my_case/base.rb, line 42
def self.context_accessor(*methods)
  context_writer(*methods)
  context_reader(*methods)
end
context_reader(*methods) click to toggle source
# File lib/rest_my_case/base.rb, line 53
def self.context_reader(*methods)
  methods.each { |method| define_method(method) { context.send(method) } }
end
context_writer(*methods) click to toggle source
# File lib/rest_my_case/base.rb, line 47
def self.context_writer(*methods)
  methods.each do |method|
    define_method("#{method}=") { |value| context.send "#{method}=", value }
  end
end
dependencies() click to toggle source
# File lib/rest_my_case/base.rb, line 28
def self.dependencies
  @dependencies ||= []
end
depends(*use_case_classes) click to toggle source
# File lib/rest_my_case/base.rb, line 24
def self.depends(*use_case_classes)
  dependencies.concat(use_case_classes)
end
new(context, dependent_use_case = nil) click to toggle source
# File lib/rest_my_case/base.rb, line 61
def initialize(context, dependent_use_case = nil)
  @context = context
  @options = { dependent_use_case: dependent_use_case }

  return unless dependent_use_case

  @options[:silent_abort] = RestMyCase.get_config \
    :silence_dependencies_abort, dependent_use_case.class
end
perform(attributes = nil) click to toggle source
# File lib/rest_my_case/base.rb, line 32
def self.perform(attributes = nil)
  attributes ||= {}

  unless attributes.respond_to?(:to_hash)
    raise ArgumentError, 'Must respond_to method #to_hash'
  end

  trial_court.execute([self], attributes.to_hash).context
end
required_context(*schema) click to toggle source
# File lib/rest_my_case/base.rb, line 10
def self.required_context(*schema)
  @required_context_schema = schema

  if schema.length == 1 && (schema[0].is_a?(Hash) || schema[0].is_a?(Array))
    @required_context_schema = schema[0]
  end

  @required_context_schema.each { |context_key| context_reader context_key }
end
required_context_schema() click to toggle source
# File lib/rest_my_case/base.rb, line 20
def self.required_context_schema
  @required_context_schema ||= {}
end
trial_court() click to toggle source
# File lib/rest_my_case/base.rb, line 5
def self.trial_court
  @trial_court ||= Trial::Court.new \
    Judge::Base, DefenseAttorney::Base, RestMyCase::Base, Context::Base
end

Public Instance Methods

abort() click to toggle source
# File lib/rest_my_case/base.rb, line 91
def abort
  if options[:silent_abort]
    options[:dependent_use_case].abort
  else
    options[:should_abort] = true
  end
end
abort!() click to toggle source
# File lib/rest_my_case/base.rb, line 99
def abort!
  abort && raise(Errors::Abort)
end
error(error_message = '') click to toggle source
# File lib/rest_my_case/base.rb, line 103
def error(error_message = '')
  error_data = \
    error_message.is_a?(Hash) ? error_message : { message: error_message }

  error_data[:class_name] = self.class.name

  abort && context.errors.add(error_data)
end
error!(error_data = '') click to toggle source
# File lib/rest_my_case/base.rb, line 112
def error!(error_data = '')
  error(error_data) && raise(Errors::Abort)
end
final() click to toggle source
# File lib/rest_my_case/base.rb, line 77
def final; end
invoke(*use_case_classes) click to toggle source
# File lib/rest_my_case/base.rb, line 79
def invoke(*use_case_classes)
  self.class.trial_court.execute(use_case_classes, context.to_hash).context
end
invoke!(*use_case_classes) click to toggle source
# File lib/rest_my_case/base.rb, line 83
def invoke!(*use_case_classes)
  trial_case = self.class.trial_court.execute(use_case_classes, context)

  abort! if trial_case.aborted

  trial_case.context
end
perform() click to toggle source
# File lib/rest_my_case/base.rb, line 73
def perform; end
rollback() click to toggle source
# File lib/rest_my_case/base.rb, line 75
def rollback; end
setup() click to toggle source
# File lib/rest_my_case/base.rb, line 71
def setup; end
skip() click to toggle source
# File lib/rest_my_case/base.rb, line 116
def skip
  options[:should_skip] = true
end
skip!() click to toggle source
# File lib/rest_my_case/base.rb, line 120
def skip!
  skip && raise(Errors::Skip)
end
validate_context(schema = self.class.required_context_schema) click to toggle source
# File lib/rest_my_case/base.rb, line 124
def validate_context(schema = self.class.required_context_schema)
  errors = context.validate_schema(schema)

  error(context_errors: errors, message: 'invalid context') if errors

  Helpers.blank? errors
end
validate_context!(schema = self.class.required_context) click to toggle source
# File lib/rest_my_case/base.rb, line 132
def validate_context!(schema = self.class.required_context)
  validate_context(schema) && raise(Errors::Abort)
end