rspec-uuid 0.2.0 → 0.4.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: 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