contracts 0.17.1 → 0.17.2

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: 8a151d83a8b03910e5dd1171c384e0ea8a01ff9437d81140f995358d888ac0fa
4
- data.tar.gz: b92d01b9dd8702b866e004c41834781885d8178b1ceacb1e5166982243a13a49
3
+ metadata.gz: 6d5a8e7593b70e99ae8c0f56e6bf4484b884ecfbb740a418f27a78321ca856c9
4
+ data.tar.gz: c62fb8724ebfe3aea0dc2ff4ae8f9af119192d84d57244076ae83d60a5d26c03
5
5
  SHA512:
6
- metadata.gz: 94df8b86d22522b7c573f9cd7b3ee425568b024d7d3a88701759a2b47cdce691bd9ce7ec45710e7e8dafb993c7aa1cb93d6d9a0110d3c4effeece4b24fda29a9
7
- data.tar.gz: dbbddaf090e48b52cde302f6a6b5b89fc84045e9c392ef1d34ddcfb2e149f65c3da825b8140ebd4b3d36672ed933b841e1c59b9e684098bb3144762bcd7b4b50
6
+ metadata.gz: ea0815ee43b56200ab8465c112f5144989a0ac12c1a9e463ec7bc61ab14b1eeae5ef226ffed7961770b59d57fcfac3527445620cafaa55675337d289beedac4b
7
+ data.tar.gz: 1895e5c8786d024696e05be452c749f1f830e538b348d30fc9deb165f92a3f87697659b5fef784a65e4eda5f4306ed3c38a7d8622ef72fd76bd5cd38e41f3b1f
@@ -6,11 +6,13 @@ on:
6
6
  - master
7
7
  paths-ignore:
8
8
  - 'README.md'
9
+ - 'CHANGELOG.markdown'
9
10
  push:
10
11
  branches:
11
12
  - master
12
13
  paths-ignore:
13
14
  - 'README.md'
15
+ - 'CHANGELOG.markdown'
14
16
 
15
17
  jobs:
16
18
  rubocop:
@@ -6,11 +6,13 @@ on:
6
6
  - master
7
7
  paths-ignore:
8
8
  - 'README.md'
9
+ - 'CHANGELOG.markdown'
9
10
  push:
10
11
  branches:
11
12
  - master
12
13
  paths-ignore:
13
14
  - 'README.md'
15
+ - 'CHANGELOG.markdown'
14
16
 
15
17
  jobs:
16
18
  unit_tests:
data/CHANGELOG.markdown CHANGED
@@ -1,4 +1,18 @@
1
1
 
