module Grape::Formatter::GarRabl

Attributes

endpoint[R]
env[R]

Public Class Methods

call(object, env) click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 72
def call(object, env)
  @env = env
  @endpoint = env['api.endpoint']
  if rablable?
    rabl do |template|
      engine = ::Tilt.new(view_path(template), tilt_options)
      output = engine.render endpoint, {}
      output = wrap_output(output)
      if layout_template
        layout_template.render(endpoint) { output }
      else
        output
      end
    end
  else
    Grape::Formatter::GarJsonSerializer.call object, env
  end
end

Private Class Methods

layout_template() click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 129
def layout_template
  set_layouts_base unless env['api.tilt.layouts_base']
  ver = env['rack.routing_args'][:route_info].route_version
  layout_path = "#{env['api.tilt.layouts_base']}/#{ver}.json.haml"
  if File.exist?(layout_path)
    ::Tilt.new(layout_path, tilt_options.merge(format: :xhtml, ugly: true))
  else
    nil
  end
rescue
  nil
end
rabl() { |template| ... } click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 110
def rabl
  template = endpoint.options[:route_options][:rabl]
  fail 'missing rabl template' unless template
  set_view_root unless env['api.tilt.root']
  yield template
end
rablable?() click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 106
def rablable?
  !!endpoint.options[:route_options][:rabl]
end
set_layouts_base() click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 121
def set_layouts_base
  fail "Use Rack::Config to set 'api.title.layouts_base' in config.ru"
end
set_view_root() click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 117
def set_view_root
  fail "Use Rack::Config to set 'api.tilt.root' in config.ru"
end
tilt_options() click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 125
def tilt_options
  { format: env['api.format'], view_path: env['api.tilt.root'] }
end
view_path(template) click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 98
def view_path(template)
  if template.split('.')[-1] == 'rabl'
    File.join(env['api.tilt.root'], template)
  else
    File.join(env['api.tilt.root'], (template + '.rabl'))
  end
end
wrap_output(output) click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 93
def wrap_output(output)
  template = MultiJson.dump({ result: "***" })
  template.gsub(%Q("***"), output)
end