webmock-twirp 0.5.1 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e45e4abde5e884aac42e578b3ac9ffc45cad2538d395cb8fff7bb87c391ef6fe
4
- data.tar.gz: a7acf241b5cd85879bb0afa3d60c1b25dcf7f416eff3c85b58ee87224de8395a
3
+ metadata.gz: f44d4f0b68ccc1c1a8c71daa194f0944b99f0421c6bb6d59caada45d8bc84b74
4
+ data.tar.gz: 82508527da91c8c83c0429f2f2d620bea9f3b2ee830b939c5197a96419f0cc78
5
5
  SHA512:
6
- metadata.gz: 57fb45deb5e5bb6d379ea3935edd84b4441561a856fea45d37bd6904953ba2a7a8fabe861bdd4d1b850c7d728d813afa018a4f9d0371581044b8a61ce5f870b0
7
- data.tar.gz: facbf65f3132f690eaedebe6db9d9914182439e8519f16e5ee415fe06494e18bd8af6c675809753bbe223ca40b2b89f57fde680a47abdb34080c1d61b8c7fa95
6
+ metadata.gz: 83955087dd9574578f74f855a783e9608d018ae6baebcd5e651be5c39e386de1269a549db70b8c86e93567a05560c4ef38b47d797aae0d48aec7a6e6e378010e
7
+ data.tar.gz: 197564dee4a94728bfd9065fee7bc6c03442d24e592b4efc2dacd6ad0ffd7adfbd704ac6343aa2178aaa22ad7702191dda4d31cf4af7b54d18354a65f87491a1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ### 0.6.1 (2026-11-08)
2
+ - Requires Ruby 3.2 or newer.
3
+ - Fix nested matchers like `with(date: include(year: 0))` not matching default-valued fields on google-protobuf 4.
4
+
5
+ ### 0.6.0 (2025-02-11)
6
+ - rspec matcher support
7
+ - debug gem
8
+
1
9
  ### v0.5.1 (2024-04-17)
2
10
  - fix rpc name matching
3
11
 
data/Gemfile.lock CHANGED
@@ -1,68 +1,98 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- webmock-twirp (0.5.1)
4
+ webmock-twirp (0.6.1)
5
5
  twirp (>= 1)
6
6
  webmock (>= 3)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- addressable (2.8.6)
12
- public_suffix (>= 2.0.2, < 6.0)
13
- base64 (0.2.0)
14
- bigdecimal (3.1.6)
15
- byebug (11.1.3)
16
- crack (1.0.0)
11
+ addressable (2.9.0)
12
+ public_suffix (>= 2.0.2, < 8.0)
13
+ bigdecimal (4.1.3)
14
+ cgi (0.5.1)
15
+ crack (1.0.1)
17
16
  bigdecimal
18
17
  rexml
19
- diff-lcs (1.5.1)
20
- docile (1.4.0)
21
- faraday (2.7.11)
22
- base64
23
- faraday-net_http (>= 2.0, < 3.1)
24
- ruby2_keywords (>= 0.0.4)
25
- faraday-net_http (3.0.2)
26
- google-protobuf (3.25.3)
27
- hashdiff (1.1.0)
28
- public_suffix (5.0.4)
29
- rack (3.0.10)
30
- rexml (3.2.6)
31
- rspec (3.13.0)
18
+ date (3.5.1)
19
+ debug (1.11.1)
20
+ irb (~> 1.10)
21
+ reline (>= 0.3.8)
22
+ diff-lcs (1.6.2)
23
+ erb (4.0.4.1)
24
+ cgi (>= 0.3.3)
25
+ faraday (2.14.3)
26
+ faraday-net_http (>= 2.0, < 3.5)
27
+ json
28
+ logger
29
+ faraday-net_http (3.4.4)
30
+ net-http (~> 0.5)
31
+ google-protobuf (4.36.2)
32
+ bigdecimal
33
+ rake (~> 13.3)
34
+ hashdiff (1.2.1)
35
+ io-console (0.8.2)
36
+ irb (1.18.0)
37
+ pp (>= 0.6.0)
38
+ prism (>= 1.3.0)
39
+ rdoc (>= 4.0.0)
40
+ reline (>= 0.4.2)
41
+ json (2.19.9)
42
+ logger (1.7.0)
43
+ net-http (0.9.1)
44
+ uri (>= 0.11.1)
45
+ pp (0.6.3)
46
+ prettyprint
47
+ prettyprint (0.2.0)
48
+ prism (1.9.0)
49
+ psych (5.3.1)
50
+ date
51
+ stringio
52
+ public_suffix (6.0.2)
53
+ rack (3.2.8)
54
+ rake (13.4.2)
55
+ rdoc (7.2.0)
56
+ erb
57
+ psych (>= 4.0.0)
58
+ tsort
59
+ reline (0.6.3)
60
+ io-console (~> 0.5)
61
+ rexml (3.4.4)
62
+ rspec (3.13.2)
32
63
  rspec-core (~> 3.13.0)
33
64
  rspec-expectations (~> 3.13.0)
34
65
  rspec-mocks (~> 3.13.0)
35
- rspec-core (3.13.0)
66
+ rspec-core (3.13.6)
36
67
  rspec-support (~> 3.13.0)
37
- rspec-expectations (3.13.0)
68
+ rspec-expectations (3.13.5)
38
69
  diff-lcs (>= 1.2.0, < 2.0)
39
70
  rspec-support (~> 3.13.0)
40
- rspec-mocks (3.13.0)
71
+ rspec-mocks (3.13.8)
41
72
  diff-lcs (>= 1.2.0, < 2.0)
42
73
  rspec-support (~> 3.13.0)
43
- rspec-support (3.13.0)
44
- ruby2_keywords (0.0.5)
45
- simplecov (0.22.0)
46
- docile (~> 1.1)
47
- simplecov-html (~> 0.11)
48
- simplecov_json_formatter (~> 0.1)
49
- simplecov-html (0.12.3)
50
- simplecov_json_formatter (0.1.4)
51
- twirp (1.10.0)
74
+ rspec-support (3.13.7)
75
+ simplecov (1.2.0)
76
+ stringio (3.2.0)
77
+ tsort (0.2.0)
78
+ twirp (1.13.1)
52
79
  faraday (< 3)
53
- google-protobuf (~> 3.0, >= 3.7.0)
54
- webmock (3.23.0)
80
+ google-protobuf (>= 3.25, < 5.a)
81
+ rack (>= 2.2.3)
82
+ uri (1.1.1)
83
+ webmock (3.34.0)
55
84
  addressable (>= 2.8.0)
56
85
  crack (>= 0.3.2)
57
86
  hashdiff (>= 0.4.0, < 2.0.0)
58
- webrick (1.8.1)
87
+ webrick (1.9.2)
59
88
 
60
89
  PLATFORMS
61
90
  ruby
62
91
 
63
92
  DEPENDENCIES
64
- byebug
93
+ debug
65
94
  rack
95
+ rake
66
96
  rspec
67
97
  simplecov
68
98
  webmock-twirp!
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: ".."
4
+
5
+ gem "google-protobuf", "~> 3.25"
@@ -0,0 +1,101 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ webmock-twirp (0.6.1)
5
+ twirp (>= 1)
6
+ webmock (>= 3)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.9.0)
12
+ public_suffix (>= 2.0.2, < 8.0)
13
+ bigdecimal (4.1.3)
14
+ cgi (0.5.1)
15
+ crack (1.0.1)
16
+ bigdecimal
17
+ rexml
18
+ date (3.5.1)
19
+ debug (1.11.1)
20
+ irb (~> 1.10)
21
+ reline (>= 0.3.8)
22
+ diff-lcs (1.6.2)
23
+ erb (4.0.4.1)
24
+ cgi (>= 0.3.3)
25
+ faraday (2.14.3)
26
+ faraday-net_http (>= 2.0, < 3.5)
27
+ json
28
+ logger
29
+ faraday-net_http (3.4.4)
30
+ net-http (~> 0.5)
31
+ google-protobuf (3.25.5)
32
+ hashdiff (1.2.1)
33
+ io-console (0.8.2)
34
+ irb (1.18.0)
35
+ pp (>= 0.6.0)
36
+ prism (>= 1.3.0)
37
+ rdoc (>= 4.0.0)
38
+ reline (>= 0.4.2)
39
+ json (2.19.9)
40
+ logger (1.7.0)
41
+ net-http (0.9.1)
42
+ uri (>= 0.11.1)
43
+ pp (0.6.3)
44
+ prettyprint
45
+ prettyprint (0.2.0)
46
+ prism (1.9.0)
47
+ psych (5.3.1)
48
+ date
49
+ stringio
50
+ public_suffix (6.0.2)
51
+ rack (3.2.8)
52
+ rake (13.4.2)
53
+ rdoc (7.2.0)
54
+ erb
55
+ psych (>= 4.0.0)
56
+ tsort
57
+ reline (0.6.3)
58
+ io-console (~> 0.5)
59
+ rexml (3.4.4)
60
+ rspec (3.13.2)
61
+ rspec-core (~> 3.13.0)
62
+ rspec-expectations (~> 3.13.0)
63
+ rspec-mocks (~> 3.13.0)
64
+ rspec-core (3.13.6)
65
+ rspec-support (~> 3.13.0)
66
+ rspec-expectations (3.13.5)
67
+ diff-lcs (>= 1.2.0, < 2.0)
68
+ rspec-support (~> 3.13.0)
69
+ rspec-mocks (3.13.8)
70
+ diff-lcs (>= 1.2.0, < 2.0)
71
+ rspec-support (~> 3.13.0)
72
+ rspec-support (3.13.7)
73
+ simplecov (1.2.0)
74
+ stringio (3.2.0)
75
+ tsort (0.2.0)
76
+ twirp (1.13.1)
77
+ faraday (< 3)
78
+ google-protobuf (>= 3.25, < 5.a)
79
+ rack (>= 2.2.3)
80
+ uri (1.1.1)
81
+ webmock (3.34.0)
82
+ addressable (>= 2.8.0)
83
+ crack (>= 0.3.2)
84
+ hashdiff (>= 0.4.0, < 2.0.0)
85
+ webrick (1.9.2)
86
+
87
+ PLATFORMS
88
+ ruby
89
+
90
+ DEPENDENCIES
91
+ debug
92
+ google-protobuf (~> 3.25)
93
+ rack
94
+ rake
95
+ rspec
96
+ simplecov
97
+ webmock-twirp!
98
+ webrick
99
+
100
+ BUNDLED WITH
101
+ 2.4.20
@@ -1,6 +1,25 @@
1
1
  module WebMock
2
2
  module Twirp
3
3
  module Refinements
4
+ # Message#to_h, but keeping default-valued fields, which google-protobuf 4 drops
5
+ def self.to_h_with_defaults(value)
6
+ case value
7
+ when Google::Protobuf::MessageExts
8
+ value.class.descriptor.to_h do |field|
9
+ [ field.name.to_sym, to_h_with_defaults(field.get(value)) ]
10
+ end
11
+ when Google::Protobuf::RepeatedField
12
+ value.map { |x| to_h_with_defaults(x) }
13
+ when Google::Protobuf::Map
14
+ # Map#to_h ignores a block
15
+ res = {}
16
+ value.each { |k, v| res[k] = to_h_with_defaults(v) }
17
+ res
18
+ else
19
+ value
20
+ end
21
+ end
22
+
4
23
  refine Array do
5
24
  def snag(&block)
6
25
  find(&block)&.tap { |x| delete(x) }
@@ -45,8 +64,7 @@ module WebMock
45
64
  if expected_value.is_a?(Hash)
46
65
  matches ||= actual_value.match?(**expected_value)
47
66
  else
48
- matches ||= expected_value === actual_value.to_h
49
- # matches ||= expected_value === actual_value.normalized_hash
67
+ matches ||= expected_value === Refinements.to_h_with_defaults(actual_value)
50
68
  end
51
69
  end
52
70
 
@@ -77,11 +77,20 @@ module WebMock
77
77
  end
78
78
 
79
79
  request_matcher = if request
80
- unless request.is_a?(Google::Protobuf::MessageExts)
81
- raise TypeError, "Expected request to be Protobuf::MessageExts, found: #{request}"
80
+ if request.is_a?(Google::Protobuf::MessageExts)
81
+ # match message type and contents
82
+ # RSpec::Matchers::BuiltIn::Eq.new(request)
83
+ ->(expected, actual) { actual == expected }.curry.call(request)
84
+ elsif request.is_a?(Class) && request < Google::Protobuf::MessageExts
85
+ # match message type
86
+ # RSpec::Matchers::BuiltIn::BeAKindOf.new(request)
87
+ ->(expected, actual) { actual.is_a?(expected) }.curry.call(request)
88
+ elsif request.respond_to?(:matches?)
89
+ # is_a?(RSpec::Matchers::BuiltIn::BaseMatcher)
90
+ ->(expected, actual) { expected.matches?(actual) }.curry.call(request)
91
+ else
92
+ raise TypeError, "Expected request to be a Protobuf::MessageExts, found: #{request}"
82
93
  end
83
-
84
- { body: request.to_proto }
85
94
  end
86
95
 
87
96
  # save for diffing
@@ -93,12 +102,16 @@ module WebMock
93
102
  attrs
94
103
  end
95
104
 
96
- decoder = ->(request_signature) do
105
+ super() do |request_signature|
97
106
  matched = true
98
107
 
99
108
  request = request_signature.twirp_request
100
109
  matched &&= !!request
101
110
 
111
+ if request_matcher
112
+ matched &&= request_matcher.call(request)
113
+ end
114
+
102
115
  # match rpc_name
103
116
  if @rpc_name
104
117
  rpc_info = request_signature.twirp_rpc
@@ -119,8 +132,6 @@ module WebMock
119
132
 
120
133
  matched
121
134
  end
122
-
123
- super(request_matcher || {}, &decoder)
124
135
  end
125
136
 
126
137
  def to_return(*responses, &block)
@@ -198,7 +209,7 @@ module WebMock
198
209
 
199
210
  obj.new
200
211
  else
201
- raise ArgumentError, "can not generate twirp reponse from: #{obj}"
212
+ raise ArgumentError, "can not generate twirp response from: #{obj}"
202
213
  end
203
214
 
204
215
  if res.is_a?(Google::Protobuf::MessageExts)
@@ -1,5 +1,5 @@
1
1
  module WebMock
2
2
  module Twirp
3
- VERSION = "0.5.1"
3
+ VERSION = "0.6.1"
4
4
  end
5
5
  end
@@ -1,5 +1,4 @@
1
1
  require_relative "lib/webmock/twirp/version"
2
- package = WebMock::Twirp
3
2
 
4
3
  Gem::Specification.new do |s|
5
4
  s.authors = ["Daniel Pepper"]
@@ -7,17 +6,18 @@ Gem::Specification.new do |s|
7
6
  s.files = `git ls-files * ':!:spec'`.split("\n")
8
7
  s.homepage = "https://github.com/dpep/webmock-twirp"
9
8
  s.license = "MIT"
10
- s.name = File.basename(__FILE__).split(".")[0]
11
- s.summary = package.to_s
12
- s.version = package.const_get "VERSION"
9
+ s.name = "webmock-twirp"
10
+ s.summary = "WebMock::Twirp"
11
+ s.version = WebMock::Twirp::VERSION
13
12
 
14
- s.required_ruby_version = ">= 3"
13
+ s.required_ruby_version = ">= 3.2"
15
14
 
16
15
  s.add_dependency "webmock", ">= 3"
17
16
  s.add_dependency "twirp", ">= 1"
18
17
 
19
- s.add_development_dependency "byebug"
18
+ s.add_development_dependency "debug"
20
19
  s.add_development_dependency "rack"
20
+ s.add_development_dependency "rake"
21
21
  s.add_development_dependency "rspec"
22
22
  s.add_development_dependency "simplecov"
23
23
  s.add_development_dependency "webrick"
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webmock-twirp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-04-17 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: webmock
@@ -39,7 +38,7 @@ dependencies:
39
38
  - !ruby/object:Gem::Version
40
39
  version: '1'
41
40
  - !ruby/object:Gem::Dependency
42
- name: byebug
41
+ name: debug
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
@@ -66,6 +65,20 @@ dependencies:
66
65
  - - ">="
67
66
  - !ruby/object:Gem::Version
68
67
  version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
69
82
  - !ruby/object:Gem::Dependency
70
83
  name: rspec
71
84
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +122,6 @@ dependencies:
109
122
  - !ruby/object:Gem::Version
110
123
  version: '0'
111
124
  description: Twirp support for WebMock
112
- email:
113
125
  executables: []
114
126
  extensions: []
115
127
  extra_rdoc_files: []
@@ -119,6 +131,8 @@ files:
119
131
  - Gemfile.lock
120
132
  - LICENSE.txt
121
133
  - README.md
134
+ - gemfiles/protobuf_3.gemfile
135
+ - gemfiles/protobuf_3.gemfile.lock
122
136
  - lib/webmock-twirp.rb
123
137
  - lib/webmock/twirp.rb
124
138
  - lib/webmock/twirp/error.rb
@@ -137,7 +151,6 @@ homepage: https://github.com/dpep/webmock-twirp
137
151
  licenses:
138
152
  - MIT
139
153
  metadata: {}
140
- post_install_message:
141
154
  rdoc_options: []
142
155
  require_paths:
143
156
  - lib
@@ -145,15 +158,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
158
  requirements:
146
159
  - - ">="
147
160
  - !ruby/object:Gem::Version
148
- version: '3'
161
+ version: '3.2'
149
162
  required_rubygems_version: !ruby/object:Gem::Requirement
150
163
  requirements:
151
164
  - - ">="
152
165
  - !ruby/object:Gem::Version
153
166
  version: '0'
154
167
  requirements: []
155
- rubygems_version: 3.3.26
156
- signing_key:
168
+ rubygems_version: 3.6.9
157
169
  specification_version: 4
158
170
  summary: WebMock::Twirp
159
171
  test_files: []