contracts 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  module Mod
2
- include Contracts
2
+ include Contracts::Core
3
3
 
4
- Contract Num => Num
4
+ Contract C::Num => C::Num
5
5
  def self.a_module_method a
6
6
  a + 1
7
7
  end
@@ -19,7 +19,7 @@ RSpec.describe Contract do
19
19
  end
20
20
 
21
21
  klass = Class.new do
22
- include Contracts
22
+ include Contracts::Core
23
23
 
24
24
  Contract ({ :a => Contracts::Num, :b => String }) => nil
25
25
  def something(opts)
@@ -70,7 +70,7 @@ RSpec.describe Contract do
70
70
  end
71
71
 
72
72
  klass = Class.new do
73
- include Contracts
73
+ include Contracts::Core
74
74
 
75
75
  Contract stateful_contract[Contracts::Num] => Contracts::Num
76
76
  def only_three_times(x)
@@ -103,7 +103,7 @@ RSpec.describe Contract do
103
103
  end
104
104
 
105
105
  klass = Class.new do
106
- include Contracts
106
+ include Contracts::Core
107
107
 
108
108
  Contract String => String
109
109
  def greet(name)
@@ -135,7 +135,7 @@ RSpec.describe Contract do
135
135
  end
136
136
 
137
137
  klass = Class.new do
138
- include Contracts
138
+ include Contracts::Core
139
139
 
140
140
  Contract 1, Contracts::Num => Contracts::Num
141
141
  def gcd(_, b)
@@ -1,11 +1,11 @@
1
1
  class GenericExample
2
- Contract Args[String], Num => ArrayOf[String]
2
+ Contract C::Args[String], C::Num => C::ArrayOf[String]
3
3
  def splat_then_arg(*vals, n)
4
4
  vals.map { |v| v * n }
5
5
  end
6
6
 
7
7
  if ruby_version <= 1.9
8
- Contract ({:foo => Nat}) => nil
8
+ Contract ({:foo => C::Nat}) => nil
9
9
  def nat_test_with_kwarg(a_hash)
10
10
  end
11
11
  end
@@ -1,10 +1,10 @@
1
1
  class GenericExample
2
- Contract Args[String], { repeat: Maybe[Num] } => ArrayOf[String]
2
+ Contract C::Args[String], { repeat: C::Maybe[C::Num] } => C::ArrayOf[String]
3
3
  def splat_then_optional_named(*vals, repeat: 2)
4
4
  vals.map { |v| v * repeat }
5
5
  end
6
6
 
7
- Contract ({foo: Nat}) => nil
7
+ Contract ({foo: C::Nat}) => nil
8
8
  def nat_test_with_kwarg(foo: 10)
9
9
  end
10
10
  end
@@ -1,6 +1,6 @@
1
1
  class GenericExample
2
- Contract String, Bool, Args[Symbol], Float, KeywordArgs[e: Range, f: Optional[Num]], Proc =>
3
- [Proc, Hash, Maybe[Num], Range, Float, ArrayOf[Symbol], Bool, String]
2
+ Contract String, C::Bool, C::Args[Symbol], Float, C::KeywordArgs[e: Range, f: C::Optional[C::Num], g: Symbol], Proc =>
3
+ [Proc, Hash, C::Maybe[C::Num], Range, Float, C::ArrayOf[Symbol], C::Bool, String]
4
4
  def complicated(a, b = true, *c, d, e:, f:2, **g, &h)
5
5
  h.call [h, g, f, e, d, c, b, a]
6
6
  end
@@ -15,7 +15,7 @@ RSpec.describe "Contracts:" do
15
15
  describe "really complicated method signature" do
16
16
  it "should work with default named args used" do
17
17
  expect do
18
- @o.complicated("a", false, :b, 2.0, e: (1..5)) { |x| x }
18
+ @o.complicated("a", false, :b, 2.0, e: (1..5), g: :d) { |x| x }
19
19
  end.to_not raise_error
20
20
  end
21
21
 
@@ -56,7 +56,7 @@ RSpec.describe "Contracts:" do
56
56
  @o.complicated("a", true, :b, :c, 2.0, e: (1..5), f: nil, g: :d) do |x|
57
57
  x
58
58
  end
59
- end.to raise_error(ContractError, /Expected: \(KeywordArgs\[{:e=>Range, :f=>Optional\[Num\]}\]\)/)
59
+ end.to raise_error(ContractError, /Expected: \(KeywordArgs\[{:e=>Range, :f=>Optional\[Num\], :g=>Symbol}\]\)/)
60
60
  end
61
61
  end
62
62
  end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ module Contracts
4
+ RSpec.describe "range contract validator" do
5
+ subject(:o) { GenericExample.new }
6
+
7
+ it "passes when value is in range" do
8
+ expect do
9
+ o.method_with_range_contract(5)
10
+ end.not_to raise_error(ContractError)
11
+ end
12
+
13
+ it "fails when value is not in range" do
14
+ expect do
15
+ o.method_with_range_contract(300)
16
+ end.to raise_error(ContractError, /Expected: 1\.\.10/)
17
+ end
18
+
19
+ it "fails when value is incorrect" do
20
+ expect do
21
+ o.method_with_range_contract("hello world")
22
+ end.to raise_error(ContractError, /Expected: 1\.\.10.*Actual: "hello world"/m)
23
+ end
24
+ end
25
+ 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.10.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aditya Bhargava
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-16 00:00:00.000000000 Z
11
+ date: 2015-07-30 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
@@ -37,6 +37,7 @@ files:
37
37
  - lib/contracts.rb
38
38
  - lib/contracts/builtin_contracts.rb
39
39
  - lib/contracts/call_with.rb
40
+ - lib/contracts/core.rb
40
41
  - lib/contracts/decorators.rb
41
42
  - lib/contracts/engine.rb
42
43
  - lib/contracts/engine/base.rb
@@ -63,6 +64,7 @@ files:
63
64
  - spec/spec_helper.rb
64
65
  - spec/support.rb
65
66
  - spec/support_spec.rb
67
+ - spec/validators_spec.rb
66
68
  homepage: http://github.com/egonSchiele/contracts.ruby
67
69
  licenses: []
68
70
  metadata: {}
@@ -82,9 +84,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
84
  version: '0'
83
85
  requirements: []
84
86
  rubyforge_project:
85
- rubygems_version: 2.2.2
87
+ rubygems_version: 2.4.6
86
88
  signing_key:
87
89
  specification_version: 4
88
90
  summary: Contracts for Ruby.
89
91
  test_files: []
90
- has_rdoc: