flexmock 2.4.5 → 3.0.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.
@@ -212,74 +212,28 @@ class FlexMock
212
212
  #
213
213
  # @param [Array] args
214
214
  # @raise ValidationFailed
215
- def validate(args)
216
- args = args.dup
217
- kw_args = Hash.new
218
-
219
- last_is_proc = false
220
- begin
221
- if args.last.kind_of?(Proc)
222
- args.pop
223
- last_is_proc = true
224
- end
225
- rescue NoMethodError
226
- end
227
-
228
- last_is_kw_hash = false
229
- if expects_keyword_arguments?
230
- last_is_kw_hash =
231
- begin
232
- args.last.kind_of?(Hash)
233
- rescue NoMethodError
234
- end
215
+ def validate(args, kw, block)
216
+ kw ||= Hash.new
235
217
 
236
- if last_is_kw_hash
237
- kw_args = args.pop
238
- elsif requires_keyword_arguments?
239
- raise ValidationFailed, "#{@exp} expects keyword arguments but none were provided"
240
- end
218
+ if expects_keyword_arguments? && requires_keyword_arguments? && kw.empty?
219
+ raise ValidationFailed, "#{@exp} expects keyword arguments but none were provided"
241
220
  end
242
221
 
243
- # There is currently no way to disambiguate "given a block" from "given a
244
- # proc as last argument" ... give some leeway in this case
245
- positional_count = args.size
246
-
247
- if required_arguments > positional_count
248
- if requires_keyword_arguments?
249
- raise ValidationFailed, "#{@exp} expects at least #{required_arguments} positional arguments but got only #{positional_count}"
250
- end
251
-
252
- if (required_arguments - positional_count) == 1 && (last_is_kw_hash || last_is_proc)
253
- if last_is_kw_hash
254
- last_is_kw_hash = false
255
- kw_args = Hash.new
256
- else
257
- last_is_proc = false
258
- end
259
- positional_count += 1
260
- elsif (required_arguments - positional_count) == 2 && (last_is_kw_hash && last_is_proc)
261
- last_is_kw_hash = false
262
- kw_args = Hash.new
263
- last_is_proc = false
264
- positional_count += 2
265
- else
266
- raise ValidationFailed, "#{@exp} expects at least #{required_arguments} positional arguments but got only #{positional_count}"
267
- end
222
+ if required_arguments > args.size
223
+ raise ValidationFailed, "#{@exp} expects at least #{required_arguments} positional arguments but got only #{args.size}"
268
224
  end
269
225
 
270
- if !splat? && (required_arguments + optional_arguments) < positional_count
271
- if !last_is_proc || (required_arguments + optional_arguments) < positional_count - 1
272
- raise ValidationFailed, "#{@exp} expects at most #{required_arguments + optional_arguments} positional arguments but got #{positional_count}"
273
- end
226
+ if !splat? && (required_arguments + optional_arguments) < args.size
227
+ raise ValidationFailed, "#{@exp} expects at most #{required_arguments + optional_arguments} positional arguments but got #{args.size}"
274
228
  end
275
229
 
276
230
  missing_keyword_arguments = required_keyword_arguments.
277
- find_all { |k| !kw_args.has_key?(k) }
231
+ find_all { |k| !kw.has_key?(k) }
278
232
  if !missing_keyword_arguments.empty?
279
233
  raise ValidationFailed, "#{@exp} missing required keyword arguments #{missing_keyword_arguments.map(&:to_s).sort.join(", ")}"
280
234
  end
281
235
  if !keyword_splat?
282
- kw_args.each_key do |k|
236
+ kw.each_key do |k|
283
237
  if !optional_keyword_arguments.include?(k) && !required_keyword_arguments.include?(k)
284
238
  raise ValidationFailed, "#{@exp} given unexpected keyword argument #{k}"
285
239
  end
@@ -313,4 +267,3 @@ class FlexMock
313
267
  end
314
268
  end
315
269
  end
316
-
@@ -1,3 +1,3 @@
1
1
  class FlexMock
2
- VERSION = "2.4.5"
2
+ VERSION = "3.0.0"
3
3
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flexmock
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.5
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Weirich
8
8
  - Sylvain Joyeux
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-08-14 00:00:00.000000000 Z
12
+ date: 2024-08-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
@@ -157,7 +157,7 @@ homepage: https://github.com/doudou/flexmock
157
157
  licenses:
158
158
  - MIT
159
159
  metadata: {}
160
- post_install_message:
160
+ post_install_message:
161
161
  rdoc_options: []
162
162
  require_paths:
163
163
  - lib
@@ -165,15 +165,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
165
  requirements:
166
166
  - - ">="
167
167
  - !ruby/object:Gem::Version
168
- version: '2.2'
168
+ version: '3.0'
169
169
  required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  requirements: []
175
- rubygems_version: 3.1.6
176
- signing_key:
175
+ rubygems_version: 3.4.20
176
+ signing_key:
177
177
  specification_version: 4
178
178
  summary: Simple and Flexible Mock Objects for Testing
179
179
  test_files: []