contracts 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,45 @@
1
+ module Contracts
2
+ module Core
3
+ def self.included(base)
4
+ common(base)
5
+ end
6
+
7
+ def self.extended(base)
8
+ common(base)
9
+ end
10
+
11
+ def self.common(base)
12
+ return if base.respond_to?(:Contract)
13
+
14
+ base.extend(MethodDecorators)
15
+
16
+ base.instance_eval do
17
+ def functype(funcname)
18
+ contracts = Engine.fetch_from(self).decorated_methods_for(:class_methods, funcname)
19
+ if contracts.nil?
20
+ "No contract for #{self}.#{funcname}"
21
+ else
22
+ "#{funcname} :: #{contracts[0]}"
23
+ end
24
+ end
25
+ end
26
+
27
+ base.class_eval do
28
+ # TODO: deprecate
29
+ # Required when contracts are included in global scope
30
+ def Contract(*args)
31
+ self.class.Contract(*args)
32
+ end
33
+
34
+ def functype(funcname)
35
+ contracts = Engine.fetch_from(self.class).decorated_methods_for(:instance_methods, funcname)
36
+ if contracts.nil?
37
+ "No contract for #{self.class}.#{funcname}"
38
+ else
39
+ "#{funcname} :: #{contracts[0]}"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -25,6 +25,12 @@ module Contracts
25
25
  end
26
26
  end,
27
27
 
28
+ Range => lambda do |contract|
29
+ lambda do |arg|
30
+ contract.include?(arg)
31
+ end
32
+ end,
33
+
28
34
  Contracts::Args => lambda do |contract|
29
35
  lambda do |arg|
30
36
  Contract.valid?(arg, contract.contract)
@@ -1,3 +1,3 @@
1
1
  module Contracts
2
- VERSION = "0.10.1"
2
+ VERSION = "0.11.0"
3
3
  end
@@ -150,7 +150,7 @@ RSpec.describe "Contracts:" do
150
150
  end
151
151
 
152
152
  it "should fail for an object with both methods :good and :bad" do
153
- expect { @o.xor_test(C.new) }.to raise_error(ContractError)
153
+ expect { @o.xor_test(F.new) }.to raise_error(ContractError)
154
154
  end
155
155
  end
156
156
 
@@ -160,7 +160,17 @@ RSpec.describe "Contracts:" do
160
160
  end
161
161
 
162
162
  it "should fail for an object that has a method :good but isn't of class A" do
163
- expect { @o.and_test(C.new) }.to raise_error(ContractError)
163
+ expect { @o.and_test(F.new) }.to raise_error(ContractError)
164
+ end
165
+ end
166
+
167
+ describe "Enum:" do
168
+ it "should pass for an object that is included" do
169
+ expect { @o.enum_test(:a) }.to_not raise_error
170
+ end
171
+
172
+ it "should fail for an object that is not included" do
173
+ expect { @o.enum_test(:z) }.to raise_error(ContractError)
164
174
  end
165
175
  end
166
176
 
@@ -180,7 +190,7 @@ RSpec.describe "Contracts:" do
180
190
  end
181
191
 
182
192
  it "should fail for an object that returns false for method :good" do
183
- expect { @o.send_test(C.new) }.to raise_error(ContractError)
193
+ expect { @o.send_test(F.new) }.to raise_error(ContractError)
184
194
  end
185
195
  end
186
196
 
@@ -322,6 +332,26 @@ RSpec.describe "Contracts:" do
322
332
  end
323
333
  end
324
334
 
335
+ describe "KeywordArgs:" do
336
+ it "should pass for exact correct input" do
337
+ expect { @o.person_keywordargs(:name => "calvin", :age => 10) }.to_not raise_error
338
+ end
339
+
340
+ it "should fail if some keys don't have contracts" do
341
+ expect { @o.person_keywordargs(:name => "calvin", :age => 10, :foo => "bar") }.to raise_error(ContractError)
342
+ end
343
+
344
+ it "should fail if a key with a contract on it isn't provided" do
345
+ expect { @o.person_keywordargs(:name => "calvin") }.to raise_error(ContractError)
346
+ end
347
+
348
+ it "should fail for incorrect input" do
349
+ expect { @o.person_keywordargs(:name => 50, :age => 10) }.to raise_error(ContractError)
350
+ expect { @o.hash_keywordargs(:hash => nil) }.to raise_error(ContractError)
351
+ expect { @o.hash_keywordargs(:hash => 1) }.to raise_error(ContractError)
352
+ end
353
+ end
354
+
325
355
  describe "Optional:" do
326
356
  it "can't be used outside of KeywordArgs" do
327
357
  expect do
@@ -334,7 +364,7 @@ RSpec.describe "Contracts:" do
334
364
  it "doesn't allow to specify multiple key-value pairs with pretty syntax" do
335
365
  expect do
336
366
  Class.new do
337
- include Contracts
367
+ include Contracts::Core
338
368
 
339
369
  Contract Contracts::HashOf[Symbol => String, Contracts::Num => Contracts::Num] => nil
340
370
  def something(hash)
@@ -351,6 +381,8 @@ RSpec.describe "Contracts:" do
351
381
 
352
382
  context "given an unfulfilled contract" do
353
383
  it { expect { @o.gives_max_value(:panda => "1", :bamboo => "2") }.to raise_error(ContractError) }
384
+ it { expect { @o.gives_max_value(nil) }.to raise_error(ContractError) }
385
+ it { expect { @o.gives_max_value(1) }.to raise_error(ContractError) }
354
386
  it { expect { @o.pretty_gives_max_value(:panda => "1", :bamboo => "2") }.to raise_error(ContractError) }
355
387
  end
356
388
 
@@ -226,7 +226,7 @@ RSpec.describe "Contracts:" do
226
226
  describe "anonymous classes" do
227
227
  let(:klass) do
228
228
  Class.new do
229
- include Contracts
229
+ include Contracts::Core
230
230
 
231
231
  Contract String => String
232
232
  def greeting(name)
@@ -249,7 +249,7 @@ RSpec.describe "Contracts:" do
249
249
  describe "anonymous modules" do
250
250
  let(:mod) do
251
251
  Module.new do
252
- include Contracts
252
+ include Contracts::Core
253
253
 
254
254
  Contract String => String
255
255
  def greeting(name)
@@ -423,6 +423,16 @@ RSpec.describe "Contracts:" do
423
423
  @o.maybe_call("bad")
424
424
  end.to raise_error(ContractError)
425
425
  end
426
+
427
+ describe "varargs are given with a maybe block" do
428
+ it "when a block is passed in, varargs should be correct" do
429
+ expect(@o.maybe_call(1, 2, 3) { 1 + 1 }).to eq([1, 2, 3])
430
+ end
431
+
432
+ it "when a block is NOT passed in, varargs should still be correct" do
433
+ expect(@o.maybe_call(1, 2, 3)).to eq([1, 2, 3])
434
+ end
435
+ end
426
436
  end
427
437
 
428
438
  describe "varargs" do
@@ -1,9 +1,11 @@
1
1
  require "date"
2
2
 
3
+ C = Contracts
4
+
3
5
  class A
4
- include Contracts
6
+ include Contracts::Core
5
7
 
6
- Contract Num => Num
8
+ Contract C::Num => C::Num
7
9
  def self.a_class_method x
8
10
  x + 1
9
11
  end
@@ -12,12 +14,12 @@ class A
12
14
  true
13
15
  end
14
16
 
15
- Contract Num => Num
17
+ Contract C::Num => C::Num
16
18
  def triple x
17
19
  x * 3
18
20
  end
19
21
 
20
- Contract Num => Num
22
+ Contract C::Num => C::Num
21
23
  def instance_and_class_method x
22
24
  x * 2
23
25
  end
@@ -29,7 +31,7 @@ class A
29
31
  end
30
32
 
31
33
  class B
32
- include Contracts
34
+ include Contracts::Core
33
35
 
34
36
  def bad
35
37
  false
@@ -41,8 +43,8 @@ class B
41
43
  end
42
44
  end
43
45
 
44
- class C
45
- include Contracts
46
+ class F
47
+ include Contracts::Core
46
48
 
47
49
  def good
48
50
  false
@@ -60,19 +62,19 @@ class EmptyCont
60
62
  end
61
63
 
62
64
  class GenericExample
63
- include Contracts
65
+ include Contracts::Core
64
66
 
65
- Contract Num => Num
67
+ Contract C::Num => C::Num
66
68
  def self.a_class_method x
67
69
  x + 1
68
70
  end
69
71
 
70
- Contract Num => nil
72
+ Contract C::Num => nil
71
73
  def bad_double(x)
72
74
  x * 2
73
75
  end
74
76
 
