Sha256: 89a0c62692849b2bcc346bf1d77297f6e89c3894d65187bce4721c49dbdad44f

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

module Gon
  module Base
    class << self

      def render_data(options)
        data = Gon.all_variables || {}
        if Gon.global.all_variables.present?
          data[:global] = Gon.global.all_variables
        end
        namespace, tag, cameled = parse_options options
        start     = "#{tag if tag}window.#{namespace} = {};"
        script    = ''

        data.each do |key, val|
          if cameled
            script << "#{namespace}.#{key.to_s.camelize(:lower)}=#{val.to_json};"
          else
            script << "#{namespace}.#{key.to_s}=#{val.to_json};"
          end
        end

        script = start + Gon::Escaper.escape(script)
        script << '</script>' if tag
        script.html_safe
      end

      def get_controller(options)
        options[:controller] ||
          Gon::Request.env['action_controller.instance'] ||
          Gon::Request.env['action_controller.rescue.response'].
          instance_variable_get('@template').
          instance_variable_get('@controller')
      end

      def get_template_path(options, extension)
        if options[:template]
          if right_extension?(extension, options[:template])
            options[:template]
          else
            [options[:template], extension].join('.')
          end
        else
          controller = get_controller(options).controller_path
          action = get_controller(options).action_name
          "app/views/#{controller}/#{action}.json.#{extension}"
        end
      end

      private

      def parse_options(options)
        namespace  = options[:namespace] || 'gon'
        need_tag   = options[:need_tag].nil? || options[:need_tag]
        need_type  = options[:need_type].present? && options[:need_type]
        cameled    = options[:camel_case]
        tag = need_tag && (need_type ? '<script type="text/javascript">' : '<script>')

        [namespace, tag, cameled]
      end

      def right_extension?(extension, template_path)
        File.extname(template_path) == ".#{extension}"
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gon-3.0.5 lib/gon/base.rb