module Moonrope::EvalHelpers

Public Instance Methods

error(type, code_or_message = nil, message = nil) click to toggle source

Raise an error.

@param type [Symbol] the type of error to raise @param message [String, Hash or Array] options to pass with the error (usually a message)

# File lib/moonrope/eval_helpers.rb, line 10
def error(type, code_or_message = nil, message = nil)
  case type
  when :not_found           then raise(Moonrope::Errors::NotFound, code_or_message)
  when :access_denied       then raise(Moonrope::Errors::AccessDenied, code_or_message)
  when :validation_error    then raise(Moonrope::Errors::ValidationError, code_or_message)
  when :parameter_error     then raise(Moonrope::Errors::ParameterError, code_or_message)
  when :structured_error    then structured_error(code_or_message, message)
  else
    if type.is_a?(String)
      if code_or_message.is_a?(Hash)
        structured_error(type, nil, code_or_message)
      else
        structured_error(type, code_or_message, message.is_a?(Hash) ? message : {})
      end
    else
      raise Moonrope::Errors::RequestError, code_or_message
    end
  end
end
paginate(collection, max_per_page = 60, &block) click to toggle source

Return paginated information

# File lib/moonrope/eval_helpers.rb, line 54
def paginate(collection, max_per_page = 60, &block)
  per_page = params.per_page || 30
  per_page = max_per_page if per_page < 1 || per_page > max_per_page
  paginated_results = collection.page(params.page || 1).per(per_page)
  set_flag :paginated, {:page => params.page || 1, :per_page => per_page, :total_pages => paginated_results.total_pages, :total_records => paginated_results.total_count}
  paginated_results.to_a.map do |result|
    block.call(result)
  end
end
sort(collection, &block) click to toggle source

Return information sorted by appropriate values from parameters

# File lib/moonrope/eval_helpers.rb, line 67
def sort(collection, &block)
  collection = collection.order(params.sort_by => params.order)
  set_flag :sorted, {:by => params.sort_by, :order => params.order}
  block.call(collection)
end
structured_error(code, message, additional = {}) click to toggle source

 Raises a structured error.

@param code [String] the code to return
@param message [String] explantory text to return
@param additional [Hash] additional data to return with the error
# File lib/moonrope/eval_helpers.rb, line 37
def structured_error(code, message, additional = {})
  if action
    if action.authenticator_to_use.is_a?(Moonrope::Authenticator)
      errors = action.authenticator_to_use.errors.merge(action.errors)
    else
      errors = action.errors
    end
    if error = errors[code]
      message = error[:description].gsub(/\{(\w+)\}/) { additional[$1.to_sym] }
    end
  end
  raise Moonrope::Errors::StructuredError, {:code => code, :message => message}.merge(additional)
end