75
- Contract Num => Num
77
+ Contract C::Num => C::Num
76
78
  def double(x)
77
79
  x * 2
78
80
  end
@@ -86,12 +88,12 @@ class GenericExample
86
88
  def hello(name)
87
89
  end
88
90
 
89
- Contract lambda { |x| x.is_a? Numeric } => Num
91
+ Contract lambda { |x| x.is_a? Numeric } => C::Num
90
92
  def square(x)
91
93
  x ** 2
92
94
  end
93
95
 
94
- Contract [Num, Num, Num] => Num
96
+ Contract [C::Num, C::Num, C::Num] => C::Num
95
97
  def sum_three(vals)
96
98
  vals.inject(0) do |acc, x|
97
99
  acc + x
@@ -102,43 +104,52 @@ class GenericExample
102
104
  def person(data)
103
105
  end
104
106
 
105
- Contract ({ :rigged => Or[TrueClass, FalseClass] }) => nil
107
+ Contract ({ :rigged => C::Or[TrueClass, FalseClass] }) => nil
106
108
  def hash_complex_contracts(data)
107
109
  end
108
110
 
109
- Contract ({ :rigged => Bool,
110
- :contents => { :kind => Or[String, Symbol],
111
- :total => Num }
111
+ Contract ({ :rigged => C::Bool,
112
+ :contents => { :kind => C::Or[String, Symbol],
113
+ :total => C::Num }
112
114
  }) => nil
113
115
  def nested_hash_complex_contracts(data)
114
116
  end
115
117
 
116
- Contract [Or[TrueClass, FalseClass]] => nil
118
+ Contract C::KeywordArgs[:name => String, :age => Fixnum] => nil
119
+ def person_keywordargs(data)
120
+ end
121
+
122
+ Contract C::KeywordArgs[:hash => C::HashOf[Symbol, C::Num]] => nil
123
+ def hash_keywordargs(data)
124
+ end
125
+
126
+ Contract [C::Or[TrueClass, FalseClass]] => nil
117
127
  def array_complex_contracts(data)
118
128
  end
119
129
 
120
- Contract [Bool, [Or[String, Symbol]]] => nil
130
+ Contract [C::Bool, [C::Or[String, Symbol]]] => nil
121
131
  def nested_array_complex_contracts(data)
122
132
  end
123
133
 
124
- Contract Proc => Any
134
+ Contract Proc => C::Any
125
135
  def do_call(&block)
126
136
  block.call
127
137
  end
128
138
 
129
- Contract Args[Num], Maybe[Proc] => Any
139
+ Contract C::Args[C::Num], C::Maybe[Proc] => C::Any
130
140
  def maybe_call(*vals, &block)
131
141
  block.call if block
142
+ vals
132
143
  end
133
144
 
134
- Contract Args[Num] => Num
145
+ Contract C::Args[C::Num] => C::Num
135
146
  def sum(*vals)
136
147
  vals.inject(0) do |acc, val|
137
148
  acc + val
138
149
  end
139
150
  end
140
151
 
141
- Contract Args[Num], Proc => Num
152
+ Contract C::Args[C::Num], Proc => C::Num
142
153
  def with_partial_sums(*vals, &blk)
143
154
  sum = vals.inject(0) do |acc, val|
144
155
  blk[acc]
@@ -147,7 +158,7 @@ class GenericExample
147
158
  blk[sum]
148
159
  end
149
160
 
150
- Contract Args[Num], Func[Num => Num] => Num
161
+ Contract C::Args[C::Num], C::Func[C::Num => C::Num] => C::Num
151
162
  def with_partial_sums_contracted(*vals, &blk)
152
163
  sum = vals.inject(0) do |acc, val|
153
164
  blk[acc]
@@ -157,102 +168,106 @@ class GenericExample
157
168
  end
158
169
 
159
170
  # Important to use different arg types or it falsely passes
160
- Contract Num, Args[String] => ArrayOf[String]
171
+ Contract C::Num, C::Args[String] => C::ArrayOf[String]
161
172
  def arg_then_splat(n, *vals)
162
173
  vals.map { |v| v * n }
163
174
  end
164
175
 
165
- Contract Num, Proc => nil
176
+ Contract C::Num, Proc => nil
166
177
  def double_with_proc(x, &blk)
167
178
  blk.call(x * 2)
168
179
  nil
169
180
  end
170
181
 
171
- Contract Pos => nil
182
+ Contract C::Pos => nil
172
183
  def pos_test(x)
173
184
  end
174
185
 
175
- Contract Neg => nil
186
+ Contract C::Neg => nil
176
187
  def neg_test(x)
177
188
  end
178
189
 
179
- Contract Nat => nil
190
+ Contract C::Nat => nil
180
191
  def nat_test(x)
181
192
  end
182
193
 
183
- Contract Any => nil
194
+ Contract C::Any => nil
184
195
  def show(x)
185
196
  end
186
197
 
187
- Contract None => nil
198
+ Contract C::None => nil
188
199
  def fail_all(x)
189
200
  end
190
201
 
191
- Contract Or[Num, String] => nil
202
+ Contract C::Or[C::Num, String] => nil
192
203
  def num_or_string(x)
193
204
  end
194
205
 
195
- Contract Xor[RespondTo[:good], RespondTo[:bad]] => nil
206
+ Contract C::Xor[C::RespondTo[:good], C::RespondTo[:bad]] => nil
196
207
  def xor_test(x)
197
208
  end
198
209
 
199
- Contract And[A, RespondTo[:good]] => nil
210
+ Contract C::And[A, C::RespondTo[:good]] => nil
200
211
  def and_test(x)
201
212
  end
202
213
 
203
- Contract RespondTo[:good] => nil
214
+ Contract C::Enum[:a, :b, :c] => nil
215
+ def enum_test(x)
216
+ end
217
+
218
+ Contract C::RespondTo[:good] => nil
204
219
  def responds_test(x)
205
220
  end
206
221
 
207
- Contract Send[:good] => nil
222
+ Contract C::Send[:good] => nil
208
223
  def send_test(x)
209
224
  end
210
225
 
211
- Contract Not[nil] => nil
226
+ Contract C::Not[nil] => nil
212
227
  def not_nil(x)
213
228
  end
214
229
 
215
- Contract ArrayOf[Num] => Num
230
+ Contract C::ArrayOf[C::Num] => C::Num
216
231
  def product(vals)
217
232
  vals.inject(1) do |acc, x|
218
233
  acc * x
219
234
  end
220
235
  end
221
236
 
222
- Contract SetOf[Num] => Num
237
+ Contract C::SetOf[C::Num] => C::Num
223
238
  def product_from_set(vals)
224
239
  vals.inject(1) do |acc, x|
225
240
  acc * x
226
241
  end
227
242
  end
228
243
 
229
- Contract RangeOf[Num] => Num
244
+ Contract C::RangeOf[C::Num] => C::Num
230
245
  def first_in_range_num(r)
231
246
  r.first
232
247
  end
233
248
 
234
- Contract RangeOf[Date] => Date
249
+ Contract C::RangeOf[Date] => Date
235
250
  def first_in_range_date(r)
236
251
  r.first
237
252
  end
238
253
 
239
- Contract Bool => nil
254
+ Contract C::Bool => nil
240
255
  def bool_test(x)
241
256
  end
242
257
 
243
- Contract Num
258
+ Contract C::Num
244
259
  def no_args
245
260
  1
246
261
  end
247
262
 
248
263
  # This function has a contract which says it has no args,
249
264
  # but the function does have args.
250
- Contract nil => Num
265
+ Contract nil => C::Num
251
266
  def old_style_no_args
252
267
  2
253
268
  end
254
269
 
255
- Contract ArrayOf[Num], Func[Num => Num] => ArrayOf[Num]
270
+ Contract C::ArrayOf[C::Num], C::Func[C::Num => C::Num] => C::ArrayOf[C::Num]
256
271
  def map(arr, func)
257
272
  ret = []
258
273
  arr.each do |x|
@@ -261,7 +276,7 @@ class GenericExample
261
276
  ret
262
277
  end
263
278
 
264
- Contract ArrayOf[Any], Proc => ArrayOf[Any]
279
+ Contract C::ArrayOf[C::Any], Proc => C::ArrayOf[C::Any]
265
280
  def tutorial_map(arr, func)
266
281
  ret = []
267
282
  arr.each do |x|
@@ -272,29 +287,29 @@ class GenericExample
272
287
 
273
288
  # Need to test Func with weak contracts for other args
274
289
  # and changing type from input to output otherwise it falsely passes!
275
- Contract Array, Func[String => Num] => Array
290
+ Contract Array, C::Func[String => C::Num] => Array
276
291
  def map_plain(arr, func)
277
292
  arr.map do |x|
278
293
  func[x]
279
294
  end
280
295
  end
281
296
 
282
- Contract None => Func[String => Num]
297
+ Contract C::None => C::Func[String => C::Num]
283
298
  def lambda_with_wrong_return
284
299
  lambda { |x| x }
285
300
  end
286
301
 
287
- Contract None => Func[String => Num]
302
+ Contract C::None => C::Func[String => C::Num]
288
303
  def lambda_with_correct_return
289
304
  lambda { |x| x.length }
290
305
  end
291
306
 
292
- Contract Num => Num
307
+ Contract C::Num => C::Num
293
308
  def default_args(x = 1)
294
309
  2
295
310
  end
296
311
 
297
- Contract Maybe[Num] => Maybe[Num]
312
+ Contract C::Maybe[C::Num] => C::Maybe[C::Num]
298
313
  def maybe_double x
299
314
  if x.nil?
300
315
  nil
@@ -303,21 +318,25 @@ class GenericExample
303
318
  end
304
319
  end
305
320
 
306
- Contract HashOf[Symbol, Num] => Num
321
+ Contract C::HashOf[Symbol, C::Num] => C::Num
307
322
  def gives_max_value(hash)
308
323
  hash.values.max
309
324
  end
310
325
 
311
- Contract HashOf[Symbol => Num] => Num
326
+ Contract C::HashOf[Symbol => C::Num] => C::Num
312
327
  def pretty_gives_max_value(hash)
313
328
  hash.values.max
314
329
  end
315
330
 
316
- Contract EmptyCont => Any
331
+ Contract EmptyCont => C::Any
317
332
  def using_empty_contract(a)
318
333
  a
319
334
  end
320
335
 
336
+ Contract (1..10) => nil
337
+ def method_with_range_contract(x)
338
+ end
339
+
321
340
  Contract String
322
341
  def a_private_method
323
342
  "works"
@@ -347,9 +366,9 @@ end
347
366
 
348
367
  # for testing inheritance
349
368
  class Parent
350
- include Contracts
369
+ include Contracts::Core
351
370
 
352
- Contract Num => Num
371
+ Contract C::Num => C::Num
353
372
  def double x
354
373
  x * 2
355
374
  end
@@ -364,7 +383,7 @@ class GenericExample
364
383
  a
365
384
  end
366
385
 
367
- Contract Exactly[Parent] => nil
386
+ Contract C::Exactly[Parent] => nil
368
387
  def exactly_test(x)
369
388
  end
370
389
  end
@@ -377,22 +396,22 @@ end
377
396
  Baz = 1
378
397
 
379
398
  class GenericExample
380
- Contract Eq[Foo] => Any
399
+ Contract C::Eq[Foo] => C::Any
381
400
  def eq_class_test(x)
382
401
  end
383
402
 
384
- Contract Eq[Bar] => Any
403
+ Contract C::Eq[Bar] => C::Any
385
404
  def eq_module_test(x)
386
405
  end
387
406
 
388
- Contract Eq[Baz] => Any
407
+ Contract C::Eq[Baz] => C::Any
389
408
  def eq_value_test(x)
390
409
  end
391
410
  end
392
411
 
393
412
  # pattern matching example with possible deep contract violation
394
413
  class PatternMatchingExample
395
- include Contracts
414
+ include Contracts::Core
396
415
 
397
416
  class Success
398
417
  attr_accessor :request
@@ -408,7 +427,7 @@ class PatternMatchingExample
408
427
  class Failure
409
428
  end
410
429
 
411
- Response = Or[Success, Failure]
430
+ Response = C::Or[Success, Failure]
412
431
 
413
432
  class StringWithHello
414
433
  def self.valid?(string)
@@ -431,17 +450,17 @@ class PatternMatchingExample
431
450
  request + "!"
432
451
  end
433
452
 
434
- Contract Num, String => String
453
+ Contract C::Num, String => String
435
454
  def do_stuff(number, string)
436
455
  "foo"
437
456
  end
438
457
 
439
- Contract Num, String, Num => String
458
+ Contract C::Num, String, C::Num => String
440
459
  def do_stuff(number, string, other_number)
441
460
  "bar"
442
461
  end
443
462
 
444
- Contract Num => Num
463
+ Contract C::Num => C::Num
445
464
  def double x
446
465
  "bad"
447
466
  end
@@ -454,7 +473,7 @@ end
454
473
 
455
474
  # invariant example (silliest implementation ever)
456
475
  class MyBirthday
457
- include Contracts
476
+ include Contracts::Core
458
477
  include Contracts::Invariants
459
478
 
460
479
  invariant(:day) { 1 <= day && day <= 31 }
@@ -466,30 +485,30 @@ class MyBirthday
466
485
  @month = month
467
486
  end
468
487
 
469
- Contract None => Fixnum
488
+ Contract C::None => Fixnum
470
489
  def silly_next_day!
471
490
  self.day += 1
472
491
  end
473
492
 
474
- Contract None => Fixnum
493
+ Contract C::None => Fixnum
475
494
  def silly_next_month!
476
495
  self.month += 1
477
496
  end
478
497
 
479
- Contract None => Fixnum
498
+ Contract C::None => Fixnum
480
499
  def clever_next_day!
481
500
  return clever_next_month! if day == 31
482
501
  self.day += 1
483
502
  end
484
503
 
485
- Contract None => Fixnum
504
+ Contract C::None => Fixnum
486
505
  def clever_next_month!
487
506
  return next_year! if month == 12
488
507
  self.month += 1
489
508
  self.day = 1
490
509
  end
491
510
 
492
- Contract None => Fixnum
511
+ Contract C::None => Fixnum
493
512
  def next_year!
494
513
  self.month = 1
495
514
  self.day = 1
@@ -500,7 +519,7 @@ class SingletonClassExample
500
519
  # This turned out to be required line here to make singleton classes
501
520
  # work properly under all platforms. Not sure if it worth trying to
502
521
  # do something with it.
503
- include Contracts
522
+ include Contracts::Core
504
523
 
505
524
  class << self
506
525
  Contract String => String
@@ -508,7 +527,7 @@ class SingletonClassExample
508
527
  "super#{str}"
509
528
  end
510
529
 
511
- Contract Num, Num => Num
530
+ Contract C::Num, C::Num => C::Num
512
531
  def add(a, b)
513
532
  a + b
514
533
  end
@@ -517,7 +536,7 @@ end
517
536
 
518
537
  with_enabled_no_contracts do
519
538
  class NoContractsSimpleExample
520
- include Contracts
539
+ include Contracts::Core
521
540
 
522
541
  Contract String => nil
523
542
  def some_method(x)
@@ -526,21 +545,21 @@ with_enabled_no_contracts do
526
545
  end
527
546
 
528
547
  class NoContractsInvariantsExample
529
- include Contracts
548
+ include Contracts::Core
530
549
  include Contracts::Invariants
531
550
 
532
551
  attr_accessor :day
533
552
 
534
553
  invariant(:day_rule) { 1 <= day && day <= 7 }
535
554
 
536
- Contract None => nil
555
+ Contract C::None => nil
537
556
  def next_day
538
557
  self.day += 1
539
558
  end
540
559
  end
541
560
 
542
561
  class NoContractsPatternMatchingExample
543
- include Contracts
562
+ include Contracts::Core
544
563
 
545
564
  Contract 200, String => String
546
565
  def on_response(status, body)
@@ -555,9 +574,9 @@ with_enabled_no_contracts do
555
574
  end
556
575
 
557
576
  module ModuleExample
558
- include Contracts
577
+ include Contracts::Core
559
578
 
560
- Contract Num, Num => Num
579
+ Contract C::Num, C::Num => C::Num
561
580
  def plus(a, b)
562
581
  a + b
563
582
  end
@@ -581,9 +600,9 @@ class KlassWithModuleExample
581
600
  end
582
601
 
583
602
  class SingletonInheritanceExample
584
- include Contracts
603
+ include Contracts::Core
585
604
 
586
- Contract Any => Any
605
+ Contract C::Any => C::Any
587
606
  def self.a_contracted_self
588
607
  self
589
608
  end
@@ -593,16 +612,16 @@ class SingletonInheritanceExampleSubclass < SingletonInheritanceExample
593
612
  end
594
613
 
595
614
  class BareOptionalContractUsed
596
- include Contracts
615
+ include Contracts::Core
597
616
 
598
- Contract Num, Optional[Num] => nil
617
+ Contract C::Num, C::Optional[C::Num] => nil
599
618
  def something(a, b)
600
619
  nil
601
620
  end
602
621
  end
603
622
 
604
623
  module ModuleContractExample
605
- include Contracts
624
+ include Contracts::Core
606
625
 
607
626
  module AModule
608
627
  end