forked from rails/rails-observers
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbootstrapper.rb
90 lines (78 loc) · 2.5 KB
/
bootstrapper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
module Rails
module Observers
class Bootstrapper
class << self
def self.inherited(subclass)
end
mattr_reader :reloader_class do
begin
::ActiveSupport::Reloader
rescue NameError
::ActionDispatch::Reloader
end
end
cattr_reader :railtie_class do
'Rails::Railtie'.safe_constantize
end
def railtie
return @railtie if defined?(@railtie)
if railtie_class
@railtie = Class.new(railtie_class)
@railtie.railtie_name self.name
else
@railtie = nil
end
@railtie
end
def railtie?
!railtie.nil?
end
def on_load_wrapper(orm, &block)
orm = orm.to_s.underscore.to_sym
Object.instance_exec(orm, block) do |orm_sym, unhooked_block|
Proc.new do
::ActiveSupport.on_load(orm_sym) do
app = ::Rails.application rescue nil
self.instance_exec(self, app, &unhooked_block)
end
end
end
end
def on_load(orm, &block)
on_load_wrapper(orm, &block).yield
end
def initialize(orm, config = nil, &block)
load_hooked_block = on_load_wrapper(orm, &block)
if railtie?
args = [ "#{orm}.observing" ]
args << config unless config.blank?
railtie.initializer(*args, &load_hooked_block)
else
load_hooked_block.yield
end
end
def post_initialize(orm, &block)
load_hooked_block = on_load_wrapper(orm) do |*args|
reloader_class.to_prepare(*args, &block)
block.yield(*args)
end
if railtie?
railtie.config.after_initialize(&load_hooked_block)
else
load_hooked_block.yield
end
end
#def self.delegate_to_railtie(*del_methods)
#opts = { :to => :@railtie, :prefix => :railtie, :allow_nil => true }
#del_methods.flatten!
#opts.merge!(del_methods.extract_options!)
#del_methods = del_methods.reject(&:blank?).map(&:to_sym).uniq
#del_methods -= self.instance_methods(true)
#delegate(*del_methods, opts) unless del_methods.empty?
#end
#delegate_to_railtie :railtie_name, :prefix => false
#delegate_to_railtie :config, :rake_tasks, :console, :runner, :generators
end
end
end
end