contracts-lite 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.markdown +80 -0
  3. data/Gemfile +16 -0
  4. data/LICENSE +23 -0
  5. data/README.md +102 -0
  6. data/TODO.markdown +6 -0
  7. data/TUTORIAL.md +747 -0
  8. data/benchmarks/bench.rb +67 -0
  9. data/benchmarks/hash.rb +69 -0
  10. data/benchmarks/invariants.rb +91 -0
  11. data/benchmarks/io.rb +62 -0
  12. data/benchmarks/wrap_test.rb +57 -0
  13. data/contracts.gemspec +13 -0
  14. data/lib/contracts.rb +231 -0
  15. data/lib/contracts/builtin_contracts.rb +541 -0
  16. data/lib/contracts/call_with.rb +97 -0
  17. data/lib/contracts/core.rb +52 -0
  18. data/lib/contracts/decorators.rb +47 -0
  19. data/lib/contracts/engine.rb +26 -0
  20. data/lib/contracts/engine/base.rb +136 -0
  21. data/lib/contracts/engine/eigenclass.rb +50 -0
  22. data/lib/contracts/engine/target.rb +70 -0
  23. data/lib/contracts/error_formatter.rb +121 -0
  24. data/lib/contracts/errors.rb +71 -0
  25. data/lib/contracts/formatters.rb +134 -0
  26. data/lib/contracts/invariants.rb +68 -0
  27. data/lib/contracts/method_handler.rb +195 -0
  28. data/lib/contracts/method_reference.rb +100 -0
  29. data/lib/contracts/support.rb +59 -0
  30. data/lib/contracts/validators.rb +139 -0
  31. data/lib/contracts/version.rb +3 -0
  32. data/script/rubocop +7 -0
  33. data/spec/builtin_contracts_spec.rb +461 -0
  34. data/spec/contracts_spec.rb +748 -0
  35. data/spec/error_formatter_spec.rb +68 -0
  36. data/spec/fixtures/fixtures.rb +710 -0
  37. data/spec/invariants_spec.rb +17 -0
  38. data/spec/module_spec.rb +18 -0
  39. data/spec/override_validators_spec.rb +162 -0
  40. data/spec/ruby_version_specific/contracts_spec_1.9.rb +24 -0
  41. data/spec/ruby_version_specific/contracts_spec_2.0.rb +55 -0
  42. data/spec/ruby_version_specific/contracts_spec_2.1.rb +63 -0
  43. data/spec/spec_helper.rb +102 -0
  44. data/spec/support.rb +10 -0
  45. data/spec/support_spec.rb +21 -0
  46. data/spec/validators_spec.rb +47 -0
  47. metadata +94 -0
data/spec/support.rb ADDED
@@ -0,0 +1,10 @@
1
+ def with_enabled_no_contracts
2
+ no_contracts = ENV["NO_CONTRACTS"]
3
+ ENV["NO_CONTRACTS"] = "true"
4
+ yield
5
+ ENV["NO_CONTRACTS"] = no_contracts
6
+ end
7
+
8
+ def ruby_version
9
+ RUBY_VERSION.match(/\d+\.\d+/)[0].to_f
10
+ end
@@ -0,0 +1,21 @@
1
+ module Contracts
2
+ RSpec.describe Support do
3
+ describe "eigenclass?" do
4
+ it "is falsey for non-singleton classes" do
5
+ expect(Contracts::Support.eigenclass? String).to be_falsey
6
+ end
7
+
8
+ it "is truthy for singleton classes" do
9
+ singleton_class = String.instance_exec { class << self; self; end }
10
+ expect(Contracts::Support.eigenclass? singleton_class).to be_truthy
11
+ end
12
+ end
13
+
14
+ describe "eigenclass_of" do
15
+ it "returns the eigenclass of a given object" do
16
+ singleton_class = String.instance_exec { class << self; self; end }
17
+ expect(Contracts::Support.eigenclass_of String).to eq singleton_class
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,47 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Contract validators" do
4
+ subject(:o) { GenericExample.new }
5
+
6
+ describe "Range" do
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
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
+
26
+ describe "Regexp" do
27
+ it "should pass for a matching string" do
28
+ expect { o.should_contain_foo("containing foo") }.to_not raise_error
29
+ end
30
+
31
+ it "should fail for a non-matching string" do
32
+ expect { o.should_contain_foo("that's not F00") }.to raise_error(ContractError)
33
+ end
34
+
35
+ describe "within a hash" do
36
+ it "should pass for a matching string" do
37
+ expect { o.hash_containing_foo(:host => "foo.example.org") }.to_not raise_error
38
+ end
39
+ end
40
+
41
+ describe "within an array" do
42
+ it "should pass for a matching string" do
43
+ expect { o.array_containing_foo(["foo"]) }.to_not raise_error
44
+ end
45
+ end
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: contracts-lite
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.14.0
5
+ platform: ruby
6
+ authors:
7
+ - Aditya Bhargava
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This library provides contracts for Ruby. Contracts let you clearly express
14
+ how your code behaves, and free you from writing tons of boilerplate, defensive
15
+ code.
16
+ email: bluemangroupie@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - ".gitignore"
22
+ - ".rspec"
23
+ - ".rubocop.yml"
24
+ - ".travis.yml"
25
+ - CHANGELOG.markdown
26
+ - Gemfile
27
+ - LICENSE
28
+ - README.md
29
+ - TODO.markdown
30
+ - TUTORIAL.md
31
+ - benchmarks/bench.rb
32
+ - benchmarks/hash.rb
33
+ - benchmarks/invariants.rb
34
+ - benchmarks/io.rb
35
+ - benchmarks/wrap_test.rb
36
+ - contracts.gemspec
37
+ - lib/contracts.rb
38
+ - lib/contracts/builtin_contracts.rb
39
+ - lib/contracts/call_with.rb
40
+ - lib/contracts/core.rb
41
+ - lib/contracts/decorators.rb
42
+ - lib/contracts/engine.rb
43
+ - lib/contracts/engine/base.rb
44
+ - lib/contracts/engine/eigenclass.rb
45
+ - lib/contracts/engine/target.rb
46
+ - lib/contracts/error_formatter.rb
47
+ - lib/contracts/errors.rb
48
+ - lib/contracts/formatters.rb
49
+ - lib/contracts/invariants.rb
50
+ - lib/contracts/method_handler.rb
51
+ - lib/contracts/method_reference.rb
52
+ - lib/contracts/support.rb
53
+ - lib/contracts/validators.rb
54
+ - lib/contracts/version.rb
55
+ - script/rubocop
56
+ - spec/builtin_contracts_spec.rb
57
+ - spec/contracts_spec.rb
58
+ - spec/error_formatter_spec.rb
59
+ - spec/fixtures/fixtures.rb
60
+ - spec/invariants_spec.rb
61
+ - spec/module_spec.rb
62
+ - spec/override_validators_spec.rb
63
+ - spec/ruby_version_specific/contracts_spec_1.9.rb
64
+ - spec/ruby_version_specific/contracts_spec_2.0.rb
65
+ - spec/ruby_version_specific/contracts_spec_2.1.rb
66
+ - spec/spec_helper.rb
67
+ - spec/support.rb
68
+ - spec/support_spec.rb
69
+ - spec/validators_spec.rb
70
+ homepage: http://github.com/ddd-ruby/contracts.ruby
71
+ licenses:
72
+ - BSD-2-Clause
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.5.1
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Contracts for Ruby. (fork)
94
+ test_files: []