lib/json_builder/template.rb in json_builder-2.0.6 vs lib/json_builder/template.rb in json_builder-3.0.0

- old
+ new

@@ -1,27 +1,53 @@ -require 'action_view/base' -require 'action_view/template' - module ActionView #:nodoc: class Base cattr_accessor :pretty_print_json - @@pretty_print_json = false + @@pretty_print_json = defined?(Rails) && Rails.env.development? + + cattr_accessor :json_callback + @@json_callback = true end end -module ActionView - module Template::Handlers - class JSONBuilder < Template::Handler - include Compilable +# Rails 2.X Template +if defined?(Rails) && Rails.version =~ /^2/ + require 'action_view/base' + require 'action_view/template' - self.default_format = Mime::JSON + module ActionView + module TemplateHandlers + class JSONBuilder < TemplateHandler + include Compilable - def compile(template) - "json = ::JSONBuilder::Generator.new(:pretty => #{ActionView::Base.pretty_print_json});" + - template.source + - ";json.compile!;" + def compile(template) + "::JSONBuilder::Compiler.generate(:scope => self, :pretty => ActionView::Base.pretty_print_json, :callback => ActionView::Base.json_callback) {#{template.source}};" + end end end end + + ActionView::Template.register_template_handler :json_builder, ActionView::TemplateHandlers::JSONBuilder end -ActionView::Template.register_template_handler :json_builder, ActionView::Template::Handlers::JSONBuilder +# Rails 3.X Template +if defined?(Rails) && Rails.version =~ /^3/ + module ActionView + module Template::Handlers + class JSONBuilder + class_attribute :default_format + self.default_format = Mime::JSON + + def self.call(template) + source = if template.source.empty? + File.read(template.identifier) + else # use source + template.source + end + + "::JSONBuilder::Compiler.generate(:scope => self, :pretty => ActionView::Base.pretty_print_json, :callback => ActionView::Base.json_callback) {#{source}};" + end + end + end + end + + ActionView::Template.register_template_handler :json_builder, ActionView::Template::Handlers::JSONBuilder +end