context-filters 0.8.0 → 0.9.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8430ac712eba84a90d2ab08862e6e0142da1b748
4
- data.tar.gz: 126e1743e161e5fef693d9b7b5727b6c983d2cec
3
+ metadata.gz: a378eabd84a4a77fffc09011562666ec496ab827
4
+ data.tar.gz: 3c63a922769d75d58efd77748888a45520b72dc5
5
5
  SHA512:
6
- metadata.gz: d8cdbf06f99de8383c8f58a3b43e632dd9ea6efce6da803059e3b1a370d4dcc94881bacce51aff79b1570ef9b90c928f3ab295e121928dd7389958b7c3d3d5f6
7
- data.tar.gz: fb036b5357b25b824b63f577e5a3f897c80d2c015df1f46938f9849e966eda20626997ca8a60fb5d31c3d9aacb1d13f43f9d4a678ab33a8e9dd58d52a5dc88fb
6
+ metadata.gz: e0b7a8bc527aeca7a99e7fc0f6fd8cbb9a086cd3e06d07ede4f3003bd8fc08ac5b7853a88d13e90f96ac0f0fc659ff5f9fe1efd0e4e11a55a99946407479a034
7
+ data.tar.gz: 12184765863f24c3f73885d8ec33457d1d7f379649b3843d81d487da9aaf8b79de95718d054b1acd1c9cd4122d8de01be02b9c528a1dbbdd76112742cbe1fc42
@@ -15,9 +15,9 @@ class ContextFilters::Context < ContextFilters::GlobalContext
15
15
 
16
16
  # run the given method on global and local filters
17
17
  # @param method [Proc] the method to evaluate for filters matching context
18
- def evaluate_filters(method)
19
- super(method) do
20
- evaluate_local_filters(method)
18
+ def evaluate_filters(target, method)
19
+ super(target, method) do
20
+ evaluate_local_filters(target, method)
21
21
  end
22
22
  end
23
23
 
@@ -47,12 +47,26 @@ class ContextFilters::Filters
47
47
  @filters[options] << block
48
48
  end
49
49
 
50
- # applies matching filters to the given method
51
- # @param method [Method] an object method that takes a transformation
50
+ # applies matching filters to the given target method, also uses
51
+ # filters matching extra +:target => target+ when options is a Hash
52
+ # @param target [Object] an object to run the method on
53
+ # @param method [symbol] method name that takes a transformation
52
54
  # block as param
53
55
  # @param options [Object] a filter for selecting matching blocks
54
- def apply(method, options = {})
55
- @filters.fetch(options, []).each{|block| method.call(&block) }
56
+ def apply(target, method, options = nil)
57
+ select_filters(target, options).each{|block| target.send(method, &block) }
58
+ end
59
+
60
+ # Select matching filters and filters including targets when
61
+ # options is a +Hash+
62
+ # @param target [Object] an object to run the method on
63
+ # @param options [Object] a filter for selecting matching blocks
64
+ def select_filters(target, options)
65
+ found = @filters.fetch(options, [])
66
+ if Hash === options
67
+ then found += @filters.fetch(options.merge(:target => target), [])
68
+ end
69
+ found
56
70
  end
57
71
 
58
72
  # Array of already defined filters
@@ -59,12 +59,12 @@ class ContextFilters::GlobalContext
59
59
  # work for +priority.nil?+ or on the end of the priorities,
60
60
  # @param method [Proc] the method to evaluate with filters matching current context
61
61
  # @yield on first +priority.nil?+ or on the end when none
62
- def evaluate_filters(method)
62
+ def evaluate_filters(target, method)
63
63
  local_called = false
64
64
 
65
65
  @priority_filters.each do |priority, filters|
66
66
 
67
- @context.each { |options| filters.apply(method, options) }
67
+ @context.each { |options| filters.apply(target, method, options) }
68
68
 
69
69
  if priority.nil? && block_given? && !local_called
70
70
  yield
@@ -34,8 +34,8 @@ module ContextFilters::LocalContext
34
34
  # @param method [Proc] a method to call with each filter stored in
35
35
  # +local_filters+
36
36
  # @api private
37
- def evaluate_local_filters(method)
38
- local_filters.each { |block| method.call(&block) }
37
+ def evaluate_local_filters(target, method)
38
+ local_filters.each { |block| target.send(method, &block) }
39
39
  end
