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