module Gon::Rabl

Public Class Methods

handler(args, global = false) click to toggle source
# File lib/gon/rabl.rb, line 16
def handler(args, global = false)
  options = parse_options_from args, global
  if global && !options[:template]
    raise 'You should provide :template when use rabl with global variables'
  end

  data = parse_rabl            Gon::EnvFinder.template_path(options, 'rabl'),
    Gon::EnvFinder.controller_env(options),
    options[:locals]

  [data, options]
end

Private Class Methods

include_helpers() click to toggle source
# File lib/gon/rabl.rb, line 80
def include_helpers
  unless ::Rabl::Engine.include? ::ActionView::Helpers
    ::Rabl::Engine.send(:include, ::ActionView::Helpers)
  end
end
new_api?(args) click to toggle source
# File lib/gon/rabl.rb, line 90
def new_api?(args)
  args.first.is_a? Hash
end
old_api?(args) click to toggle source
# File lib/gon/rabl.rb, line 86
def old_api?(args)
  args.first.is_a? String
end
parse_options_from(args, global) click to toggle source
# File lib/gon/rabl.rb, line 63
def parse_options_from(args, global)
  if old_api? args
    unless global
      text =  "[DEPRECATION] view_path argument is now optional. "
      text << "If you need to specify it, "
      text << "please use gon.rabl(:template => 'path')"
      warn text
    end

    args.extract_options!.merge(:template => args[0])
  elsif new_api? args
    args.first
  else
    {}
  end
end
parse_rabl(rabl_path, controller, locals) click to toggle source
# File lib/gon/rabl.rb, line 32
def parse_rabl(rabl_path, controller, locals)
  if defined? ::Rabl
    parse_with_rabl rabl_path, controller, locals
  elsif defined? ::RablRails
    parse_with_rabl_rails rabl_path, controller, locals
  else
    raise 'rabl or rabl-rails must be required in order to use gon.rabl'
  end
end
parse_with_rabl(rabl_path, controller, locals) click to toggle source
# File lib/gon/rabl.rb, line 42
def parse_with_rabl(rabl_path, controller, locals)
  locals ||= {}
  source = File.read(rabl_path)
  include_helpers
  rabl_engine = ::Rabl::Engine.new(source, :format => 'json', :template => rabl_path)
  output = rabl_engine.render(controller, locals)
  JSON.parse(output)
end
parse_with_rabl_rails(rabl_path, controller, locals) click to toggle source
# File lib/gon/rabl.rb, line 51
def parse_with_rabl_rails(rabl_path, controller, locals)
  locals ||= {}
  source = File.read(rabl_path)
  original_formats = controller.formats
  controller.formats = [:json]
  view_context = controller.send(:view_context)
  locals.each { |k, v| view_context.assigns[k.to_s] = v }
  output = RablRails::Library.instance.get_rendered_template(source, view_context)
  controller.formats = original_formats
  JSON.parse(output)
end