Class: Swee::Controller
- Includes:
- ControllerFilter
- Defined in:
- lib/swee/controller.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#action_name ⇒ Object
readonly
, :response.
-
#controller_name ⇒ Object
readonly
, :response.
-
#env ⇒ Object
readonly
, :response.
-
#request ⇒ Object
readonly
, :response.
Instance Method Summary collapse
- #__actions ⇒ Object
- #_name ⇒ Object
-
#cookies ⇒ Object
TODO.
-
#params ⇒ Object
获取 参数.
- #rack_request ⇒ Object
-
#rack_request_to_hash ⇒ Object
映射 rake request -> struct.
- #rake_format(body, type) ⇒ Object
-
#render(options = {}) ⇒ Object
渲染 text: render :text => “foobar” erb: render (可省略对应寻找view) json: render :json => { foo: “bar” }.
- #response ⇒ Object
-
#sessions ⇒ Object
TODO.
-
#warp_request(env, route) ⇒ Object
包装request rack 的 request -> controller request .方法的 映射 -> [] 方法 Struct 简单的包装.
Methods included from ControllerFilter
#define_filter, #delete_duplicated_filter, #filter!, #find_controller, #find_filter_methods, fliter_methods, #fliter_methods, included
Instance Attribute Details
#action_name ⇒ Object (readonly)
, :response
15 16 17 |
# File 'lib/swee/controller.rb', line 15 def action_name @action_name end |
#controller_name ⇒ Object (readonly)
, :response
15 16 17 |
# File 'lib/swee/controller.rb', line 15 def controller_name @controller_name end |
#env ⇒ Object (readonly)
, :response
15 16 17 |
# File 'lib/swee/controller.rb', line 15 def env @env end |
#request ⇒ Object (readonly)
, :response
15 16 17 |
# File 'lib/swee/controller.rb', line 15 def request @request end |
Instance Method Details
#__actions ⇒ Object
128 129 130 |
# File 'lib/swee/controller.rb', line 128 def __actions ControllerFilter.fliter_methods[self.class.to_s] end |
#_name ⇒ Object
47 48 49 |
# File 'lib/swee/controller.rb', line 47 def _name @name end |
#params ⇒ Object
获取 参数
60 61 62 |
# File 'lib/swee/controller.rb', line 60 def params { "controller" => @controller_name, "action" => @action_name }.merge @rack_request.params end |
#rack_request ⇒ Object
51 52 53 |
# File 'lib/swee/controller.rb', line 51 def rack_request @rack_request end |
#rack_request_to_hash ⇒ Object
映射 rake request -> struct
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 |
# File 'lib/swee/controller.rb', line 65 def rack_request_to_hash _request = rack_request _body = { ip: _request.ip, cookies: _request., session: _request.session, session_options: _request., referer: _request.referer, user_agent: _request.user_agent, method: _request.request_method, path: _request.path, path_info: _request.path_info, params: _request.params, port: _request.port, url: _request.url, base_url: _request.base_url, fullpath: _request.fullpath, host: _request.host, host_with_port: _request.host_with_port, logger: _request.logger, media_type: _request.media_type, media_type_params: _request.media_type_params, POST: _request.POST, query_string: _request.query_string, scheme: _request.scheme, script_name: _request.script_name, ssl: _request.ssl?, trace: _request.trace?, xhr: _request.xhr?, client: _request['client'] } end |
#rake_format(body, type) ⇒ Object
114 115 116 |
# File 'lib/swee/controller.rb', line 114 def rake_format body,type end |
#render(options = {}) ⇒ Object
渲染text: render :text => “foobar” erb: render (可省略对应寻找view) json: render :json => { foo: “bar” }
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/swee/controller.rb', line 102 def render ={} if .empty? _render_file else if [:text] _render_text elsif [:json] _render_json end end end |
#response ⇒ Object
55 56 57 |
# File 'lib/swee/controller.rb', line 55 def response @response end |
#warp_request(env, route) ⇒ Object
包装request rack 的 request -> controller request .方法的 映射 -> [] 方法Struct 简单的包装
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 |
# File 'lib/swee/controller.rb', line 21 def warp_request env,route @env = env @rack_request = Rack::Request.new env # 暂时用 rack 方式接受 TODO: 解析 env # @response = Rack::Response.new @controller_name = route.controller_name @name = route.controller @action_name = route.action request_struct = Struct.new(:hash) do def method_missing method_name, *args, &blk if hash.key? method_name hash[method_name] else case method_name when :remote_ip; hash[:ip] when :post?; hash[:method] == "POST" when :get?; hash[:method] == "GET" when :xhr?; hash[:xhr] else super end end end end @request = request_struct.new(rack_request_to_hash) end |