33end
44require 'action_view'
55require 'action_controller'
6+ require 'gon/base'
7+ require 'gon/request'
68require 'gon/helpers'
79require 'gon/escaper'
810if defined? ( Rabl )
@@ -16,106 +18,47 @@ module Gon
1618 class << self
1719
1820 def all_variables
19- @request_env [ ' gon' ]
21+ Request . gon
2022 end
2123
2224 def clear
23- @request_env [ 'gon' ] = { }
25+ Request . clear
2426 end
2527
26- def request_env = ( environment )
27- @request_env = environment
28- @request_env [ 'gon' ] ||= { }
29- end
28+ def method_missing ( method , *args , &block )
29+ if ( method . to_s =~ /=$/ )
30+ if public_method_name? method
31+ raise "You can't use Gon public methods for storing data"
32+ end
3033
31- def request_env
32- if defined? ( @request_env )
33- return @request_env
34+ set_variable ( method . to_s . delete ( '=' ) , args [ 0 ] )
35+ else
36+ get_variable ( method . to_s )
3437 end
3538 end
3639
37- def request
38- @request_id if defined? @request_id
40+ def inspect
41+ 'Gon'
3942 end
4043
41- def request = ( request_id )
42- @request_id = request_id
43- end
44-
45- def method_missing ( m , *args , &block )
46- if ( m . to_s =~ /=$/ )
47- if public_methods . include? ( RUBY_VERSION > '1.9' ? m . to_s [ 0 ..-2 ] . to_sym : m . to_s [ 0 ..-2 ] )
48- raise "You can't use Gon public methods for storing data"
49- end
50- set_variable ( m . to_s . delete ( '=' ) , args [ 0 ] )
51- else
52- get_variable ( m . to_s )
53- end
54- end
44+ private
5545
5646 def get_variable ( name )
57- @request_env [ ' gon' ] [ name ]
47+ Request . gon [ name ]
5848 end
5949
6050 def set_variable ( name , value )
61- @request_env [ ' gon' ] [ name ] = value
51+ Request . gon [ name ] = value
6252 end
6353
64- %w( rabl jbuilder ) . each do |builder_name |
65- define_method builder_name do |*options |
66- if options . first . is_a? String
67- warn "[DEPRECATION] view_path argument is now optional. If you need to specify it please use #{ builder } (:template => 'path')"
68- options = options . extract_options! . merge ( :template => options [ 0 ] )
54+ def public_method_name? ( method )
55+ public_methods . include? (
56+ if RUBY_VERSION > '1.9'
57+ method . to_s [ 0 ..-2 ] . to_sym
6958 else
70- options = ( options && options . first . is_a? ( Hash ) ) ? options . first : { }
59+ method . to_s [ 0 ..- 2 ]
7160 end
72-
73- builder_module = get_builder ( builder_name )
74-
75- data = builder_module . send ( "parse_#{ builder_name } " , get_template_path ( options , builder_name ) , get_controller ( options ) )
76-
77- if options [ :as ]
78- set_variable ( options [ :as ] . to_s , data )
79- elsif data . is_a? Hash
80- data . each do |key , value |
81- set_variable ( key , value )
82- end
83- else
84- set_variable ( builder_name , data )
85- end
86- end
87- end
88- alias_method :orig_jbuilder , :jbuilder
89-
90- def jbuilder ( *options )
91- raise NoMethodError . new ( 'You can use Jbuilder support only in 1.9+' ) if RUBY_VERSION < '1.9'
92- orig_jbuilder ( *options )
93- end
94-
95- private
96-
97- def get_builder ( builder_name )
98- begin
99- "Gon::#{ builder_name . classify } " . constantize
100- rescue
101- raise NoMethodError . new ( "You should define #{ builder_name . classify } in your Gemfile" )
102- end
103- end
104-
105- def get_controller ( options )
106- options [ :controller ] ||
107- @request_env [ 'action_controller.instance' ] ||
108- @request_env [ 'action_controller.rescue.response' ] .
109- instance_variable_get ( '@template' ) .
110- instance_variable_get ( '@controller' )
111- end
112-
113- def get_template_path ( options , extension )
114- if options [ :template ]
115- File . extname ( options [ :template ] ) == ".#{ extension } " ? options [ :template ] : "#{ options [ :template ] } .#{ extension } "
116- else
117- "app/views/#{ get_controller ( options ) . controller_path } /#{ get_controller ( options ) . action_name } .json.#{ extension } "
118- end
61+ )
11962 end
12063
12164 end
0 commit comments