Class: UzuUzu::Application
Instance Attribute Summary collapse
-
#after_filters ⇒ Object
Returns the value of attribute after_filters.
-
#before_filters ⇒ Object
Returns the value of attribute before_filters.
-
#config_file ⇒ Object
Returns the value of attribute config_file.
-
#controller_root ⇒ Object
Returns the value of attribute controller_root.
-
#controllers ⇒ Object
Returns the value of attribute controllers.
-
#environments ⇒ Object
Returns the value of attribute environments.
-
#helper_root ⇒ Object
Returns the value of attribute helper_root.
-
#helpers ⇒ Object
Returns the value of attribute helpers.
-
#name ⇒ Object
Returns the value of attribute name.
-
#view_root ⇒ Object
Returns the value of attribute view_root.
Class Method Summary collapse
- .after_filters ⇒ Object
- .before_filters ⇒ Object
- .controller_root ⇒ Object
-
.controllers ⇒ Object
initialize.
- .current ⇒ Object
- .helper_root ⇒ Object
- .helpers ⇒ Object
- .view_root ⇒ Object
Instance Method Summary collapse
- #auto_require(env) ⇒ Object
- #call(env) ⇒ Object
- #di_thread(request, response, controller, helper, action, query, route) ⇒ Object
- #find_action(controller, query) ⇒ Object
- #find_controller(env) ⇒ Object
- #find_helper(name, route) ⇒ Object
-
#get_class_map(name, controller, route, query) ⇒ Object
auto_require.
-
#initialize(options = {}) {|_self| ... } ⇒ Application
constructor
A new instance of Application.
-
#not_found(response) ⇒ Object
send_action.
-
#require_noerror(path) ⇒ Object
call.
- #send_action(request, response, controller, action, query) ⇒ Object
Constructor Details
#initialize(options = {}) {|_self| ... } ⇒ Application
Returns a new instance of Application.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/uzuuzu-core/application.rb', line 39 def initialize(={}) ::Thread.current[:application] = self .each do |key, value| case(key) when :name, 'name' @name = value when :config, 'config' @config_file = value end end if .kind_of?(Hash) @name ||= :uzuuzu @environments = Environments.new(@config_file) ::UzuUzu.apps[@name] = self yield self if block_given? end |
Instance Attribute Details
#after_filters ⇒ Object
Returns the value of attribute after_filters.
19 20 21 |
# File 'lib/uzuuzu-core/application.rb', line 19 def after_filters @after_filters end |
#before_filters ⇒ Object
Returns the value of attribute before_filters.
17 18 19 |
# File 'lib/uzuuzu-core/application.rb', line 17 def before_filters @before_filters end |
#config_file ⇒ Object
Returns the value of attribute config_file.
11 12 13 |
# File 'lib/uzuuzu-core/application.rb', line 11 def config_file @config_file end |
#controller_root ⇒ Object
Returns the value of attribute controller_root.
23 24 25 |
# File 'lib/uzuuzu-core/application.rb', line 23 def controller_root @controller_root end |
#controllers ⇒ Object
Returns the value of attribute controllers.
15 16 17 |
# File 'lib/uzuuzu-core/application.rb', line 15 def controllers @controllers end |
#environments ⇒ Object
Returns the value of attribute environments.
13 14 15 |
# File 'lib/uzuuzu-core/application.rb', line 13 def environments @environments end |
#helper_root ⇒ Object
Returns the value of attribute helper_root.
25 26 27 |
# File 'lib/uzuuzu-core/application.rb', line 25 def helper_root @helper_root end |
#helpers ⇒ Object
Returns the value of attribute helpers.
21 22 23 |
# File 'lib/uzuuzu-core/application.rb', line 21 def helpers @helpers end |
#name ⇒ Object
Returns the value of attribute name.
9 10 11 |
# File 'lib/uzuuzu-core/application.rb', line 9 def name @name end |
#view_root ⇒ Object
Returns the value of attribute view_root.
27 28 29 |
# File 'lib/uzuuzu-core/application.rb', line 27 def view_root @view_root end |
Class Method Details
.after_filters ⇒ Object
71 72 73 |
# File 'lib/uzuuzu-core/application.rb', line 71 def self.after_filters @@after_filters ||= [Controller.method(:after_all)] end |
.before_filters ⇒ Object
63 64 65 |
# File 'lib/uzuuzu-core/application.rb', line 63 def self.before_filters @@before_filters ||= [Controller.method(:before_all)] end |
.controller_root ⇒ Object
95 96 97 |
# File 'lib/uzuuzu-core/application.rb', line 95 def self.controller_root @@controller_root ||= 'controller' end |
.controllers ⇒ Object
initialize
55 56 57 |
# File 'lib/uzuuzu-core/application.rb', line 55 def self.controllers @@controllers ||= [Controller] end |
.current ⇒ Object
32 33 34 |
# File 'lib/uzuuzu-core/application.rb', line 32 def self.current ::Thread.current[:application] end |
.helper_root ⇒ Object
111 112 113 |
# File 'lib/uzuuzu-core/application.rb', line 111 def self.helper_root @@helper_root ||= 'helper' end |
.helpers ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/uzuuzu-core/application.rb', line 79 def self.helpers @@helpers ||= [ Helper::Controller, Helper::Form, Helper::Jquery, Helper::Localize, Helper::Renderer, Helper::Route, Helper::XHtml ] end |
.view_root ⇒ Object
103 104 105 |
# File 'lib/uzuuzu-core/application.rb', line 103 def self.view_root @@view_root ||= 'view' end |
Instance Method Details
#auto_require(env) ⇒ Object
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/uzuuzu-core/application.rb', line 176 def auto_require(env) require_base = "/#{@name.to_s}" require_base = '' if @name == :uzuuzu || @name == '' || @name.blank? array = [] if env['PATH_INFO'] == '/' require_noerror "#{controller_root}#{require_base}/index" require_noerror "#{helper_root}#{require_base}/index" end env['PATH_INFO'].split('/').each do |path| array << path begin require_noerror "#{controller_root}#{require_base}#{array.join('/')}/index" require_noerror "#{helper_root}#{require_base}#{array.join('/')}/index" require_noerror "#{controller_root}#{require_base}#{array.join('/')}" require_noerror "#{helper_root}#{require_base}#{array.join('/')}" rescue end end end |
#call(env) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/uzuuzu-core/application.rb', line 122 def call(env) Thread.current[:application] = self request = UzuUzu::Request.new(env) response = UzuUzu::Response.new auto_require(env) classies = find_controller(env) if classies.blank? di_thread(request, response, nil, nil, nil, nil, nil) return not_found(response) end is_send = false action_return = nil render = nil classies.reverse.each do |map| controller_class = map[:controller] helper_module = map[:helper] query = map[:query] route = map[:route] controller = controller_class.new action, query = find_action(controller, query) di_thread(request, response, nil, nil, nil, query, route) next if action.blank? controller.extend(::UzuUzu::Controller) helper = Helper::Helper.new helpers.each do |h| helper.extend(h) end helper.extend(helper_module) if helper_module.kind_of?(::Module) di_thread(request, response, controller, helper, action, query, route) is_send = true action_return = send_action(request, response, controller, action, query) if response.body.blank? render = helper.render(action) end break end unless is_send return not_found(response) end if response.status == 200 and response.body.blank? response.write render || action_return end response.finish end |
#di_thread(request, response, controller, helper, action, query, route) ⇒ Object
287 288 289 290 291 292 293 294 295 296 |
# File 'lib/uzuuzu-core/application.rb', line 287 def di_thread(request, response, controller, helper, action, query, route) current = ::Thread.current current[:request] = request current[:response] = response current[:controller] = controller current[:helper] = helper current[:action] = action current[:query] = query current[:route] = route end |
#find_action(controller, query) ⇒ Object
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
# File 'lib/uzuuzu-core/application.rb', line 301 def find_action(controller, query) action = nil index_flag = false query[-1] = query[-1].sub(/\.\w+$/, '') if query && query[-1] if query[0] && controller.respond_to?(query[0]) action = query.shift end if action.nil? && controller.respond_to?(:index) action = 'index' end unless action.nil? arity = controller.method(action).arity owner = controller.method(action).owner unless controller.method(action).owner == controller.class index_flag = true if controller.respond_to?(:use_actions) controller.actions.each do |use_action| if use_action.to_s == action.to_s index_flag = false end end end end unless (arity >= 0 && query.size == arity) || (arity < 0 && query.size >= ((-1 * arity)-1)) index_flag = true end if index_flag && !(action == 'index') && controller.respond_to?(:index) query.unshift(action) action = 'index' end if controller.respond_to?(action) arity = controller.method(action).arity unless (arity >= 0 && query.size == arity) || (arity < 0 && query.size >= ((-1 * arity)-1)) action = nil end else action = nil end end [action, query] end |
#find_controller(env) ⇒ Object
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 |
# File 'lib/uzuuzu-core/application.rb', line 234 def find_controller(env) classies = [] request_paths = env['PATH_INFO'].split('/') request_paths.shift if request_paths[0].blank? request_paths << '' _controllers = controllers.clone _base = "::#{@name.to_s.camel_case}" _base = '' if @name == :uzuuzu || @name == 'uzuuzu' begin _controllers << eval("#{_base}::#{controller_root.camel_case}") rescue LoadError => e rescue => e end _controllers.each do |c| _c = c _h = nil request_paths.each_with_index do |request_path, index| break if _c.nil? c_str = request_path.camel_case if c_str != 'Index' route = "#{request_paths[0...index].join('/')}" if route.blank? route = "#{env['SCRIPT_NAME']}/index" route.blank? else route = "#{env['SCRIPT_NAME']}/#{route}/index" end query = request_paths[index...-1] map = get_class_map('Index', _c, route, query) if map && map[:controller].kind_of?(::Class) classies << map end end next if c_str.blank? route = "#{env['SCRIPT_NAME']}/#{request_paths[0..index].join('/')}" query = request_paths[(index+1)...-1] map = get_class_map(c_str, _c, route, query) _c = nil if map classies << map if map[:controller].kind_of?(::Class) if map[:controller].kind_of?(::Class) || map[:controller].kind_of?(::Module) _c = map[:controller] end end end end classies end |
#find_helper(name, route) ⇒ Object
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/uzuuzu-core/application.rb', line 213 def find_helper(name, route) routes = route.split('/').map { |a| a.camel_case } if routes.blank? || name != routes[-1] routes << "#{name.camel_case}" end routes.shift if routes[0].blank? _base = "::#{@name.to_s.camel_case}" _base = '' if @name == :uzuuzu || @name == 'uzuuzu' helper = eval("#{_base}::#{helper_root.camel_case}") routes.each do |const_name| helper = helper.const_get(const_name) if helper.const_defined?(const_name) end helper rescue LoadError => e rescue NameError => e rescue => e end |
#get_class_map(name, controller, route, query) ⇒ Object
auto_require
196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/uzuuzu-core/application.rb', line 196 def get_class_map(name, controller, route, query) _c = controller.const_get(name) if controller.const_defined?(name) return nil if _c.nil? return nil if _c.name.index(controller.name).nil? _h = find_helper(name, route) map = { :controller => _c, :helper => _h, :route => route, :query => query } rescue NameError => e end |
#not_found(response) ⇒ Object
send_action
373 374 375 376 377 378 |
# File 'lib/uzuuzu-core/application.rb', line 373 def not_found(response) catch(:finish) do response.not_found end response.finish end |
#require_noerror(path) ⇒ Object
call
169 170 171 172 |
# File 'lib/uzuuzu-core/application.rb', line 169 def require_noerror(path) require path rescue LoadError => e end |
#send_action(request, response, controller, action, query) ⇒ Object
349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 |
# File 'lib/uzuuzu-core/application.rb', line 349 def send_action(request, response, controller, action, query) value = nil catch(:finish) do before_filters.each do |filter| filter.call if filter.respond_to?(:call) end controller.send(:before) if controller.respond_to?(:before) controller.send("before_#{action}") if controller.respond_to?("before_#{action}") value = controller.send(action, *query) end catch(:finish) do controller.send("after_#{action}") if controller.respond_to?("after_#{action}") end catch(:finish) do controller.send(:after) if controller.respond_to?(:after) end after_filters.reverse.each do |filter| catch(:finish) do filter.call if filter.respond_to?(:call) end end value end |