rory 0.3.15 → 0.3.16
Sign up to get free protection for your applications and to get access to all the features.
data/lib/rory/controller.rb
CHANGED
@@ -19,13 +19,13 @@ module Rory
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Register a method to run before the action method.
|
22
|
-
def before_action(method_name)
|
23
|
-
before_actions << method_name
|
22
|
+
def before_action(method_name, opts = {})
|
23
|
+
before_actions << opts.merge(:method_name => method_name)
|
24
24
|
end
|
25
25
|
|
26
26
|
# Register a method to run after the action method.
|
27
|
-
def after_action(method_name)
|
28
|
-
after_actions << method_name
|
27
|
+
def after_action(method_name, opts = {})
|
28
|
+
after_actions << opts.merge(:method_name => method_name)
|
29
29
|
end
|
30
30
|
|
31
31
|
def ancestor_actions(action_type)
|
@@ -94,7 +94,7 @@ module Rory
|
|
94
94
|
def present
|
95
95
|
# Call all before and after filters, and if a method exists on the
|
96
96
|
# controller for the requested action, call it in between.
|
97
|
-
call_filtered_action(@route.action)
|
97
|
+
call_filtered_action(@route.action.to_sym)
|
98
98
|
|
99
99
|
if @response
|
100
100
|
# that method may have resulted in a response already being generated
|
@@ -113,20 +113,30 @@ module Rory
|
|
113
113
|
|
114
114
|
private
|
115
115
|
|
116
|
-
def
|
117
|
-
|
116
|
+
def call_filter_for_action?(filter, action)
|
117
|
+
(filter[:only].nil? || filter[:only].include?(action)) &&
|
118
|
+
(filter[:except].nil? || !filter[:except].include?(action))
|
119
|
+
end
|
120
|
+
|
121
|
+
def get_relevant_filters(which_set, action)
|
118
122
|
filters = self.class.send(which_set)
|
123
|
+
filters.select { |filter| call_filter_for_action?(filter, action) }
|
124
|
+
end
|
125
|
+
|
126
|
+
def call_filter_set(which_set, action, opts = {})
|
127
|
+
opts = { :break_if_response => true }.merge(opts)
|
128
|
+
filters = get_relevant_filters(which_set, action)
|
119
129
|
filters.each do |filter|
|
120
130
|
break if @response && opts[:break_if_response]
|
121
|
-
self.send(filter)
|
131
|
+
self.send(filter[:method_name])
|
122
132
|
end
|
123
133
|
end
|
124
134
|
|
125
135
|
def call_filtered_action(action)
|
126
|
-
call_filter_set(:before_actions)
|
136
|
+
call_filter_set(:before_actions, action)
|
127
137
|
unless @response
|
128
138
|
self.send(action) if self.respond_to?(action)
|
129
|
-
call_filter_set(:after_actions, :break_if_response => false)
|
139
|
+
call_filter_set(:after_actions, action, :break_if_response => false)
|
130
140
|
end
|
131
141
|
end
|
132
142
|
end
|
data/lib/rory/version.rb
CHANGED
@@ -2,5 +2,9 @@ require_relative 'base_filtered_controller'
|
|
2
2
|
|
3
3
|
class FilteredController < BaseFilteredController
|
4
4
|
before_action :make_it_tasty
|
5
|
-
|
5
|
+
before_action :make_it_nutritious, :only => [:eat]
|
6
|
+
after_action :sleep, :except => [:eat]
|
7
|
+
|
8
|
+
def eat
|
9
|
+
end
|
6
10
|
end
|
@@ -89,12 +89,9 @@ describe Rory::Controller do
|
|
89
89
|
describe "#present" do
|
90
90
|
it "calls filters and action from route if exists on controller" do
|
91
91
|
controller = FilteredController.new(@request, @routing)
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
expect(controller).to receive(:rub_tummy).ordered
|
96
|
-
expect(controller).to receive(:sleep).ordered
|
97
|
-
expect(controller).to receive(:render).ordered
|
92
|
+
[:pickle_something, :make_it_tasty, :letsgo, :rub_tummy, :sleep, :render].each do |m|
|
93
|
+
expect(controller).to receive(m).ordered
|
94
|
+
end
|
98
95
|
controller.present
|
99
96
|
end
|
100
97
|
|
@@ -103,11 +100,9 @@ describe Rory::Controller do
|
|
103
100
|
def controller.pickle_something
|
104
101
|
@response = 'stuff'
|
105
102
|
end
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
expect(controller).to receive(:sleep).never
|
110
|
-
expect(controller).to receive(:render).never
|
103
|
+
[:make_it_tasty, :letsgo, :rub_tummy, :sleep, :render].each do |m|
|
104
|
+
expect(controller).to receive(m).never
|
105
|
+
end
|
111
106
|
controller.present
|
112
107
|
end
|
113
108
|
|
@@ -127,12 +122,23 @@ describe Rory::Controller do
|
|
127
122
|
|
128
123
|
it "doesn't try to call action from route if nonexistent on controller" do
|
129
124
|
controller = FilteredController.new(@request, @routing)
|
130
|
-
allow(controller).to receive(:respond_to?).with(
|
131
|
-
expect(controller).to receive(:pickle_something).ordered
|
132
|
-
expect(controller).to receive(:make_it_tasty).ordered
|
125
|
+
allow(controller).to receive(:respond_to?).with(:letsgo).and_return(false)
|
133
126
|
expect(controller).to receive(:letsgo).never
|
127
|
+
[:pickle_something, :make_it_tasty, :rub_tummy, :sleep, :render].each do |m|
|
128
|
+
expect(controller).to receive(m).ordered
|
129
|
+
end
|
130
|
+
controller.present
|
131
|
+
end
|
132
|
+
|
133
|
+
it "filters before and after actions on :only and :except" do
|
134
|
+
@routing[:route] = Rory::Route.new('', :to => 'test#eat')
|
135
|
+
controller = FilteredController.new(@request, @routing)
|
136
|
+
expect(controller).to receive(:make_it_tasty).ordered
|
137
|
+
expect(controller).to receive(:make_it_nutritious).ordered
|
138
|
+
expect(controller).to receive(:eat).ordered
|
134
139
|
expect(controller).to receive(:rub_tummy).ordered
|
135
|
-
expect(controller).to receive(:
|
140
|
+
expect(controller).to receive(:smile).ordered
|
141
|
+
expect(controller).to receive(:sleep).never
|
136
142
|
expect(controller).to receive(:render).ordered
|
137
143
|
controller.present
|
138
144
|
end
|