class Sliver::Rails::Action

Constants

BODIED_METHODS

Public Class Methods

add_exposed_methods(name, options = {}, &block) click to toggle source
# File lib/sliver/rails/action.rb, line 22
def self.add_exposed_methods(name, options = {}, &block)
  uncached_name = "#{name}_without_caching"

  define_method uncached_name, &block
  define_method(name) do
    @exposed_methods ||= {}
    @exposed_methods[name] ||= send uncached_name
  end

  return if options[:public]

  private uncached_name
  private name
end
call(environment) click to toggle source
Calls superclass method
# File lib/sliver/rails/action.rb, line 6
def self.call(environment)
  request = ::Rack::Request.new environment
  Rails.logger.info "Processing by #{name}"
  if request.params.any?
    Rails.logger.info "  Parameters: #{request.params.inspect}"
  end

  super
end
expose(name, options = {}, &block) click to toggle source
# File lib/sliver/rails/action.rb, line 16
def self.expose(name, options = {}, &block)
  add_exposed_methods name, options, &block if block_given?

  locals << name
end
locals() click to toggle source
# File lib/sliver/rails/action.rb, line 37
def self.locals
  @locals ||= []
end
template() click to toggle source
# File lib/sliver/rails/action.rb, line 41
def self.template
  @template
end
use_template(template) click to toggle source
# File lib/sliver/rails/action.rb, line 45
def self.use_template(template)
  @template = template
end

Public Instance Methods

call() click to toggle source
# File lib/sliver/rails/action.rb, line 49
def call
  #
end
locals() click to toggle source
# File lib/sliver/rails/action.rb, line 53
def locals
  self.class.locals.inject({}) do |hash, name|
    hash[name] = send name
    hash
  end
end

Private Instance Methods

bodied_request?() click to toggle source
# File lib/sliver/rails/action.rb, line 62
def bodied_request?
  BODIED_METHODS.include? environment['REQUEST_METHOD'].downcase
end
content_type_header() click to toggle source
# File lib/sliver/rails/action.rb, line 66
def content_type_header
  environment['Content-Type']      ||
  environment['HTTP_CONTENT_TYPE'] ||
  environment['CONTENT_TYPE']
end
content_types() click to toggle source
# File lib/sliver/rails/action.rb, line 72
def content_types
  content_type_header.split(/;\s?/)
end
json_request?() click to toggle source
# File lib/sliver/rails/action.rb, line 76
def json_request?
  content_types.include? 'application/json'
end
params() click to toggle source
# File lib/sliver/rails/action.rb, line 80
def params
  @params ||= ActionController::Parameters.new request_params
end
request_params() click to toggle source
# File lib/sliver/rails/action.rb, line 84
def request_params
  @request_params ||= if bodied_request? && json_request?
    JSON.parse(request.body.read)
  else
    request.params
  end
end
set_response(status, body = nil) click to toggle source
# File lib/sliver/rails/action.rb, line 92
def set_response(status, body = nil)
  response.status = status
  response.body   = body unless body.nil?
end