delivered 0.3.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: c2cc2a244302acba122bf449caa221233453955568ca1a7c42f9a4c66e75093a
4
- data.tar.gz: 2c6033b4adee7756b8fb7bbb9ff0cac83bbe7f42e35220eb9a24857c17e2aa7e
3
+ metadata.gz: bd1eeeeaa704a08c1b4c834b24ba5623409da015b9697df7653cd60502edd8c3
4
+ data.tar.gz: 7fbce031535260897742c0f38100b23b0e62431f85dcd0f40c5b5a062a1f982a
5
5
  SHA512:
6
- metadata.gz: 3adf4d4bb048a39a00e331e598814998fffe28673702d08bba181cd574f521b3f2d164725c5fe61d349c85c960c32a59d98bb8855ff0f26db6ad5bd74123ae4e
7
- data.tar.gz: 735bde97671a2e2d69238b5363de35971ecb1a7ab4003e2352c560231bd461b712a3e652bd01c9b02cf067d5d8b2a856baf6b8709621c5f8e34b0eb94c692e9f
6
+ metadata.gz: 3cca910f20d4d8cc948912346ff1f2c20add1e0fb7b7ba3bdaa42e81702195290b84670220579e6e6359a619e2f94f4bf4460fd0a2c9ad7227d39b2f84c42896
7
+ data.tar.gz: 23ad19572356a722b933db7253810b212120f1d9d47242a4fe56b5c6009d51164d6035ede779ee9d37758e9c6d3b235d18c75f553a5b8e09bf80318c59caac64
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- delivered (0.3.0)
4
+ delivered (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -23,16 +23,16 @@ GEM
23
23
  racc
24
24
  psych (5.1.2)
25
25
  stringio
26
- racc (1.7.3)
26
+ racc (1.8.0)
27
27
  rainbow (3.1.1)
28
- rdoc (6.6.3.1)
28
+ rdoc (6.7.0)
29
29
  psych (>= 4.0.0)
30
30
  regexp_parser (2.9.2)
31
- reline (0.5.7)
31
+ reline (0.5.8)
32
32
  io-console (~> 0.5)
33
33
  rexml (3.2.8)
34
34
  strscan (>= 3.0.9)
35
- rubocop (1.63.5)
35
+ rubocop (1.64.0)
36
36
  json (~> 2.3)
37
37
  language_server-protocol (>= 3.17.0)
38
38
  parallel (~> 1.10)
data/README.md CHANGED
@@ -26,6 +26,16 @@ end
26
26
  If an invalid argument is given to `User#create`, for example, if `age` is a `String` instead of
27
27
  the required `Integer`, a `Delivered::ArgumentError` exception will be raised.
28
28
 
29
+ ### Single and Double Splat Arguments
30
+
31
+ You can use single and double splats in your method signatures, and Delivered will pass them through
32
+ without checking, while still checking the other named positional and keyword arguments.
33
+
34
+ ```ruby
35
+ sig String
36
+ def create(name, *args, foo:, **kwargs); end
37
+ ```
38
+
29
39
  ### Return Types
30
40
 
31
41
  You can also check the return value of the method by passing a Hash with an Array as the key, and
@@ -3,8 +3,6 @@
3
3
  module Delivered
4
4
  module Signature
5
5
  def sig(*sig_args, **sig_kwargs, &return_blk)
6
- # ap [sig_args, sig_kwargs, return_blk]
7
-
8
6
  # Block return
9
7
  returns = return_blk&.call
10
8
 
@@ -20,15 +18,13 @@ module Delivered
20
18
  sig_kwargs = sig_args.pop if sig_args.last.is_a?(Hash)
21
19
  end
22
20
 
23
- # ap [sig_args, sig_kwargs, returns]
21
+ # ap(sig_args:, sig_kwargs:)
24
22
 
25
23
  meta = class << self; self; end
26
24
  sig_check = lambda do |klass, class_method, name, *args, **kwargs, &block| # rubocop:disable Metrics/BlockLength
27
- cname = if class_method
28
- "#{klass.name}.#{name}"
29
- else
30
- "#{klass.class.name}##{name}"
31
- end
25
+ # ap(args:, kwargs:, params: klass.method(:"__#{name}").parameters)
26
+
27
+ cname = class_method ? "#{klass.name}.#{name}" : "#{klass.class.name}##{name}"
32
28
 
33
29
  sig_args.each.with_index do |arg, i|
34
30
  args[i] => ^arg
@@ -39,13 +35,15 @@ module Delivered
39
35
  caller, cause: e
40
36
  end
41
37
 
42
- kwargs.each do |key, value|
43
- value => ^(sig_kwargs[key])
44
- rescue NoMatchingPatternError => e
45
- raise Delivered::ArgumentError,
46
- "`#{cname}` expected #{sig_kwargs[key].inspect} as keyword argument :#{key}, " \
47
- "but received `#{value.inspect}`",
48
- caller, cause: e
38
+ unless sig_kwargs.empty?
39
+ kwargs.each do |key, value|
40
+ value => ^(sig_kwargs[key])
41
+ rescue NoMatchingPatternError => e
42
+ raise Delivered::ArgumentError,
43
+ "`#{cname}` expected #{sig_kwargs[key].inspect} as keyword argument :#{key}, " \
44
+ "but received `#{value.inspect}`",
45
+ caller, cause: e
46
+ end
49
47
  end
50
48
 
51
49
  result = if block
@@ -66,6 +64,7 @@ module Delivered
66
64
  result
67
65
  end
68
66
 
67
+ # Instance method redefinition
69
68
  meta.send :define_method, :method_added do |name|
70
69
  meta.send :remove_method, :method_added
71
70
  meta.send :remove_method, :singleton_method_added
@@ -76,6 +75,7 @@ module Delivered
76
75
  end
77
76
  end
78
77
 
78
+ # Class method redefinition
79
79
  meta.send :define_method, :singleton_method_added do |name|
80
80
  next if name == :singleton_method_added
81
81
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Delivered
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delivered
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Moss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-17 00:00:00.000000000 Z
11
+ date: 2024-05-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -49,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  requirements: []
52
- rubygems_version: 3.5.9
52
+ rubygems_version: 3.5.10
53
53
  signing_key:
54
54
  specification_version: 4
55
55
  summary: Simple runtime type checking for Ruby method signatures