Class: Swee::Controller

Inherits:
Object show all
Includes:
ControllerFilter
Defined in:
lib/swee/controller.rb

Direct Known Subclasses

HomeController

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ControllerFilter

#define_filter, #delete_duplicated_filter, #filter!, #find_controller, #find_filter_methods, fliter_methods, #fliter_methods, included

Instance Attribute Details

#action_nameObject (readonly)

, :response



15
16
17
# File 'lib/swee/controller.rb', line 15

def action_name
  @action_name
end

#controller_nameObject (readonly)

, :response



15
16
17
# File 'lib/swee/controller.rb', line 15

def controller_name
  @controller_name
end

#envObject (readonly)

, :response



15
16
17
# File 'lib/swee/controller.rb', line 15

def env
  @env
end

#requestObject (readonly)

, :response



15
16
17
# File 'lib/swee/controller.rb', line 15

def request
  @request
end

Instance Method Details

#__actionsObject



128
129
130
# File 'lib/swee/controller.rb', line 128

def __actions
  ControllerFilter.fliter_methods[self.class.to_s]
end

#_nameObject



47
48
49
# File 'lib/swee/controller.rb', line 47

def _name
  @name
end

#cookiesObject

TODO



119
120
121
# File 'lib/swee/controller.rb', line 119

def cookies

end

#paramsObject

获取 参数



60
61
62
# File 'lib/swee/controller.rb', line 60

def params
  { "controller" => @controller_name, "action" => @action_name }.merge @rack_request.params
end

#rack_requestObject



51
52
53
# File 'lib/swee/controller.rb', line 51

def rack_request
  @rack_request
end

#rack_request_to_hashObject

映射 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.cookies,
      session:            _request.session,
      session_options:    _request.session_options,
      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 options={}
  if options.empty?
    _render_file
  else
    if options[:text]
      _render_text options
    elsif options[:json]
      _render_json options
    end
  end
end

#responseObject



55
56
57
# File 'lib/swee/controller.rb', line 55

def response
  @response
end

#sessionsObject

TODO



124
125
126
# File 'lib/swee/controller.rb', line 124

def sessions

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