rspec-uuid 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4aa8aad7b8b1b71002560449a351a7bd23a83bf3d3becb4ed7f3df86258add3
4
- data.tar.gz: 27a9d9b605a15c93f0f7c72c2f4a1c28f96752a50af0f741113881c8880f3529
3
+ metadata.gz: 9734bb31d88892de3d5c141afbcdbd444b942f327863c4e87be0198b0cf0d3e9
4
+ data.tar.gz: 7672b8b47603a9f895fb4586af1141edd7b0693c492991a5fecc1847f7f42348
5
5
  SHA512:
6
- metadata.gz: f015ceddf27a116bf433006d9992c5f2622cd4f2e3587bdae9f142fce7cbabf778826494cc2b45f2793c1f18cacf054fd08c64024da0c4ad8a666a7f32451dd7
7
- data.tar.gz: bf5a2c0775e30e310897e209a028b5f8746aafcc25b7b0b6af44af9fc32e7cbed5a1832b663dcde58ecc29adb7a23b2bde828080c320f5dc32bca07570ae5aad
6
+ metadata.gz: c59ae103abe71f91cb4902c2a98d33084cc5cfa5726c0c723fdb19267f85ff29f1f76ffc366d598743c740f49635b75490747f8a53a455b3bef84ffb14400262
7
+ data.tar.gz: c5cefea9b062dd117b02491684cc221b52651c56801975458519c222dac9152a8bfcbbb15dbe8d475dcdf2e94b304974cab9d8e47696f032be3cbb17828256f2
@@ -1,3 +1,3 @@
1
1
  module RSpecUUID
2
- VERSION = "0.2.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/rspec-uuid.rb CHANGED
@@ -1,8 +1,38 @@
1
- require "rspec/core"
2
1
  require "rspec/expectations"
3
- require "rspec-uuid/matchers"
4
- require "rspec-uuid/version"
5
2
 
6
- RSpec.configure do |config|
7
- config.include(RSpecUUID::Matchers)
3
+ RSpec::Matchers.define :be_a_uuid do |version: nil|
4
+ match do |actual|
5
+ return false unless actual.is_a?(String)
6
+
7
+ # https://www.uuidtools.com/what-is-uuid
8
+ matches = actual.match /^\h{8}-\h{4}-(\h{4})-\h{4}-\h{12}$/
9
+ return false unless matches
10
+
11
+ if version
12
+ # 1st nibble of 3rd section
13
+ @actual_version = matches[1].to_i(16) >> 12
14
+
15
+ version == @actual_version
16
+ else
17
+ true
18
+ end
19
+ end
20
+
21
+ description do
22
+ version ? "a UUID v#{version}" : "a UUID"
23
+ end
24
+
25
+ failure_message do
26
+ if @actual_version
27
+ "expected #{description}, found a UUID v#{@actual_version}"
28
+ else
29
+ "expected #{description}"
30
+ end
31
+ end
32
+
33
+ failure_message_when_negated do
34
+ "did not expect #{description}"
35
+ end
8
36
  end
37
+
38
+ RSpec::Matchers.alias_matcher :a_uuid, :be_a_uuid
@@ -1,4 +1,4 @@
1
- describe RSpecUUID::Matchers do
1
+ describe "be_a_uuid" do
2
2
  context "with a valid UUID" do
3
3
  let(:uuid) { "992c94bd-5870-4e02-ad2d-a9435f7fffe6" }
4
4
 
@@ -8,6 +8,7 @@ describe RSpecUUID::Matchers do
8
8
  context "with generated UUIDs" do
9
9
  specify do
10
10
  100.times { expect(SecureRandom.uuid).to be_a_uuid }
11
+ 100.times { expect(Faker::Internet.uuid).to be_a_uuid }
11
12
  end
12
13
  end
13
14
 
@@ -36,17 +37,34 @@ describe RSpecUUID::Matchers do
36
37
  let(:uuid_v4) { SecureRandom.uuid }
37
38
  let(:uuid_v5) { Digest::UUID.uuid_v5(namespace, "123") }
38
39
 
39
- specify { expect(uuid_v3).to be_a_uuid(3) }
40
- specify { expect(uuid_v3).not_to be_a_uuid(4) }
41
- specify { expect(uuid_v3).not_to be_a_uuid(5) }
40
+ specify { expect(uuid_v3).to be_a_uuid(version: 3) }
41
+ specify { expect(uuid_v3).not_to be_a_uuid(version: 4) }
42
+ specify { expect(uuid_v3).not_to be_a_uuid(version: 5) }
42
43
 
43
- specify { expect(uuid_v4).to be_a_uuid(4) }
44
- specify { expect(uuid_v5).to be_a_uuid(5) }
44
+ specify { expect(uuid_v4).to be_a_uuid(version: 4) }
45
+ specify { expect(uuid_v5).to be_a_uuid(version: 5) }
45
46
 
46
47
  it "fails with a useful message" do
47
48
  expect {
48
- expect(uuid_v3).to be_a_uuid(4)
49
- }.to fail_including("UUID v4, found a UUID v3")
49
+ expect(uuid_v3).to be_a_uuid(version: 4)
50
+ }.to fail_including("expected a UUID v4, found a UUID v3")
50
51
  end
51
52
  end
53
+
54
+ it "is composable" do
55
+ data = {
56
+ res: {
57
+ abc: { a: 1 },
58
+ uuid: SecureRandom.uuid,
59
+ uuid_v5: Digest::UUID.uuid_v5(Digest::UUID::OID_NAMESPACE, "123"),
60
+ },
61
+ foo: nil,
62
+ }
63
+
64
+ expect(data).to include(res: {
65
+ abc: a_hash_including(:a),
66
+ uuid: a_uuid,
67
+ uuid_v5: a_uuid(version: 5),
68
+ })
69
+ end
52
70
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-uuid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-13 00:00:00.000000000 Z
11
+ date: 2022-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec-expectations
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: activesupport
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faker
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rspec
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -87,7 +115,6 @@ extensions: []
87
115
  extra_rdoc_files: []
88
116
  files:
89
117
  - lib/rspec-uuid.rb
90
- - lib/rspec-uuid/matchers.rb
91
118
  - lib/rspec-uuid/version.rb
92
119
  - spec/matchers_spec.rb
93
120
  homepage: https://github.com/dpep/rspec-uuid
@@ -1,47 +0,0 @@
1
- module RSpecUUID
2
- module Matchers
3
- class UUIDMatcher
4
- def initialize(version = nil)
5
- @version = version
6
- end
7
-
8
- def matches?(actual)
9
- return false unless actual.is_a?(String)
10
-
11
- # https://www.uuidtools.com/what-is-uuid
12
- match = actual.match /^\h{8}-\h{4}-(\h{4})-\h{4}-\h{12}$/
13
-
14
- return false unless match
15
-
16
- if @version
17
- # 1st nibble of 3rd section
18
- @actual_version = match[1].to_i(16) >> 12
19
-
20
- @version == @actual_version
21
- else
22
- true
23
- end
24
- end
25
-
26
- def description
27
- @version ? "a UUID v#{@version}" : "a UUID"
28
- end
29
-
30
- def failure_message
31
- if @actual_version
32
- "expected #{description}, found a UUID v#{@actual_version}"
33
- else
34
- "expected #{description}"
35
- end
36
- end
37
-
38
- def failure_message_when_negated
39
- "did not expect #{description}"
40
- end
41
- end
42
-
43
- def be_a_uuid(...)
44
- UUIDMatcher.new(...)
45
- end
46
- end
47
- end