controller_observer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in controller_observer.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "controller_observer/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "controller_observer"
7
+ s.version = ControllerObserver::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Florian Günther"]
10
+ s.email = ["mail@gee-f.de"]
11
+ s.homepage = ""
12
+ s.summary = %q{Observe your ActionControllers in rails}
13
+ s.description = %q{Observers for ActionController similar to ActiveRecord Observers}
14
+
15
+ # s.rubyforge_project = "controller_observer"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
@@ -0,0 +1,85 @@
1
+ require 'singleton'
2
+
3
+ module ControllerObserver
4
+ module ClassMethods
5
+ def observers=(*observers)
6
+ @observers = observers.flatten
7
+ end
8
+
9
+ # Gets the current observers.
10
+ def observers
11
+ @observers ||= []
12
+ end
13
+
14
+ # Instantiate the global Active Controller observers.
15
+ def instantiate_observers
16
+ return if @observers.blank?
17
+ @observers.each do |observer|
18
+ if observer.respond_to?(:to_sym) # Symbol or String
19
+ observer.to_s.camelize.constantize.instance
20
+ #elsif observer.respond_to?(:instance)
21
+ # observer.instance
22
+ # puts "instance: #{observer}"
23
+ else
24
+ raise ArgumentError, "#{observer} must be a lowercase, underscored class name (or an instance of the class itself) responding to the instance method. Example: Person.observers = :big_brother # calls BigBrother.instance"
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ class Observer
31
+ include Singleton
32
+
33
+ class << self
34
+ def observed_class
35
+ if observed_class_name = name[/(.*)Observer/, 1]
36
+ observed_class_name.constantize
37
+ else
38
+ nil
39
+ end
40
+ end
41
+ end
42
+
43
+ def initialize
44
+ add_observer!(self.class.observed_class)
45
+ end
46
+
47
+ def before(controller)
48
+
49
+ end
50
+
51
+ def after(controller)
52
+ method = get_method(controller)
53
+ if respond_to?(method) && response([200, 201], controller)
54
+ send(method, get_item(controller))
55
+ end
56
+ return true
57
+ end
58
+
59
+ def get_method(controller)
60
+ "after_#{controller.action_name}".to_sym
61
+ end
62
+
63
+ def get_item(controller)
64
+ var_sym = "@#{controller.controller_name.singularize}".to_sym
65
+ return controller.instance_variable_get(var_sym) if controller.instance_variable_defined?(var_sym)
66
+ nil
67
+ end
68
+
69
+ def response(code_expected, controller)
70
+ @status = controller.response.status.to_s.match(/([0-9]*)/)[0].to_i
71
+ code_expected.include? @status
72
+ end
73
+
74
+ protected
75
+ def add_observer!(klass)
76
+ klass.after_filter self
77
+ end
78
+
79
+ end
80
+ end
81
+
82
+ unless ActionController::Base.respond_to?(:observers)
83
+ ActionController::Base.send(:extend, ControllerObserver::ClassMethods)
84
+ # ActionController::Dispatcher.to_prepare(:actioncontroller_instantiate_observers) { ActionController::Base.instantiate_observers }
85
+ end
@@ -0,0 +1,3 @@
1
+ module ControllerObserver
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: controller_observer
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - "Florian G\xC3\xBCnther"
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-04 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Observers for ActionController similar to ActiveRecord Observers
18
+ email:
19
+ - mail@gee-f.de
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - Rakefile
30
+ - controller_observer.gemspec
31
+ - lib/controller_observer.rb
32
+ - lib/controller_observer/version.rb
33
+ has_rdoc: true
34
+ homepage: ""
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options: []
39
+
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ requirements: []
55
+
56
+ rubyforge_project:
57
+ rubygems_version: 1.6.2
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: Observe your ActionControllers in rails
61
+ test_files: []
62
+