40
40
 
41
41
  end
@@ -1,5 +1,5 @@
1
1
  # Build command text based on multiple filters
2
2
  class ContextFilters
3
3
  # version of the context-filters gem
4
- VERSION = "0.8.0"
4
+ VERSION = "0.9.0"
5
5
  end
@@ -18,29 +18,24 @@ describe ContextFilters::Context do
18
18
  FilterTestSubject.new(3)
19
19
  end
20
20
 
21
- let(:change_method) do
22
- filter_test_subject.method(:change)
23
- end
24
-
25
21
  describe "#evaluate_filters" do
26
22
 
27
23
  it "does not apply filters when no filters" do
28
24
  subject.priority_filters.expects(:apply).never
29
- subject.evaluate_filters(Proc.new{})
25
+ subject.evaluate_filters(filter_test_subject, :change)
30
26
  end
31
27
 
32
28
  it "does apply global filters" do
33
- method = Proc.new{}
34
29
  subject.context << :a
35
30
  subject.filter(nil, :b) { true }
36
- subject.priority_filters.to_a[0][1].expects(:apply).once.with(method, nil)
37
- subject.priority_filters.to_a[0][1].expects(:apply).once.with(method, :a)
38
- subject.evaluate_filters(method)
31
+ subject.priority_filters.to_a[0][1].expects(:apply).once.with(filter_test_subject, :change, nil)
32
+ subject.priority_filters.to_a[0][1].expects(:apply).once.with(filter_test_subject, :change, :a)
33
+ subject.evaluate_filters(filter_test_subject, :change)
39
34
  end
40
35
 
41
36
  it "does apply local filters" do
42
37
  subject.stubs(:local_filters).returns([Proc.new{|value| value+4}])
43
- subject.evaluate_filters(change_method)
38
+ subject.evaluate_filters(filter_test_subject, :change)
44
39
  filter_test_subject.value.must_equal(7)
45
40
  end
46
41
 
@@ -51,7 +46,7 @@ describe ContextFilters::Context do
51
46
 
52
47
  subject.filter(nil,&multiplication)
53
48
  subject.local_filter(addition) do
54
- subject.evaluate_filters(change_method)
49
+ subject.evaluate_filters(filter_test_subject, :change)
55
50
  end
56
51
 
57
52
  filter_test_subject.value.must_equal(10)
@@ -59,7 +59,7 @@ describe ContextFilters::Filters do
59
59
  it "does not apply filter" do
60
60
  subject.store({x: 1}) { |value| "better #{value}" }
61
61
 
62
- subject.apply(apply_test_subject.method(:change), {x: 2})
62
+ subject.apply(apply_test_subject, :change, {x: 2})
63
63
 
64
64
  apply_test_subject.value.must_equal("test me")
65
65
  end
@@ -67,7 +67,7 @@ describe ContextFilters::Filters do
67
67
  it "applies single filter" do
68
68
  subject.store({x: 1}) { |value| "better #{value}" }
69
69
 
70
- subject.apply(apply_test_subject.method(:change), {x: 1})
70
+ subject.apply(apply_test_subject, :change, {x: 1})
71
71
 
72
72
  apply_test_subject.value.must_equal("better test me")
73
73
  end
@@ -77,7 +77,7 @@ describe ContextFilters::Filters do
77
77
  subject.store({x: 1}) { |value| "#{value} please" }
78
78
  subject.store({x: 1}) { |value| "#{value}!" }
79
79
 
80
- subject.apply(apply_test_subject.method(:change), {x: 1})
80
+ subject.apply(apply_test_subject, :change, {x: 1})
81
81
 
82
82
  apply_test_subject.value.must_equal("better test me please!")
83
83
  end
@@ -86,12 +86,22 @@ describe ContextFilters::Filters do
86
86
  subject.store({x: 1}) { |value| "dont #{value}" }
87
87
  subject.store({x: 2}) { |value| "#{value} now" }
88
88
 
89
- subject.apply(apply_test_subject.method(:change), {x: 1})
90
- subject.apply(apply_test_subject.method(:change), {x: 2})
89
+ subject.apply(apply_test_subject, :change, {x: 1})
90
+ subject.apply(apply_test_subject, :change, {x: 2})
91
91
 
92
92
  apply_test_subject.value.must_equal("dont test me now")
93
93
  end
94
94
 
95
+ it "applies only one target filter" do
96
+ subject.store({x: 1, target: apply_test_subject}) { |value| "dont #{value}" }
97
+ subject.store({x: 2, target: nil}) { |value| "#{value} now" }
98
+
99
+ subject.apply(apply_test_subject, :change, {x: 1})
100
+ subject.apply(apply_test_subject, :change, {x: 2})
101
+
102
+ apply_test_subject.value.must_equal("dont test me")
103
+ end
104
+
95
105
  end #apply
96
106
 
97
107
  end
@@ -6,6 +6,7 @@ See the file LICENSE for copying permission.
6
6
 
7
7
  require "test_helper"
8
8
  require "context-filters/global_context"
9
+ require "context-filters/filter_test_subject"
9
10
 
10
11
  describe ContextFilters::GlobalContext do
11
12
 
@@ -13,6 +14,10 @@ describe ContextFilters::GlobalContext do
13
14
  ContextFilters::GlobalContext.new
14
15
  end
15
16
 
17
+ let(:filter_test_subject) do
18
+ FilterTestSubject.new(3)
19
+ end
20
+
16
21
  describe "#initialize" do
17
22
 
18
23
  it "sets up initial variables" do
@@ -32,16 +37,16 @@ describe ContextFilters::GlobalContext do
32
37
 
33
38
  it "does not apply filters when no filters" do
34
39
  subject.priority_filters.expects(:apply).never
35
- subject.evaluate_filters(Proc.new{})
40
+ subject.evaluate_filters(filter_test_subject, :change)
36
41
  end
37
42
 
38
43
  it "does apply filters" do
39
44
  method = Proc.new{}
40
45
  subject.context << :a
41
46
  subject.filter(nil, :b) { true }
42
- subject.priority_filters.to_a[0][1].expects(:apply).once.with(method, nil)
43
- subject.priority_filters.to_a[0][1].expects(:apply).once.with(method, :a)
44
- subject.evaluate_filters(method)
47
+ subject.priority_filters.to_a[0][1].expects(:apply).once.with(filter_test_subject, :change, nil)
48
+ subject.priority_filters.to_a[0][1].expects(:apply).once.with(filter_test_subject, :change, :a)
49
+ subject.evaluate_filters(filter_test_subject, :change)
45
50
  end
46
51
 
47
52
  end #evaluate_command
@@ -18,15 +18,12 @@ describe ContextFilters::LocalContext do
18
18
  FilterTestSubject.new(3)
19
19
  end
20
20
 
21
- let(:change_method) do
22
- filter_test_subject.method(:change)
23
- end
24
-
25
21
  it "has default value for #local_filters" do
26
22
  subject.local_filters.must_equal([])
27
23
  end
28
24
 
29
25
  it "adds local filters" do
26
+ change_method = Proc.new {}
30
27
  subject.local_filter(change_method) do
31
28
  subject.local_filters.must_equal([change_method])
32
29
  end
@@ -36,7 +33,7 @@ describe ContextFilters::LocalContext do
36
33
  it "runs change" do
37
34
  method = Proc.new { |value| value+4 }
38
35
  subject.stubs(:local_filters).returns([method])
39
- subject.evaluate_local_filters(change_method)
36
+ subject.evaluate_local_filters(filter_test_subject, :change)
40
37
  filter_test_subject.value.must_equal(7)
41
38
  end
42
39
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: context-filters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Papis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-16 00:00:00.000000000 Z
11
+ date: 2014-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: guard
@@ -142,9 +142,9 @@ summary: Generic support for filters applied in context
142
142
  test_files:
143
143
  - test/test_helper.rb
144
144
  - test/context-filters/filter_test_subject.rb
145
+ - test/context-filters/priority_filters_test.rb
146
+ - test/context-filters/local_context_test.rb
145
147
  - test/context-filters/context_test.rb
146
- - test/context-filters/filters_test.rb
147
148
  - test/context-filters/global_context_test.rb
148
- - test/context-filters/local_context_test.rb
149
- - test/context-filters/priority_filters_test.rb
149
+ - test/context-filters/filters_test.rb
150
150
  has_rdoc: