objectsframework 1.2 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66c4aab9f98eb5bab5e492fdd128af96701b5fd1
4
- data.tar.gz: 8703ff842c0f3029f241b54dc6bfabbbc905f6f8
3
+ metadata.gz: 8473759ee5a1dcf0869209554775c3bbf357c19b
4
+ data.tar.gz: 5f1bf46f201910b77a8d1533eaf9b8923cc3e2ba
5
5
  SHA512:
6
- metadata.gz: 9ecfb074f8755e8804f987e00dabc3df1bff641ac92622156a6d9c04a80dcd47381390579762a673469584a1ce158eb04aff8ee1869d08d64d5ac7d1ff0c4cf1
7
- data.tar.gz: 84a2a4ce630ee03a788e317936a7cdaaeff87eccf5a8f28f45c8cd198783fc2bac312acc82f8e161a68788fde60cb93baa5b7a109599a91d9db15ba0ab4e51d0
6
+ metadata.gz: 31331c5f6f94730c621663814a2293f6ac16b7eae739563a2993e600657e12282fda9c3f0e8b8606a88c5bdfe620d820b3a666fced5302a58f79612a8f8a9632
7
+ data.tar.gz: 082b5bbe45575af69f5395c95b7ce785b98fc39715c8b807b345f6ddfd77e5002793f46618c31c483260b726bba21dc1dac8c6dcad24199193638245091a466c
@@ -0,0 +1,9 @@
1
+ module ObjectsFramework
2
+ module HookHelper
3
+ @@hooks = []
4
+
5
+ def self.add_hook(hook)
6
+ @@hooks << hook
7
+ end
8
+ end
9
+ end
@@ -3,8 +3,19 @@ module ObjectsFramework
3
3
  def self.fire(filter, klass)
4
4
  hooks_to_execute = klass.class.get_hooks.select { |hook| hook[:filter] == filter }
5
5
  hooks_to_execute.each do |hook|
6
- klass.send(hook[:method].to_sym)
6
+ result = klass.send(hook[:method].to_sym)
7
+ return result unless result == 0
7
8
  end
9
+ return 0
8
10
  end
11
+
12
+ def self.hook_exists?(filter,klass)
13
+ !(klass.class.get_hooks.select{|hook| hook[:filter] == filter}).empty?
14
+ end
15
+
16
+ def self.continue
17
+ return 0
18
+ end
19
+
9
20
  end
10
21
  end
@@ -1,7 +1,7 @@
1
1
  module ObjectsFramework
2
2
  class Object
3
- def set_instance_variables(request,response)
4
- @request,@response = request,response
3
+ def set_instance_variables(request,response,env)
4
+ @request,@response,@env = request,response,env
5
5
  return self;
6
6
  end
7
7
 
@@ -13,6 +13,10 @@ module ObjectsFramework
13
13
  @response
14
14
  end
15
15
 
16
+ def continue
17
+ return 0
18
+ end
19
+
16
20
  # Object hooks:
17
21
  # Usage: add_hook :filter => "afilter", :method => "yourmethod"
18
22
  # Available hooks/filters (some are not implement yet, but planned):
@@ -20,6 +24,9 @@ module ObjectsFramework
20
24
  # * request.finished: fired when the request is finished and the response is about to get served [planned]
21
25
  # * server.ready: fired when the server is ready accepting connections [planned]
22
26
  # * server.error: fired when an internal error happens (for example method not found) [planned]
27
+ # * request.capture: capture the request before anything happens, like a real pirate! (fired after your object is created)
28
+ # if the result of your hook returns true, the request must be finished by your hook
29
+ # this can block the request
23
30
  # All hooks are blocking, so they could eventually block the request [Future testing required]
24
31
  @@hooks = []
25
32
 
@@ -11,15 +11,26 @@ module ObjectsFramework
11
11
  parts = path.split("/")
12
12
  if(path == "/" && !context.config[:root].nil?)
13
13
  klass = Object.const_get(context.config[:root]).new
14
+ klass.set_instance_variables(request,response,context.env)
15
+
16
+ captured_result = captured?(klass)
17
+ if(captured_result != 0)
18
+ return captured_result
19
+ end
14
20
 
15
21
  Hooks.fire("object.before_execute", klass)
16
22
 
17
- klass.set_instance_variables(request,response).send(request.request_method.downcase!+"_"+context.config[:index_method])
18
- return
23
+ klass.send(request.request_method.downcase!+"_"+context.config[:index_method])
24
+ return true
19
25
  end
20
26
 
21
27
  begin
22
- klass = Object.const_get(parts[1].capitalize).new.set_instance_variables(request,response)
28
+ klass = Object.const_get(parts[1].capitalize).new.set_instance_variables(request,response,context.env)
29
+
30
+ captured_result = captured?(klass)
31
+ if(captured_result != 0)
32
+ return captured_result
33
+ end
23
34
 
24
35
  Hooks.fire("object.before_execute", klass)
25
36
 
@@ -34,21 +45,38 @@ module ObjectsFramework
34
45
  end
35
46
  rescue Exception => e
36
47
  begin
37
- obj = Object.const_get(context.config[:root]).new.set_instance_variables(request,response)
48
+ obj = Object.const_get(context.config[:root]).new.set_instance_variables(request,response,context.env)
49
+
50
+ captured_result = captured?(obj)
51
+ if(captured_result != 0)
52
+ return captured_result
53
+ end
54
+
38
55
  Hooks.fire("object.before_execute", obj)
39
56
  obj.send(request.request_method.downcase!+"_"+parts[1])
40
- return
57
+ return true
41
58
  rescue
42
59
 
43
60
  end
44
61
  response.status = 404
45
62
  notfound_response(response,e)
46
63
  end
47
-
64
+ return true
48
65
  end
49
66
 
50
67
  def self.notfound_response(response,e)
51
68
  response.write "<h1>404 Not Found</h1><hr/><i>Ruby Rack Server powered by ObjectsFramework <br/><pre>#{e.to_s}</pre></i>"
52
69
  end
70
+
71
+ def self.captured?(klass)
72
+ if(Hooks.hook_exists?("request.capture",klass))
73
+ result = Hooks.fire("request.capture",klass)
74
+ if(result != 0)
75
+ return result
76
+ end
77
+ return 0
78
+ end
79
+ return 0
80
+ end
53
81
  end
54
82
  end
@@ -1,12 +1,13 @@
1
1
  module ObjectsFramework
2
2
  class Server
3
- attr_accessor :config
3
+ attr_accessor :config, :env
4
4
 
5
5
  def initialize(config = {})
6
6
  @config = {:index_method => "index"}.merge(config)
7
7
  end
8
8
 
9
9
  def call(env)
10
+ @env = env
10
11
  request = Rack::Request.new(env)
11
12
  response = Rack::Response.new(env)
12
13
  # Solves some weird bug where ENV is added to the response body
@@ -14,8 +15,12 @@ module ObjectsFramework
14
15
  response.length = 0
15
16
  # Set text/html as Content-type by default
16
17
  response.header["Content-type"] = "text/html"
17
- ObjectsFramework::ObjectHandler.run_methods(request,response,self);
18
- response.finish
18
+ handler = ObjectsFramework::ObjectHandler.run_methods(request,response,self)
19
+ if(handler === true)
20
+ response.finish
21
+ else
22
+ return handler
23
+ end
19
24
  end
20
25
  end
21
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: objectsframework
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.2'
4
+ version: '1.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bram Vandenbogaerde
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - lib/objectsframework.rb
49
+ - lib/objectsframework/hook_helper.rb
49
50
  - lib/objectsframework/hooks.rb
50
51
  - lib/objectsframework/object.rb
51
52
  - lib/objectsframework/object_handler.rb