-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgon.rb
More file actions
105 lines (87 loc) · 2.08 KB
/
gon.rb
File metadata and controls
105 lines (87 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
if defined?(Jbuilder)
gem 'blankslate'
end
require 'action_view'
require 'action_controller'
require 'gon/base'
require 'gon/global'
require 'gon/watch'
require 'gon/request'
require 'gon/helpers'
require 'gon/escaper'
if defined?(Rabl)
require 'gon/rabl'
end
if defined?(Jbuilder)
require 'gon/jbuilder'
end
class Gon
class << self
def global
Gon::Global
end
def watch
Gon::Watch
end
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"
end
set_variable(method.to_s.delete('='), args[0])
else
get_variable(method.to_s)
end
end
def all_variables
Request.gon
end
def clear
Request.clear
end
def rabl(*args)
unless Gon.constants.include?(:Rabl)
raise "Possible wrong require order problem - try to add `gem 'rabl'` before `gem 'gon'` in your Gemfile"
end
data, options = Gon::Rabl.handler(args)
store_builder_data 'rabl', data, options
end
def jbuilder(*args)
unless Gon.constants.include?(:Jbuilder)
raise "Possible wrong require order problem - try to add `gem 'jbuilder'` before `gem 'gon'` in your Gemfile"
end
data, options = Gon::Jbuilder.handler(args)
store_builder_data 'jbuilder', data, options
end
def inspect
'Gon'
end
private
def get_variable(name)
Request.gon[name]
end
def set_variable(name, value)
Request.gon[name] = value
end
def store_builder_data(builder, data, options)
if options[:as]
set_variable(options[:as].to_s, data)
elsif data.is_a? Hash
data.each do |key, value|
set_variable(key, value)
end
else
set_variable(builder, data)
end
end
def public_method_name?(method)
public_methods.include?(
if RUBY_VERSION > '1.9'
method.to_s[0..-2].to_sym
else
method.to_s[0..-2]
end
)
end
end
end