rspec-uuid 0.1.0 → 0.2.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
  SHA256:
3
- metadata.gz: 4e842761ec28b372bbb63629058b3a67c0cdb822af9b809388be813b5671f6c6
4
- data.tar.gz: 68ce117e6e041a56184781a548bef376185dfad070bf4dd32492643872d550a8
3
+ metadata.gz: e4aa8aad7b8b1b71002560449a351a7bd23a83bf3d3becb4ed7f3df86258add3
4
+ data.tar.gz: 27a9d9b605a15c93f0f7c72c2f4a1c28f96752a50af0f741113881c8880f3529
5
5
  SHA512:
6
- metadata.gz: 869b71a5eddce1e8a6789ba1850e77cb8fdba899919615f041527839af2c98f9bb69cd94aa0488c15fca6e975b08d4f144d08e2f06b57b9391c73a16360d98de
7
- data.tar.gz: 9ab3472cccbec91a3925fd59265e39fff337fc528bca36d58b2bc1e600c0b4a072fd0d0e0f1db3e898d3ac0afeec9656bec12e456a4d5c9ae5e9658853b1a495
6
+ metadata.gz: f015ceddf27a116bf433006d9992c5f2622cd4f2e3587bdae9f142fce7cbabf778826494cc2b45f2793c1f18cacf054fd08c64024da0c4ad8a666a7f32451dd7
7
+ data.tar.gz: bf5a2c0775e30e310897e209a028b5f8746aafcc25b7b0b6af44af9fc32e7cbed5a1832b663dcde58ecc29adb7a23b2bde828080c320f5dc32bca07570ae5aad
@@ -1,28 +1,47 @@
1
1
  module RSpecUUID
2
2
  module Matchers
3
3
  class UUIDMatcher
4
- def matches?(obj)
5
- return false unless obj.is_a?(String)
4
+ def initialize(version = nil)
5
+ @version = version
6
+ end
7
+
8
+ def matches?(actual)
9
+ return false unless actual.is_a?(String)
6
10
 
7
11
  # https://www.uuidtools.com/what-is-uuid
8
- obj.match? /^\h{8}-\h{4}-\h{4}-\h{4}-\h{12}$/
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
9
24
  end
10
25
 
11
26
  def description
12
- "be a UUID"
27
+ @version ? "a UUID v#{@version}" : "a UUID"
13
28
  end
14
29
 
15
30
  def failure_message
16
- "expected a UUID"
31
+ if @actual_version
32
+ "expected #{description}, found a UUID v#{@actual_version}"
33
+ else
34
+ "expected #{description}"
35
+ end
17
36
  end
18
37
 
19
38
  def failure_message_when_negated
20
- "did not expect a UUID"
39
+ "did not expect #{description}"
21
40
  end
22
41
  end
23
42
 
24
- def be_a_uuid
25
- UUIDMatcher.new
43
+ def be_a_uuid(...)
44
+ UUIDMatcher.new(...)
26
45
  end
27
46
  end
28
47
  end
@@ -1,3 +1,3 @@
1
1
  module RSpecUUID
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -5,9 +5,9 @@ describe RSpecUUID::Matchers do
5
5
  specify { expect(uuid).to be_a_uuid }
6
6
  end
7
7
 
8
- context "with Faker UUIDs" do
8
+ context "with generated UUIDs" do
9
9
  specify do
10
- 100.times { expect(Faker::Internet.uuid).to be_a_uuid }
10
+ 100.times { expect(SecureRandom.uuid).to be_a_uuid }
11
11
  end
12
12
  end
13
13
 
@@ -16,17 +16,37 @@ describe RSpecUUID::Matchers do
16
16
  specify { expect(:xyz).not_to be_a_uuid }
17
17
  specify { expect(123).not_to be_a_uuid }
18
18
  specify { expect(nil).not_to be_a_uuid }
19
- end
20
19
 
21
- it "fails with a useful message" do
22
- expect {
23
- expect(nil).to be_a_uuid
24
- }.to fail_including("expected a UUID")
20
+ it "fails with a useful message" do
21
+ expect {
22
+ expect(nil).to be_a_uuid
23
+ }.to fail_including("expected a UUID")
24
+ end
25
+
26
+ it "fails with a useful negation message" do
27
+ expect {
28
+ expect(SecureRandom.uuid).not_to be_a_uuid
29
+ }.to fail_including("did not expect a UUID")
30
+ end
25
31
  end
26
32
 
27
- it "fails with a useful negation message" do
28
- expect {
29
- expect(Faker::Internet.uuid).not_to be_a_uuid
30
- }.to fail_including("did not expect a UUID")
33
+ context "with a UUID version" do
34
+ let(:namespace) { Digest::UUID::OID_NAMESPACE }
35
+ let(:uuid_v3) { Digest::UUID.uuid_v3(namespace, "123") }
36
+ let(:uuid_v4) { SecureRandom.uuid }
37
+ let(:uuid_v5) { Digest::UUID.uuid_v5(namespace, "123") }
38
+
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) }
42
+
43
+ specify { expect(uuid_v4).to be_a_uuid(4) }
44
+ specify { expect(uuid_v5).to be_a_uuid(5) }
45
+
46
+ it "fails with a useful message" do
47
+ expect {
48
+ expect(uuid_v3).to be_a_uuid(4)
49
+ }.to fail_including("UUID v4, found a UUID v3")
50
+ end
31
51
  end
32
52
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-uuid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
@@ -11,7 +11,7 @@ cert_chain: []
11
11
  date: 2022-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: byebug
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: codecov
28
+ name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: faker
42
+ name: codecov
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="