context-filters 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5fefdc786067150db5a30a0f0d3951a8400dfaea
4
+ data.tar.gz: ceee00abeae9a01b2190f7dca8c903cd1e4125ed
5
+ SHA512:
6
+ metadata.gz: b54f7a9eb75421d1eccc8ba97b80e823dba1a1748cd1b5c66046f7e133f3f914a029376e84521f6b5b39cded1d9e228c39a8c56e79dbfdb4c29231168408bcec
7
+ data.tar.gz: dcfd179c6eb7d3965cf28b687fd515ae4003a88d2690b894f38d1a75b5e0712a330ef983e656cbb361a4ce8e536e21293faafbf9a4be0e18a581b2352bf372ac
@@ -0,0 +1,8 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "context-filters/version"
8
+ require "context-filters/context"
@@ -0,0 +1,23 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "context-filters/global_context"
8
+ require "context-filters/local_context"
9
+
10
+ # manipulate set of context and filters for it,
11
+ # allow evaluating filters in given context
12
+ class ContextFilters::Context < CommandDesigner::GlobalContext
13
+
14
+ include ContextFilters::LocalContext
15
+
16
+ # run the given method on global and local filters
17
+ def evaluate_filters(method)
18
+ super(method) do
19
+ evaluate_local_filters(method)
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,68 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "context-filters/version"
8
+
9
+ # Store and apply filters using blocks
10
+ #
11
+ # @example
12
+ #
13
+ # class FiltersTestSubject
14
+ # attr_reader :value
15
+ # def initialize(value)
16
+ # @value = value
17
+ # end
18
+ # def change(&block)
19
+ # @value = block.call(@value)
20
+ # end
21
+ # end
22
+ # filters = ContextFilters::Filters.new
23
+ # filters.store(:addition) {|value| value + 1 }
24
+ # filters.store(:subtraction) {|value| value - 1 }
25
+ # filters.filters # => [:addition, :subtraction]
26
+ # object = FiltersTestSubject.new(3)
27
+ # object.value => 3
28
+ # filters.apply(object.method(:change), :addition)
29
+ # object.value => 4
30
+ # filters.apply(object.method(:change), :subtraction)
31
+ # object.value => 3
32
+
33
+ class ContextFilters::Filters
34
+
35
+ # initialize the filters storage
36
+ def initialize
37
+ @filters = {}
38
+ end
39
+
40
+ # stores the block for given options, if the options have a block
41
+ # already the new one is added to the list
42
+ # @param options [Object] options for filtering blocks
43
+ # @param block [Proc] block of code to add to the list of blocks
44
+ # for this options
45
+ def store(options = nil, &block)
46
+ @filters[options] ||= []
47
+ @filters[options] << block
48
+ end
49
+
50
+ # applies matching filters to the given method
51
+ # @param method [Method] an object method that takes a transformation
52
+ # block as param
53
+ # @param options [Object] a filter for selecting matching blocks
54
+ def apply(method, options = {})
55
+ @filters.fetch(options, []).each{|block| method.call(&block) }
56
+ end
57
+
58
+ # Array of already defined filters
59
+ def filters
60
+ @filters.keys
61
+ end
62
+
63
+ # @return [Boolean] true if there are any rules stored, false otherwise
64
+ def empty?
65
+ @filters.empty?
66
+ end
67
+
68
+ end
@@ -0,0 +1,77 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "context-filters/priority_filters"
8
+
9
+ # builds list of filters and provides dsl for building nested context
10
+ # and allows evaluating filters on methods in the current context
11
+ class ContextFilters::GlobalContext
12
+
13
+ # @return [Array] the context stack
14
+ attr_reader :context
15
+
16
+ # @return [PriorityFilters] shared list of filters
17
+ attr_reader :priority_filters
18
+
19
+ # initialize new GlobalContext, works in two modes:
20
+ # 1. start totally new context, takes one param - array of priorities,
21
+ # +nil+ to use one anonymous priority
22
+ # 2. build sub context, params: global_filters_list, parents_context,
23
+ # value to add to context
24
+ #
25
+ # @param priority_filters [Array,PriorityFilters] when PriorityFilters - uses it for priority_filters
26
+ # otherwise - initializes new priority_filters with it
27
+ # @param context [Array] parents context, duplicates to initialize own context
28
+ # @param options [Object] new context, ads it to current context
29
+ #
30
+ def initialize(priority_filters = nil, context = [], options = nil)
31
+ if ContextFilters::PriorityFilters === priority_filters
32
+ then @priority_filters = priority_filters
33
+ else @priority_filters = ContextFilters::PriorityFilters.new(priority_filters)
34
+ end
35
+ @context = context.dup + [options]
36
+ end
37
+
38
+ # defines new filter for given +priority+ and +options+
39
+ #
40
+ # @param priority [nil, Object] has to correspond to one of the initialized priorities
41
+ # @param options [Object] the options to use for new filter
42
+ # @param block [Proc] the transformation to use when the options match
43
+ #
44
+ def filter(priority, options = nil, &block)
45
+ @priority_filters.store(priority, options, &block)
46
+ end
47
+
48
+ # starts new context
49
+ # @param options [Object] options to start new context
50
+ # @param block [Proc] code block that will enable filtering for the given +options+
51
+ # @yield [GlobalContext] the new context
52
+ def in_context(options, &block)
53
+ self.class.new(@priority_filters, @context, options).tap(&block)
54
+ end
55
+
56
+ # evaluates all matching filters for given context, allows to do extra
57
+ # work for +priority.nil?+ or on the end of the priorities,
58
+ # @param method [Proc] the method to evaluate with filters matching current context
59
+ # @yield on first +priority.nil?+ or on the end when none
60
+ def evaluate_filters(method)
61
+ local_called = false
62
+
63
+ @priority_filters.each do |priority, filters|
64
+
65
+ @context.each { |options| filters.apply(method, options) }
66
+
67
+ if priority.nil? && block_given? && !local_called
68
+ yield
69
+ local_called = true
70
+ end
71
+
72
+ end
73
+
74
+ yield if block_given? && !local_called
75
+ end
76
+
77
+ end
@@ -0,0 +1,39 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "context-filters/version"
8
+
9
+ # allow defining local filters and evaluating code in context of thems
10
+ module ContextFilters::LocalContext
11
+
12
+ # @return [Array<Proc>] list of blocks to evaluate
13
+ def local_filters
14
+ @local_filters ||= []
15
+ end
16
+
17
+ # temporarly adds +filter_block+ to the list of filters to run and
18
+ # yields given block of code
19
+ #
20
+ # @param filter_block [Proc] a block of code to add to the list
21
+ # @yield a block in which +local_filters+ temporarly includes
22
+ # +filter_block+
23
+ def local_filter(filter_block, &block)
24
+ local_filters.push(filter_block)
25
+ block.call
26
+ ensure
27
+ local_filters.pop
28
+ nil
29
+ end
30
+
31
+ # iterates over +local_filters+ and applies them to the given +method+
32
+ #
33
+ # @param method [Proc] a method to call with each filter stored in
34
+ # +local_filters+
35
+ def evaluate_local_filters(method)
36
+ local_filters.each { |block| method.call(&block) }
37
+ end
38
+
39
+ end
@@ -0,0 +1,52 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "context-filters/filters"
8
+
9
+ # list of +filters+ sorted by +priorities+
10
+ class ContextFilters::PriorityFilters
11
+
12
+ attr_reader :priorities
13
+
14
+ # initializes priorities and coresponding list of filters
15
+ # @param priorities [Array|Object] a list of priorities to order filters
16
+ def initialize(priorities = nil)
17
+ @priorities = [priorities].flatten.freeze
18
+ @filters_array = @priorities.product([ContextFilters::Filters.new])
19
+ end
20
+
21
+ # adds a priority filter
22
+ #
23
+ # @param priority [Object] anything that was part of +priorities+ array
24
+ # @param options [Object] forwarded to Filters.store
25
+ # @param block [Proc] forwarded to Filters.store
26
+ # @raise [KeyError] when priority not matching priorities is used
27
+ def store(priority, options = nil, &block)
28
+ found = @filters_array.assoc(priority)
29
+ raise KeyError if found.nil?
30
+ found.last.store(options, &block)
31
+ end
32
+
33
+ # list of +filters+ sorted by +priorities+
34
+ def to_a
35
+ @filters_array
36
+ end
37
+
38
+ # iterate over +filters+ ordered by +priority+
39
+ # @yield [priority,filters] the next filters from sorted array
40
+ # @yieldparam priority [Object] the priority
41
+ # @yieldparam filters [Filters] the filters for priority
42
+ def each(&block)
43
+ to_a.each(&block) unless empty?
44
+ end
45
+
46
+ # check if all of the filters are empty
47
+ # return [Bolean] true if all filters are empty
48
+ def empty?
49
+ @filters_array.map(&:last).all?(&:empty?)
50
+ end
51
+
52
+ end
@@ -0,0 +1,5 @@
1
+ # Build command text based on multiple filters
2
+ class ContextFilters
3
+ # version of the context-filters gem
4
+ VERSION = "0.0.1"
5
+ end
@@ -0,0 +1,62 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "test_helper"
8
+ require "context-filters/context"
9
+ require "context-filters/filter_test_subject"
10
+
11
+ describe ContextFilters::Context do
12
+
13
+ subject do
14
+ ContextFilters::Context.new
15
+ end
16
+
17
+ let(:filter_test_subject) do
18
+ FilterTestSubject.new(3)
19
+ end
20
+
21
+ let(:change_method) do
22
+ filter_test_subject.method(:change)
23
+ end
24
+
25
+ describe "#evaluate_filters" do
26
+
27
+ it "does not apply filters when no filters" do
28
+ subject.priority_filters.expects(:apply).never
29
+ subject.evaluate_filters(Proc.new{})
30
+ end
31
+
32
+ it "does apply global filters" do
33
+ method = Proc.new{}
34
+ subject.context << :a
35
+ 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)
39
+ end
40
+
41
+ it "does apply local filters" do
42
+ subject.stubs(:local_filters).returns([Proc.new{|value| value+4}])
43
+ subject.evaluate_filters(change_method)
44
+ filter_test_subject.value.must_equal(7)
45
+ end
46
+
47
+ it "does apple global and local filters" do
48
+ filter_test_subject.value.must_equal(3)
49
+ addition = Proc.new { |value| value+1 }
50
+ multiplication = Proc.new { |value| value*3 }
51
+
52
+ subject.filter(nil,&multiplication)
53
+ subject.local_filter(addition) do
54
+ subject.evaluate_filters(change_method)
55
+ end
56
+
57
+ filter_test_subject.value.must_equal(10)
58
+ end
59
+
60
+ end #evaluate_command
61
+
62
+ end
@@ -0,0 +1,15 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ class FilterTestSubject
8
+ attr_accessor :value
9
+ def initialize(value)
10
+ @value = value
11
+ end
12
+ def change(&block)
13
+ @value = block.call(@value)
14
+ end
15
+ end
@@ -0,0 +1,97 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "test_helper"
8
+ require "context-filters/filters"
9
+ require "context-filters/filter_test_subject"
10
+
11
+ describe ContextFilters::Filters do
12
+
13
+ subject do
14
+ ContextFilters::Filters.new
15
+ end
16
+
17
+ describe "#store" do
18
+
19
+ it "adds empty filter" do
20
+ subject.store() { true }
21
+ subject.filters.size.must_equal 1
22
+ subject.filters.first.must_equal(nil)
23
+ end
24
+
25
+ it "adds options filter" do
26
+ subject.store(x: 2) { true }
27
+ subject.filters.size.must_equal 1
28
+ subject.filters.first.must_equal({x:2})
29
+ end
30
+
31
+ it "adds hash filter" do
32
+ subject.store({x: 3}) { true }
33
+ subject.filters.size.must_equal 1
34
+ subject.filters.first.must_equal({x:3})
35
+ end
36
+
37
+ it "adds nil filter" do
38
+ subject.store(nil) { true }
39
+ subject.filters.size.must_equal 1
40
+ subject.filters.first.must_equal(nil)
41
+ end
42
+
43
+ it "adds filter block" do
44
+ subject.store() { 4 }
45
+ filters = subject.instance_variable_get(:@filters)
46
+ filters.size.must_equal 1
47
+ filters[nil].size.must_equal 1
48
+ filters[nil].first.call.must_equal(4)
49
+ end
50
+
51
+ end #store
52
+
53
+ describe "#apply" do
54
+
55
+ let(:apply_test_subject) do
56
+ FilterTestSubject.new("test me")
57
+ end
58
+
59
+ it "does not apply filter" do
60
+ subject.store({x: 1}) { |value| "better #{value}" }
61
+
62
+ subject.apply(apply_test_subject.method(:change), {x: 2})
63
+
64
+ apply_test_subject.value.must_equal("test me")
65
+ end
66
+
67
+ it "applies single filter" do
68
+ subject.store({x: 1}) { |value| "better #{value}" }
69
+
70
+ subject.apply(apply_test_subject.method(:change), {x: 1})
71
+
72
+ apply_test_subject.value.must_equal("better test me")
73
+ end
74
+
75
+ it "applies repeating filters" do
76
+ subject.store({x: 1}) { |value| "better #{value}" }
77
+ subject.store({x: 1}) { |value| "#{value} please" }
78
+ subject.store({x: 1}) { |value| "#{value}!" }
79
+
80
+ subject.apply(apply_test_subject.method(:change), {x: 1})
81
+
82
+ apply_test_subject.value.must_equal("better test me please!")
83
+ end
84
+
85
+ it "applies different filters" do
86
+ subject.store({x: 1}) { |value| "dont #{value}" }
87
+ subject.store({x: 2}) { |value| "#{value} now" }
88
+
89
+ subject.apply(apply_test_subject.method(:change), {x: 1})
90
+ subject.apply(apply_test_subject.method(:change), {x: 2})
91
+
92
+ apply_test_subject.value.must_equal("dont test me now")
93
+ end
94
+
95
+ end #apply
96
+
97
+ end
@@ -0,0 +1,73 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "test_helper"
8
+ require "context-filters/global_context"
9
+
10
+ describe ContextFilters::GlobalContext do
11
+
12
+ subject do
13
+ ContextFilters::GlobalContext.new
14
+ end
15
+
16
+ describe "#initialize" do
17
+
18
+ it "sets up initial variables" do
19
+ subject.priority_filters.must_be_kind_of ContextFilters::PriorityFilters
20
+ subject.priority_filters.must_be_empty
21
+ subject.context.must_equal([nil])
22
+ end
23
+
24
+ end #initialize
25
+
26
+ it "stores filters" do
27
+ subject.priority_filters.expects(:store).with(nil, :a).once
28
+ subject.filter(nil, :a) do true end
29
+ end
30
+
31
+ describe "#evaluate_filters" do
32
+
33
+ it "does not apply filters when no filters" do
34
+ subject.priority_filters.expects(:apply).never
35
+ subject.evaluate_filters(Proc.new{})
36
+ end
37
+
38
+ it "does apply filters" do
39
+ method = Proc.new{}
40
+ subject.context << :a
41
+ 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)
45
+ end
46
+
47
+ end #evaluate_command
48
+
49
+ describe "#group" do
50
+
51
+ it "nests" do
52
+ subject.in_context(:a) do |test_a|
53
+
54
+ test_a.must_be_kind_of ContextFilters::GlobalContext
55
+ test_a.priority_filters.object_id.must_equal(subject.priority_filters.object_id)
56
+ test_a.context.object_id.wont_equal(subject.context.object_id)
57
+ test_a.context.must_equal([nil, :a])
58
+
59
+ test_a.in_context(:b) do |test_b|
60
+ test_b.must_be_kind_of ContextFilters::GlobalContext
61
+ test_b.priority_filters.object_id.must_equal(test_a.priority_filters.object_id)
62
+ test_b.context.object_id.wont_equal(test_a.context.object_id)
63
+ test_b.context.must_equal([nil, :a, :b])
64
+ end
65
+
66
+ test_a.context.must_equal([nil, :a])
67
+ end
68
+ subject.context.must_equal([nil])
69
+ end
70
+
71
+ end #group
72
+
73
+ end
@@ -0,0 +1,43 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "test_helper"
8
+ require "context-filters/local_context"
9
+ require "context-filters/filter_test_subject"
10
+
11
+ describe ContextFilters::LocalContext do
12
+
13
+ subject do
14
+ Object.new.tap { |o| o.extend(ContextFilters::LocalContext) }
15
+ end
16
+
17
+ let(:filter_test_subject) do
18
+ FilterTestSubject.new(3)
19
+ end
20
+
21
+ let(:change_method) do
22
+ filter_test_subject.method(:change)
23
+ end
24
+
25
+ it "has default value for #local_filters" do
26
+ subject.local_filters.must_equal([])
27
+ end
28
+
29
+ it "adds local filters" do
30
+ subject.local_filter(change_method) do
31
+ subject.local_filters.must_equal([change_method])
32
+ end
33
+ subject.local_filters.must_equal([])
34
+ end
35
+
36
+ it "runs change" do
37
+ method = Proc.new { |value| value+4 }
38
+ subject.stubs(:local_filters).returns([method])
39
+ subject.evaluate_local_filters(change_method)
40
+ filter_test_subject.value.must_equal(7)
41
+ end
42
+
43
+ end
@@ -0,0 +1,65 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "test_helper"
8
+ require "context-filters/priority_filters"
9
+
10
+ describe ContextFilters::PriorityFilters do
11
+
12
+ subject do
13
+ ContextFilters::PriorityFilters.allocate
14
+ end
15
+
16
+ describe "#initialize" do
17
+
18
+ it "initializes with no args" do
19
+ subject.send(:initialize)
20
+ subject.priorities.must_equal([nil])
21
+ end
22
+
23
+ it "initializes with objects" do
24
+ subject.send(:initialize, :a)
25
+ subject.priorities.must_equal([:a])
26
+ end
27
+
28
+ it "initializes with array" do
29
+ subject.send(:initialize, [:a, nil, :b])
30
+ subject.priorities.must_equal([:a, nil, :b])
31
+ end
32
+
33
+ it "initializes to_a" do
34
+ subject.send(:initialize, [:a, :b])
35
+ subject.to_a.size.must_equal(2)
36
+ subject.to_a.map(&:first).must_equal([:a, :b])
37
+ subject.to_a[0][1].must_be_kind_of ContextFilters::Filters
38
+ subject.to_a[1][1].must_be_kind_of ContextFilters::Filters
39
+ end
40
+
41
+ end #initialize
42
+
43
+ describe "#store" do
44
+
45
+ it "stores filters" do
46
+ subject.send(:initialize, :a)
47
+ subject.store(:a, :options) {true}
48
+ subject.to_a[0][1].filters.must_equal([:options])
49
+ end
50
+
51
+ it "throws exception on wrong priority" do
52
+ subject.send(:initialize, :a)
53
+ lambda {
54
+ subject.store(:b, :options) {true}
55
+ }.must_raise(KeyError)
56
+ end
57
+
58
+ end
59
+
60
+ it "returns list in to_a" do
61
+ subject.send(:initialize, [2, 1])
62
+ subject.to_a.must_be_kind_of Array
63
+ end
64
+
65
+ end
@@ -0,0 +1,33 @@
1
+ =begin
2
+ Copyright 2014 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "rubygems"
8
+
9
+ if
10
+ RUBY_VERSION == "2.0.0" && # check Gemfile
11
+ $0 != "-e" # do not do that in guard
12
+ then
13
+ require "coveralls"
14
+ require "simplecov"
15
+
16
+ SimpleCov.start do
17
+ formatter SimpleCov::Formatter::MultiFormatter[
18
+ SimpleCov::Formatter::HTMLFormatter,
19
+ Coveralls::SimpleCov::Formatter,
20
+ ]
21
+ command_name "Unit Tests"
22
+ add_filter "/test/"
23
+ end
24
+
25
+ Coveralls.noisy = true unless ENV["CI"]
26
+ end
27
+
28
+ # Autoload all lib/**/*.rb files so simplecov does not misses anything
29
+ Dir[File.expand_path("../../lib/**/*.rb", __FILE__)].each{|f| require f }
30
+
31
+ require "minitest/autorun" unless $0=="-e" # skip in guard
32
+ require "minitest/unit"
33
+ require "mocha/setup"
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: context-filters
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michal Papis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: guard
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: guard-minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard-yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '5.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '5.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '10.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '10.3'
97
+ description:
98
+ email:
99
+ - mpapis@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - lib/context-filters.rb
105
+ - lib/context-filters/context.rb
106
+ - lib/context-filters/filters.rb
107
+ - lib/context-filters/global_context.rb
108
+ - lib/context-filters/local_context.rb
109
+ - lib/context-filters/priority_filters.rb
110
+ - lib/context-filters/version.rb
111
+ - test/context-filters/context_test.rb
112
+ - test/context-filters/filter_test_subject.rb
113
+ - test/context-filters/filters_test.rb
114
+ - test/context-filters/global_context_test.rb
115
+ - test/context-filters/local_context_test.rb
116
+ - test/context-filters/priority_filters_test.rb
117
+ - test/test_helper.rb
118
+ homepage: https://github.com/remote-exec/context-filters
119
+ licenses:
120
+ - MIT
121
+ metadata: {}
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '>='
129
+ - !ruby/object:Gem::Version
130
+ version: 1.9.3
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 2.2.2
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Generic support for filters applied in context
142
+ test_files:
143
+ - test/test_helper.rb
144
+ - test/context-filters/filter_test_subject.rb
145
+ - test/context-filters/context_test.rb
146
+ - test/context-filters/filters_test.rb
147
+ - test/context-filters/global_context_test.rb
148
+ - test/context-filters/local_context_test.rb
149
+ - test/context-filters/priority_filters_test.rb
150
+ has_rdoc: