rory 0.3.15 → 0.3.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 call_filter_set(which_set, opts = {})
117
- opts = { :break_if_response => true }.merge(opts)
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
@@ -1,3 +1,3 @@
1
1
  module Rory
2
- VERSION = '0.3.15'
2
+ VERSION = '0.3.16'
3
3
  end
@@ -1,4 +1,5 @@
1
1
  class BaseFilteredController < Rory::Controller
2
- before_action :pickle_something
2
+ before_action :pickle_something, :except => [:eat]
3
3
  after_action :rub_tummy
4
+ after_action :smile, :only => [:eat]
4
5
  end
@@ -2,5 +2,9 @@ require_relative 'base_filtered_controller'
2
2
 
3
3
  class FilteredController < BaseFilteredController
4
4
  before_action :make_it_tasty
5
- after_action :sleep
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
- expect(controller).to receive(:pickle_something).ordered
93
- expect(controller).to receive(:make_it_tasty).ordered
94
- expect(controller).to receive(:letsgo).ordered
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
- expect(controller).to receive(:make_it_tasty).never
107
- expect(controller).to receive(:letsgo).never
108
- expect(controller).to receive(:rub_tummy).never
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('letsgo').and_return(false)
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(:sleep).ordered
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.15
4
+ version: 0.3.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: