require "rgviz_rails/view_helper"
# includes the view helper to ActionView::Base
ActionView::Base.send(:include, Rgviz::ViewHelper)
def _define_rgviz_class
::ActionController::Base.module_eval do
def render_with_rgviz(*args, &block)
if args.length == 1 && args[0].kind_of?(Hash)
hash = args.first
case hash[:rgviz]
when nil then render_without_rgviz *args, &block
else
model = hash[:rgviz]
conditions = hash[:conditions]
extensions = hash[:extensions]
query = params[:tq]
tqx = params[:tqx] || ''
tqx = Rgviz::Tqx.parse(tqx)
begin
executor = Rgviz::Executor.new model, query
options = {}
options[:conditions] = conditions if conditions
options[:extensions] = extensions if extensions
table = executor.execute options
yield table if block_given?
case tqx['out']
when 'json'
render_without_rgviz :text => Rgviz::JsRenderer.render(table, tqx)
when 'html'
render_without_rgviz :text => Rgviz::HtmlRenderer.render(table)
when 'csv'
csv_output = Rgviz::CsvRenderer.render(table)
if tqx['outFileName']
send_data csv_output, :filename => tqx['outFileName'], :type => 'text/csv'
else
render_without_rgviz :text => csv_output
end
else
render_without_rgviz :text => Rgviz::JsRenderer.render_error('not_supported', "Unsupported output type: #{out}", tqx)
end
rescue ParseException => e
case tqx['out']
when 'json'
render_without_rgviz :text => Rgviz::JsRenderer.render_error('invalid_query', e.message, tqx)
when 'html'
render_without_rgviz :text => "Error: #{e.message}"
when 'csv'
render_without_rgviz :text => "Error: #{e.message}"
else
render_without_rgviz :text => "Unsupported output type: #{out}"
end
end
end
else
render_without_rgviz *args, &block
end
end
alias_method_chain :render, :rgviz
end
end
if Rails::VERSION::MAJOR == 2
config.after_initialize do
_define_rgviz_class
end
else
class Railtie < Rails::Railtie
initializer "define rgviz class" do
_define_rgviz_class
end
end
end