lib/gon/rabl.rb in gon-2.3.0 vs lib/gon/rabl.rb in gon-3.0.0
- old
+ new
@@ -1,15 +1,64 @@
+require 'action_view'
require 'rabl'
module Gon
module Rabl
class << self
+ 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
+
+ include_helpers
+
+ data = parse_rabl \
+ Gon::Base.get_template_path(options, 'rabl'),
+ Gon::Base.get_controller(options)
+
+ [data, options]
+ end
+
+ private
+
def parse_rabl(rabl_path, controller)
source = File.read(rabl_path)
rabl_engine = ::Rabl::Engine.new(source, :format => 'json')
output = rabl_engine.render(controller, {})
JSON.parse(output)
+ end
+
+ 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
+
+ def include_helpers
+ unless ::Rabl::Engine.include? ::ActionView::Helpers
+ ::Rabl::Engine.send(:include, ::ActionView::Helpers)
+ end
+ end
+
+ def old_api?(args)
+ args.first.is_a? String
+ end
+
+ def new_api?(args)
+ args.first.is_a? Hash
end
end
end
end