helperiffic 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/helperiffic.rb +25 -17
- data/lib/sinatra/helperiffic.rb +6 -1
- metadata +2 -2
data/lib/helperiffic.rb
CHANGED
@@ -1,34 +1,42 @@
|
|
1
1
|
class HelperBroker
|
2
|
-
def initialize(
|
3
|
-
@
|
2
|
+
def initialize(app)
|
3
|
+
@app = app
|
4
4
|
@helpers = {}
|
5
5
|
end
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@helpers[
|
6
|
+
|
7
|
+
# Lazily-instantiates a helper based on short name
|
8
|
+
def get_helper(name)
|
9
|
+
@helpers[name] ||= load_helper(name)
|
10
10
|
end
|
11
11
|
|
12
|
+
# Proxies method calls to helpers
|
12
13
|
def method_missing(method_sym, *args, &block)
|
13
|
-
|
14
|
-
|
14
|
+
helper = get_helper(method_sym)
|
15
|
+
helper.send(method_sym, *args, &block)
|
15
16
|
end
|
16
17
|
|
17
18
|
private
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
# Factory method for instantiating helpers based on class name
|
21
|
+
def load_helper(name)
|
22
|
+
class_name = "#{name.to_s.capitalize}Helper".to_sym
|
23
|
+
helper = @app.class.const_get(class_name).new
|
24
|
+
helper.app = @app if helper.respond_to? :"app="
|
25
|
+
helper
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
29
|
module Helperiffic
|
27
|
-
def
|
28
|
-
@
|
30
|
+
def app=(app)
|
31
|
+
@app = app
|
29
32
|
end
|
30
|
-
|
31
|
-
def
|
32
|
-
@
|
33
|
+
|
34
|
+
def app
|
35
|
+
@app
|
36
|
+
end
|
37
|
+
|
38
|
+
# Delegate missing methods to app
|
39
|
+
def method_missing(method_sym, *args, &block)
|
40
|
+
app.send(method_sym, *args, &block) if app.respond_to? method_sym
|
33
41
|
end
|
34
42
|
end
|
data/lib/sinatra/helperiffic.rb
CHANGED
@@ -5,9 +5,14 @@ module Sinatra
|
|
5
5
|
module Helperiffic
|
6
6
|
def self.registered(app)
|
7
7
|
app.helpers do
|
8
|
-
def
|
8
|
+
def helper_broker
|
9
9
|
@helper_broker ||= HelperBroker.new(self)
|
10
10
|
end
|
11
|
+
|
12
|
+
# Proxies to helper broker
|
13
|
+
def method_missing(method_sym, *args, &block)
|
14
|
+
helper_broker.send(method_sym, *args, &block)
|
15
|
+
end
|
11
16
|
end
|
12
17
|
end
|
13
18
|
end
|