filtration 0.0.4 → 0.0.5
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.
- data/README.rdoc +16 -9
- data/lib/filtration.rb +15 -16
- metadata +14 -4
data/README.rdoc
CHANGED
@@ -3,6 +3,7 @@ Filtration is a clean, lightweight way to filter arguments going into and coming
|
|
3
3
|
|
4
4
|
== Usage
|
5
5
|
Example:
|
6
|
+
|
6
7
|
class Bar
|
7
8
|
|
8
9
|
def foo(x)
|
@@ -26,20 +27,20 @@ Example:
|
|
26
27
|
class Foo < Bar
|
27
28
|
|
28
29
|
prefilter(:foo){|x| x * 2}
|
29
|
-
#=> (x * 2) + 2 = 6 (for x = 2)
|
30
30
|
|
31
31
|
postfilter(:foo_too){|x| x * 2}
|
32
|
-
|
33
|
-
|
32
|
+
|
34
33
|
end
|
35
|
-
|
34
|
+
|
35
|
+
randy = Foo.new
|
36
|
+
randy.foo(2) #=> (x * 2) + 2 = 6 (for x = 2)
|
37
|
+
randy.foo_too(2) #=> (x + 2) * 2 = 8 (for x = 2)
|
38
|
+
|
36
39
|
class AnotherFoo < Bar
|
37
40
|
|
38
41
|
prefilter :foo, :double
|
39
|
-
#=> (x * 2) + 2 = 6 (for x = 2)
|
40
42
|
|
41
43
|
postfilter :foo_too, :double
|
42
|
-
#=> (x + 2) * 2 => 8 (for x = 2)
|
43
44
|
|
44
45
|
def double(x)
|
45
46
|
x * 2
|
@@ -47,18 +48,24 @@ Example:
|
|
47
48
|
|
48
49
|
end
|
49
50
|
|
51
|
+
savage = AnotherFoo.new
|
52
|
+
savage.foo(2) #=> (x * 2) + 2 = 6
|
53
|
+
savage.foo_too(2) #=> (x + 2) * 2 => 8
|
54
|
+
|
50
55
|
class YetAnotherFoo < Bar
|
51
56
|
|
52
57
|
prefilter :foo_as_well, &:upcase
|
53
|
-
#=> "#{x.upcase} to the max!" = 'FILTRATION to the max!' (for x = 'filtration')
|
54
58
|
|
55
59
|
postfilter :foo_forever, &:upcase
|
56
|
-
#=> "#{x} to the max!".upcase = 'FILTRATION TO THE MAX!' (for x = 'filtration')
|
57
60
|
|
58
61
|
end
|
59
62
|
|
63
|
+
machoman = YetAnotherFoo.new
|
64
|
+
machoman.foo_as_well('filtration') #=> "#{x.upcase} to the max!" = 'FILTRATION to the max!'
|
65
|
+
machoman.foo_forever('filtration') #=> "#{x} to the max!".upcase = 'FILTRATION TO THE MAX!'
|
66
|
+
|
60
67
|
== Requirements
|
61
68
|
Filtration stands on its own!
|
62
69
|
|
63
70
|
== Development
|
64
|
-
RSpec is used for testing, with SimpleCov for code coverage.
|
71
|
+
RSpec is used for testing, with SimpleCov for code coverage.
|
data/lib/filtration.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
module Filtration
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
raise "
|
8
|
-
raise "
|
9
|
-
|
10
|
-
define_method(
|
3
|
+
# for method with arity > 0, 'target', intercept arguments and apply
|
4
|
+
# method 'filter' or passed 'block' to them before running 'target' with them
|
5
|
+
def prefilter(target, filter=nil, &block)
|
6
|
+
old_method = instance_method(target)
|
7
|
+
raise "Method #{target} takes 0 arguments" if old_method.arity == 0
|
8
|
+
raise "Must use either passed filter method or passed block" unless filter.nil? ^ block.nil?
|
9
|
+
|
10
|
+
define_method(target) do |*args|
|
11
11
|
if filter.nil?
|
12
12
|
old_method.bind(self).call(block.call(*args))
|
13
13
|
else
|
@@ -18,14 +18,13 @@ module Filtration
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
# for method, 'target', intercept output and apply method 'filter' or
|
22
|
+
# passed 'block' to it before returning the value
|
23
|
+
def postfilter(target, filter=nil, &block)
|
24
|
+
old_method = instance_method(target)
|
25
|
+
raise "Must use either passed filter method or passed block" unless filter.nil? ^ block.nil?
|
24
26
|
|
25
|
-
|
26
|
-
raise "Block or filter method missing" if filter.nil? && block.nil?
|
27
|
-
|
28
|
-
define_method(method) do |*args|
|
27
|
+
define_method(target) do |*args|
|
29
28
|
if filter.nil?
|
30
29
|
block.call(old_method.bind(self).call(*args))
|
31
30
|
else
|
@@ -40,4 +39,4 @@ end
|
|
40
39
|
|
41
40
|
class Object
|
42
41
|
extend Filtration
|
43
|
-
end
|
42
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filtration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
6
10
|
platform: ruby
|
7
11
|
authors:
|
8
12
|
- R. Scott Reis
|
@@ -10,7 +14,8 @@ autorequire:
|
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
16
|
|
13
|
-
date: 2011-
|
17
|
+
date: 2011-08-13 00:00:00 -05:00
|
18
|
+
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
16
21
|
description:
|
@@ -28,6 +33,7 @@ files:
|
|
28
33
|
- spec/spec_helper.rb
|
29
34
|
- spec/spec_dummies.rb
|
30
35
|
- spec/filtration_spec.rb
|
36
|
+
has_rdoc: true
|
31
37
|
homepage:
|
32
38
|
licenses: []
|
33
39
|
|
@@ -44,17 +50,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
44
50
|
requirements:
|
45
51
|
- - ">="
|
46
52
|
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
47
55
|
version: "0"
|
48
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
57
|
none: false
|
50
58
|
requirements:
|
51
59
|
- - ">="
|
52
60
|
- !ruby/object:Gem::Version
|
61
|
+
segments:
|
62
|
+
- 0
|
53
63
|
version: "0"
|
54
64
|
requirements: []
|
55
65
|
|
56
66
|
rubyforge_project:
|
57
|
-
rubygems_version: 1.7
|
67
|
+
rubygems_version: 1.3.7
|
58
68
|
signing_key:
|
59
69
|
specification_version: 3
|
60
70
|
summary: Filtration enables pre/post method callback, similar to Python decorators
|