class Gon

Constants

VERSION

Public Class Methods

all_variables() click to toggle source
# File lib/gon.rb, line 81
def all_variables
  current_gon ? current_gon.gon : {}
end
clear() click to toggle source
# File lib/gon.rb, line 85
def clear
  current_gon.clear if current_gon
end
get_variable(name) click to toggle source
# File lib/gon.rb, line 51
def get_variable(name)
  current_gon.gon[name]
end
global() click to toggle source
# File lib/gon.rb, line 28
def global
  Gon::Global
end
inspect() click to toggle source
# File lib/gon.rb, line 100
def inspect
  'Gon'
end
jbuilder(*args) click to toggle source
# File lib/gon.rb, line 94
def jbuilder(*args)
  ensure_template_handler_is_defined
  data, options = Gon::Jbuilder.handler(args)
  store_builder_data 'jbuilder', data, options
end
merge_variable(name, value) click to toggle source
# File lib/gon.rb, line 59
def merge_variable(name, value)
  old_value = all_variables[name]
  if value.is_a?(Hash) && old_value.is_a?(Hash)
    value = old_value.deep_merge(value)
  end
  set_variable(name, value)
end
method_missing(method, *args, &block) click to toggle source
# File lib/gon.rb, line 36
def method_missing(method, *args, &block)
  if method.to_s =~ /=$/
    if public_method_name?(method)
      raise "You can't use Gon public methods for storing data: #{method}"
    end
    if self == Gon && !current_gon
      raise 'Assign request-specific gon variables only through `gon` helper, not through Gon constant'
    end

    set_variable(method.to_s.delete('='), args[0])
  else
    get_variable(method.to_s)
  end
end
push(data = {}, merge = false) click to toggle source
# File lib/gon.rb, line 67
def push(data = {}, merge = false)
  raise 'Object must have each_pair method' unless data.respond_to? :each_pair

  if merge
    data.each_pair do |name, value|
      merge_variable(name.to_s, value)
    end
  else
    data.each_pair do |name, value|
      set_variable(name.to_s, value)
    end
  end
end
rabl(*args) click to toggle source
# File lib/gon.rb, line 89
def rabl(*args)
  data, options = Gon::Rabl.handler(args)
  store_builder_data 'rabl', data, options
end
set_variable(name, value) click to toggle source
# File lib/gon.rb, line 55
def set_variable(name, value)
  current_gon.gon[name] = value
end
watch() click to toggle source
# File lib/gon.rb, line 32
def watch
  Gon::Watch
end

Private Class Methods

current_gon() click to toggle source
# File lib/gon.rb, line 106
def current_gon
  RequestStore.store[:gon]
end
ensure_template_handler_is_defined() click to toggle source

JbuilderTemplate will not be defined if jbuilder is required before gon. By loading jbuilder again, JbuilderTemplate will now be defined

# File lib/gon.rb, line 127
def ensure_template_handler_is_defined
  load 'jbuilder.rb' unless defined?(JbuilderTemplate)
end
public_method_name?(method) click to toggle source
# File lib/gon.rb, line 120
def public_method_name?(method)
  public_methods.include?(method.to_s[0..-2].to_sym)
end
store_builder_data(builder, data, options) click to toggle source
# File lib/gon.rb, line 110
def store_builder_data(builder, data, options)
  if options[:as]
    set_variable(options[:as].to_s, data)
  elsif data.is_a? Hash
    data.each { |k, v| set_variable(k, v) }
  else
    set_variable(builder, data)
  end
end