wildcard_matchers 0.1.0 → 0.1.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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.1.1
2
+ * ENHANCEMENT
3
+ * for_any helper
4
+ * is_url matcher
5
+
1
6
  ## 0.1.0
2
7
  * big refactoring
3
8
 
data/README.md CHANGED
@@ -28,6 +28,8 @@ See specs, for more detail.
28
28
  * is_bool === object #=> false
29
29
  * is_time
30
30
  * is_time === "2012-05-13" #=> true
31
+ * is_url
32
+ * is_url(:host => "example.com") === "http://example.com" #=> true
31
33
  * hash_includes
32
34
  * hash_includes(:a) === { :a => 1 } #=> true
33
35
  * hash_includes(:b) === { :a => 1 } #=> false
@@ -42,6 +44,8 @@ See specs, for more detail.
42
44
  * nil_or(is_a_string) === "a" #=> true
43
45
  * for_all
44
46
  * for_all(is_a_string) === %w[ a b c ] #=> true
47
+ * for_any
48
+ * for_any(is_a_string) === [ 1, "1" ] #=> true
45
49
 
46
50
  ## How it works
47
51
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -1,6 +1,6 @@
1
1
  module WildcardMatchers
2
2
  module Helpers
3
- def for_all(expectation, &block)
3
+ def for_all(expectation = nil, &block)
4
4
  expectation = block_given? ? block : expectation
5
5
 
6
6
  ForAll.new(expectation)
@@ -0,0 +1,18 @@
1
+ module WildcardMatchers
2
+ module Helpers
3
+ def for_any(expectation = nil, &block)
4
+ expectation = block_given? ? block : expectation
5
+
6
+ ForAny.new(expectation)
7
+ end
8
+
9
+ class ForAny < ::WildcardMatchers::WildcardMatcher
10
+ protected
11
+ def wildcard_match(actual)
12
+ unless actual.any? {|e| self.class.superclass.check_errors(e, expectation) == [] }
13
+ errors.push("expect #{actual} has #{expectation}")
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,6 @@
1
1
  module WildcardMatchers
2
2
  module Helpers
3
- def nil_or(expectation, &block)
3
+ def nil_or(expectation = nil, &block)
4
4
  expectation = block_given? ? block : expectation
5
5
 
6
6
  NilOr.new(expectation)
@@ -5,3 +5,4 @@ end
5
5
 
6
6
  require "wildcard_matchers/helpers/for_all"
7
7
  require "wildcard_matchers/helpers/nil_or"
8
+ require "wildcard_matchers/helpers/for_any"
@@ -0,0 +1,29 @@
1
+ module WildcardMatchers
2
+ module Matchers
3
+ def is_uri(hash = {})
4
+ IsUri.new(hash)
5
+ end
6
+
7
+ class IsUri < ::WildcardMatchers::WildcardMatcher
8
+ protected
9
+ def wildcard_match(actual)
10
+ uri = nil
11
+ begin
12
+ require "addressable/uri"
13
+ uri = ::Addressable::URI.parse(actual) # if actual is ::URI re-parse
14
+ rescue LoadError
15
+ require "uri"
16
+ uri = actual.is_a?(URI) ? actual : ::URI.parse(actual)
17
+ end
18
+
19
+ begin
20
+ expectation.each do |key, value|
21
+ errors.push(*self.class.superclass.check_errors(uri.__send__(key), value, position + "[#key.inspect}]"))
22
+ end
23
+ rescue ::URI::Error
24
+ errors.push("#{position}: expect #{actual} to be parsed as uri")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -31,4 +31,5 @@ module WildcardMatchers
31
31
  end
32
32
  end
33
33
 
34
- require "wildcard_matchers/matchers/hash_includes.rb"
34
+ require "wildcard_matchers/matchers/hash_includes"
35
+ require "wildcard_matchers/matchers/is_uri"
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe WildcardMatchers::Helpers::ForAny do
4
+ [ [ %w[ a b c ], :for_any, String ],
5
+ [ [ 1, "1" ], :for_any, String ],
6
+ ].each do |actual, helper, matcher, *args|
7
+ it_behaves_like "wildcard match with helper", actual, helper, matcher, *args
8
+ end
9
+
10
+ it "should match using lambda with helper" do
11
+ [ 1, 2, 3 ].should wildcard_match(for_any ->(item) { item % 2 == 0 })
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe WildcardMatchers::Matchers::IsUri do
4
+ [ [ "http://example.com", :is_uri ],
5
+ [ "http://example.com", :is_uri, :scheme => "http", :host => "example.com" ],
6
+ [ "http://example.com", :is_uri, :host => /example/ ],
7
+ ].each do |actual, matcher, *args|
8
+ it_behaves_like "wildcard match", actual, matcher, *args
9
+ end
10
+
11
+ [ [ "http://example.com", :is_uri, :host => "google.com" ],
12
+ [ "http://example.com", :is_uri, :host => /google/ ],
13
+ ].each do |actual, matcher, *args|
14
+ it_behaves_like "not wildcard match", actual, matcher, *args
15
+ end
16
+
17
+ context "when you use addressable, :query_values also available" do
18
+ [ [ "http://example.com/?hoge=fuga", :is_uri, :query_values => { "hoge" => /fu/ } ],
19
+ ].each do |actual, matcher, *args|
20
+ it_behaves_like "wildcard match", actual, matcher, *args
21
+ end
22
+
23
+ [ [ "http://example.com/?hoge=fuga", :is_uri, :query_values => { "hoge" => /ho/ } ],
24
+ ].each do |actual, matcher, *args|
25
+ it_behaves_like "not wildcard match", actual, matcher, *args
26
+ end
27
+ end
28
+ end
@@ -18,6 +18,9 @@ Gem::Specification.new do |gem|
18
18
  gem.add_development_dependency "rspec"
19
19
  gem.add_development_dependency "autowatchr"
20
20
 
21
+ # your choic
22
+ gem.add_development_dependency "addressable"
23
+
21
24
  # for debug
22
25
  gem.add_development_dependency "pry"
23
26
  gem.add_development_dependency "tapp"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wildcard_matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-24 00:00:00.000000000 Z
12
+ date: 2012-08-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: addressable
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: pry
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -111,17 +127,21 @@ files:
111
127
  - lib/wildcard_matchers.rb
112
128
  - lib/wildcard_matchers/helpers.rb
113
129
  - lib/wildcard_matchers/helpers/for_all.rb
130
+ - lib/wildcard_matchers/helpers/for_any.rb
114
131
  - lib/wildcard_matchers/helpers/nil_or.rb
115
132
  - lib/wildcard_matchers/matchers.rb
116
133
  - lib/wildcard_matchers/matchers/hash_includes.rb
134
+ - lib/wildcard_matchers/matchers/is_uri.rb
117
135
  - lib/wildcard_matchers/rspec.rb
118
136
  - lib/wildcard_matchers/wildcard_matcher.rb
119
137
  - spec/spec.watchr
120
138
  - spec/spec_helper.rb
121
139
  - spec/support/shared_examples.rb
122
140
  - spec/wildcard_matchers/helpers/for_all_spec.rb
141
+ - spec/wildcard_matchers/helpers/for_any_spec.rb
123
142
  - spec/wildcard_matchers/helpers/nil_or_spec.rb
124
143
  - spec/wildcard_matchers/matchers/hash_includes_spec.rb
144
+ - spec/wildcard_matchers/matchers/is_uri_spec.rb
125
145
  - spec/wildcard_matchers/matchers_spec.rb
126
146
  - spec/wildcard_matchers/rspec_spec.rb
127
147
  - spec/wildcard_matchers_spec.rb
@@ -155,8 +175,11 @@ test_files:
155
175
  - spec/spec_helper.rb
156
176
  - spec/support/shared_examples.rb
157
177
  - spec/wildcard_matchers/helpers/for_all_spec.rb
178
+ - spec/wildcard_matchers/helpers/for_any_spec.rb
158
179
  - spec/wildcard_matchers/helpers/nil_or_spec.rb
159
180
  - spec/wildcard_matchers/matchers/hash_includes_spec.rb
181
+ - spec/wildcard_matchers/matchers/is_uri_spec.rb
160
182
  - spec/wildcard_matchers/matchers_spec.rb
161
183
  - spec/wildcard_matchers/rspec_spec.rb
162
184
  - spec/wildcard_matchers_spec.rb
185
+ has_rdoc: