rory 0.3.15 → 0.3.16

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.
@@ -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: