rocketio 0.4.3 → 0.4.4
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.
- checksums.yaml +4 -4
- data/lib/rocketio/controller/filters.rb +35 -6
- data/lib/rocketio/version.rb +1 -1
- data/test/filters_test.rb +28 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0737fe18f7374b3e25a8a4b7d60c138165b5bee
|
4
|
+
data.tar.gz: 8bb85a4305fda13a4e3bcc9cc385c365789d60f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be167fe2a49f6063064358e0e6ff723b988a33f4e2f7191d8449a2a282c0a594234f8181b5bda15bcf17970b5dca5b1d3b5a862335d2e4fd94da30e8206f23c5
|
7
|
+
data.tar.gz: 526b21a00e3ee46532c6b502cf81d22fa4d3925c0d1c5ac0d29c67b3f5a6968e9c363e246b3c6cfeed02f0eae7567568e67e1927fc926db3b07f923a0a247029
|
@@ -14,6 +14,8 @@ module RocketIO
|
|
14
14
|
# that's it, if defining `before {}` and `before(:index) {}` filters
|
15
15
|
# `index` method will run `before` filter then `before(:index)`
|
16
16
|
#
|
17
|
+
# @note as of version 0.4.4 it is possible to exclude methods using :except option
|
18
|
+
#
|
17
19
|
# @example run before any method
|
18
20
|
# before do
|
19
21
|
# # some logic here
|
@@ -50,30 +52,57 @@ module RocketIO
|
|
50
52
|
# # both @user and @photo variables available here
|
51
53
|
# end
|
52
54
|
#
|
55
|
+
# @example except a single method
|
56
|
+
# before except: :x do
|
57
|
+
# ...
|
58
|
+
# end
|
59
|
+
#
|
60
|
+
# @example except multiple methods
|
61
|
+
# before except: [:x, :y] do
|
62
|
+
# ...
|
63
|
+
# end
|
64
|
+
#
|
53
65
|
{
|
54
66
|
before: proc {},
|
55
67
|
around: proc {|app| app.call},
|
56
68
|
after: proc {}
|
57
69
|
}.each_pair do |filter,default_block|
|
70
|
+
|
58
71
|
define_methods = :"define_#{filter}_methods"
|
59
72
|
var = :"@__#{filter}_filters__"
|
60
73
|
|
61
|
-
define_singleton_method filter do |*methods
|
74
|
+
define_singleton_method filter do |*methods, except: [], &block|
|
75
|
+
|
62
76
|
instance_variable_get(var) || instance_variable_set(var, {})
|
63
77
|
methods = [:*] if methods.empty?
|
78
|
+
except = [except.to_sym] unless except.is_a?(Array)
|
79
|
+
|
64
80
|
methods.each do |meth|
|
65
|
-
instance_variable_get(var)[meth.to_sym] =
|
81
|
+
instance_variable_get(var)[meth.to_sym] = {
|
82
|
+
proc: block || default_block,
|
83
|
+
except: Hash[except.zip(except)].freeze
|
84
|
+
}
|
66
85
|
end
|
86
|
+
|
67
87
|
__send__(define_methods)
|
68
88
|
end
|
69
89
|
|
70
90
|
define_singleton_method define_methods do |source = self|
|
71
|
-
filters = (source.instance_variable_get(var) || {}).each_with_object({}) do |(meth,
|
72
|
-
|
73
|
-
|
91
|
+
filters = (source.instance_variable_get(var) || {}).each_with_object({}) do |(meth,opts),o|
|
92
|
+
|
93
|
+
filter_meth = "__#{filter}_#{meth}__"
|
94
|
+
api.delete define_method(filter_meth, &opts[:proc])
|
95
|
+
|
96
|
+
o[meth] = filter_meth + '?'
|
97
|
+
api.delete define_method(o[meth]) {|*a|
|
98
|
+
__send__(filter_meth, *a) unless opts[:except][requested_method]
|
99
|
+
}
|
100
|
+
|
74
101
|
end
|
102
|
+
|
75
103
|
filters.update(allocate.__send__(filter))
|
76
104
|
return unless filters.any?
|
105
|
+
|
77
106
|
filters.freeze
|
78
107
|
api.delete define_method(filter) {filters}
|
79
108
|
end
|
@@ -88,7 +117,7 @@ module RocketIO
|
|
88
117
|
__send__(before[method]) if before[method]
|
89
118
|
end
|
90
119
|
|
91
|
-
# passing blocks
|
120
|
+
# passing blocks tends to add some overhead
|
92
121
|
# so passing the proc as a common argument
|
93
122
|
def invoke_around_filter method = requested_method, block
|
94
123
|
if around[:*]
|
data/lib/rocketio/version.rb
CHANGED
data/test/filters_test.rb
CHANGED
@@ -191,4 +191,32 @@ spec :Filters do
|
|
191
191
|
get :a
|
192
192
|
assert(buffer) == [:*, :a]
|
193
193
|
end
|
194
|
+
|
195
|
+
it 'excepts a single method' do
|
196
|
+
calls = []
|
197
|
+
ctrl = mock_controller {
|
198
|
+
before(except: :x) {calls << requested_method}
|
199
|
+
def x; end
|
200
|
+
def y; end
|
201
|
+
}
|
202
|
+
app(ctrl)
|
203
|
+
get :x
|
204
|
+
get :y
|
205
|
+
assert(calls) == [:y]
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'excepts multiple methods' do
|
209
|
+
calls = []
|
210
|
+
ctrl = mock_controller {
|
211
|
+
before(except: [:x, :y]) {calls << requested_method}
|
212
|
+
def x; end
|
213
|
+
def y; end
|
214
|
+
def z; end
|
215
|
+
}
|
216
|
+
app(ctrl)
|
217
|
+
get :x
|
218
|
+
get :y
|
219
|
+
get :z
|
220
|
+
assert(calls) == [:z]
|
221
|
+
end
|
194
222
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocketio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Slee Woo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -203,5 +203,5 @@ rubyforge_project:
|
|
203
203
|
rubygems_version: 2.5.1
|
204
204
|
signing_key:
|
205
205
|
specification_version: 4
|
206
|
-
summary: '["rocketio-0.4.
|
206
|
+
summary: '["rocketio-0.4.4", "Simple routing lib"]'
|
207
207
|
test_files: []
|