2
+ ## [v0.17.1] - 2024-10-06
3
+
4
+ [v0.17.1]: https://github.com/egonSchiele/contracts.ruby/compare/v0.17...v0.17.1
5
+
6
+ - Bugfix: Fix keyword arguments contract when used with optional positional arguments - [PikachuEXE](https://github.com/PikachuEXE) [#305](https://github.com/egonSchiele/contracts.ruby/pull/305)
7
+ - Enhancement: Always load version.rb, suppress legacy deprecation warning - [Vlad Pisanov](https://github.com/vlad-pisanov) [#301](https://github.com/egonSchiele/contracts.ruby/pull/306)
8
+ - Enhancement: Update doc & spec about deprecated `Fixnum` to `Integer` - [PikachuEXE](https://github.com/PikachuEXE) [#301](https://github.com/egonSchiele/contracts.ruby/pull/301)
9
+
10
+ ## [v0.17] - 2021-09-28
11
+
12
+ [v0.17]: https://github.com/egonSchiele/contracts.ruby/compare/v0.16.1...v0.17
13
+
14
+ - Update implementation & spec to be 3.0 compatible **Support for Ruby 2 has been discontinued** - [PikachuEXE](https://github.com/PikachuEXE) [#295](https://github.com/egonSchiele/contracts.ruby/pull/295)
15
+
2
16
  ## [v0.16.1] - 2021-04-17
3
17
 
4
18
  [v0.16.1]: https://github.com/egonSchiele/contracts.ruby/compare/v0.16.0...v0.16.1
@@ -20,7 +34,7 @@
20
34
  [v0.15.0]: https://github.com/egonSchiele/contracts.ruby/compare/v0.14.0...v0.15.0
21
35
 
22
36
  - Bugfix: Func contract's return value isn't enforced with blocks - [Piotr Szmielew](https://github.com/esse) [#251](https://github.com/egonSchiele/contracts.ruby/pull/251)
23
- - Bugfx: Fix contracts used in AR-models - [Gert Goet](https://github.com/eval) [#237](https://github.com/egonSchiele/contracts.ruby/pull/237)
37
+ - Bugfix: Fix contracts used in AR-models - [Gert Goet](https://github.com/eval) [#237](https://github.com/egonSchiele/contracts.ruby/pull/237)
24
38
 
25
39
  ## [v0.14.0] - 2016-04-26
26
40
 
@@ -0,0 +1,133 @@
1
+ Feature: Method Overloading
2
+
3
+ You can use contracts for method overloading! This is commonly called "pattern matching" in functional programming languages.
4
+
5
+ ```ruby
6
+ Contract 1 => 1
7
+ def fact x
8
+ x
9
+ end
10
+
11
+ Contract C::Num => C::Num
12
+ def fact x
13
+ x * fact(x - 1)
14
+ end
15
+ ```
16
+
17
+ Background:
18
+ Given a file named "method_overloading_with_positional_args_usage.rb" with:
19
+ """ruby
20
+ require "contracts"
21
+ C = Contracts
22
+
23
+ class Example
24
+ include Contracts::Core
25
+
26
+ Contract 1 => 1
27
+ def fact(x)
28
+ x
29
+ end
30
+
31
+ Contract C::Num => C::Num
32
+ def fact(x)
33
+ x * fact(x - 1)
34
+ end
35
+ end
36
+ """
37
+
38
+ Given a file named "method_overloading_with_keyword_args_usage.rb" with:
39
+ """ruby
40
+ require "contracts"
41
+ C = Contracts
42
+
43
+ class Example
44
+ include Contracts::Core
45
+
46
+ Contract C::KeywordArgs[age: Integer, size: Symbol] => String
47
+ def speak(age:, size:)
48
+ "age: #{age} size: #{size}"
49
+ end
50
+
51
+ Contract C::KeywordArgs[sound: String] => String
52
+ def speak(sound:)
53
+ "sound: #{sound}"
54
+ end
55
+ end
56
+ """
57
+
58
+ Scenario: Positional Args Method 1
59
+ Given a file named "positional_args_method_1.rb" with:
60
+ """ruby
61
+ require "./method_overloading_with_positional_args_usage"
62
+ puts Example.new.fact(1)
63
+ """
64
+ When I run `ruby positional_args_method_1.rb`
65
+ Then the output should contain:
66
+ """
67
+ 1
68
+ """
69
+
70
+ Scenario: Positional Args Method 2
71
+ Given a file named "positional_args_method_2.rb" with:
72
+ """ruby
73
+ require "./method_overloading_with_positional_args_usage"
74
+ puts Example.new.fact(4)
75
+ """
76
+ When I run `ruby positional_args_method_2.rb`
77
+ Then the output should contain:
78
+ """
79
+ 24
80
+ """
81
+
82
+ Scenario: Keyword Args Method 1
83
+ Given a file named "keyword_args_method_1.rb" with:
84
+ """ruby
85
+ require "./method_overloading_with_keyword_args_usage"
86
+ puts Example.new.speak(age: 5, size: :large)
87
+ """
88
+ When I run `ruby keyword_args_method_1.rb`
89
+ Then the output should contain:
90
+ """
91
+ age: 5 size: large
92
+ """
93
+
94
+ Scenario: Keyword Args Method 2
95
+ Given a file named "keyword_args_method_2.rb" with:
96
+ """ruby
97
+ require "./method_overloading_with_keyword_args_usage"
98
+ puts Example.new.speak(sound: "woof")
99
+ """
100
+ When I run `ruby keyword_args_method_2.rb`
101
+ Then the output should contain:
102
+ """
103
+ sound: woof
104
+ """
105
+
106
+ Scenario: Incorrect Positional Args Method
107
+ Given a file named "incorrect_positional_args_method.rb" with:
108
+ """ruby
109
+ require "contracts"
110
+ C = Contracts
111
+
112
+ class Example
113
+ include Contracts::Core
114
+
115
+ # Notice that this method's contract is wider than the one below
116
+ # This would cause this method to be called every time but never the one below
117
+ Contract C::Num => C::Num
118
+ def fact(x)
119
+ x * fact(x - 1)
120
+ end
121
+
122
+ Contract 1 => 1
123
+ def fact(x)
124
+ x
125
+ end
126
+ end
127
+ puts Example.new.fact(4)
128
+ """
129
+ When I run `ruby incorrect_positional_args_method.rb`
130
+ Then the output should contain:
131
+ """
132
+ stack level too deep (SystemStackError)
133
+ """
@@ -174,8 +174,10 @@ https://github.com/egonSchiele/contracts.ruby/issues
174
174
 
175
175
  def validate_pattern_matching!
176
176
  new_args_contract = decorator.args_contracts
177
+ new_kargs_contract = decorator.kargs_contract
177
178
  matched = decorated_methods.select do |contract|
178
- contract.args_contracts == new_args_contract
179
+ contract.args_contracts == new_args_contract &&
180
+ contract.kargs_contract == new_kargs_contract
179
181
  end
180
182
 
181
183
  return if matched.empty?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Contracts
4
- VERSION = "0.17.1"
4
+ VERSION = "0.17.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contracts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.1
4
+ version: 0.17.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aditya Bhargava
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-05 00:00:00.000000000 Z
11
+ date: 2024-10-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: This library provides contracts for Ruby. Contracts let you clearly express
14
14
  how your code behaves, and free you from writing tons of boilerplate, defensive
@@ -40,6 +40,7 @@ files:
40
40
  - cucumber.yml
41
41
  - dependabot.yml
42
42
  - features/README.md
43
+ - features/advanced/pattern_matching.feature
43
44
  - features/basics/functype.feature
44
45
  - features/basics/pretty-print.feature
45
46
  - features/basics/simple_example.feature