contracts-noop 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitmodules +3 -0
- data/.rspec +2 -0
- data/Gemfile +2 -0
- data/lib/contracts/noop.rb +6 -1
- data/lib/contracts/noop/fake.rb +67 -0
- data/lib/contracts/noop/loader.rb +24 -0
- data/lib/contracts/noop/version.rb +1 -1
- data/spec/contracts/noop/fake_spec.rb +6 -0
- data/spec/contracts/noop/loader_spec.rb +55 -0
- data/spec/spec_helper.rb +26 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebdb8aea3de3f778721b958604c0d5c7aebe7dec
|
4
|
+
data.tar.gz: a39f7b511e1f9757a741e1d1e9b922fd089db0dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddc9e28264b5130f186b44f8292be67fccbebb20c56d2235882bdc31e079ab688486dc1e082e1b3acfb83c0aa8fbee7ff40ffae9ddfa3349ca693af649801c16
|
7
|
+
data.tar.gz: ce509f8f9f3897a127021e92d903865bcb9638274a080b240b07571ad0e87a7d61471cfe15220f7aa2be2e6f1d3495277c1f8c9cac7763d09c621d26a75711fb
|
data/.gitmodules
ADDED
data/.rspec
ADDED
data/Gemfile
CHANGED
data/lib/contracts/noop.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
require "contracts/noop/version"
|
2
|
+
require "contracts/noop/loader"
|
2
3
|
|
3
4
|
module Contracts
|
4
5
|
module Noop
|
5
|
-
|
6
|
+
def self.when_contracts_available(&blk)
|
7
|
+
Loader.new(lambda { require "contracts" },
|
8
|
+
lambda { require "contracts/noop/fake" })
|
9
|
+
.load(&blk)
|
10
|
+
end
|
6
11
|
end
|
7
12
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Contracts
|
2
|
+
def self.included(base) common(base) end
|
3
|
+
def self.extended(base) common(base) end
|
4
|
+
|
5
|
+
def self.common(base)
|
6
|
+
base.class_eval do
|
7
|
+
def Contract(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.Contract(*args)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
unless base <= eigenclass_of(Object)
|
15
|
+
eigenclass_of(base).send(:include, Contracts)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.eigenclass_of(base)
|
20
|
+
class << base; self; end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Invariants
|
24
|
+
def self.included(base) common(base) end
|
25
|
+
def self.extended(base) common(base) end
|
26
|
+
|
27
|
+
def self.common(base)
|
28
|
+
base.class_eval do
|
29
|
+
def Invariant(*args)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.Invariant(*args)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module Modules
|
39
|
+
end
|
40
|
+
|
41
|
+
class CallableClass
|
42
|
+
def self.[](*args)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
Num = CallableClass
|
47
|
+
Or = CallableClass
|
48
|
+
Bool = CallableClass
|
49
|
+
Any = CallableClass
|
50
|
+
Args = CallableClass
|
51
|
+
Func = CallableClass
|
52
|
+
ArrayOf = CallableClass
|
53
|
+
Pos = CallableClass
|
54
|
+
Neg = CallableClass
|
55
|
+
Nat = CallableClass
|
56
|
+
None = CallableClass
|
57
|
+
Xor = CallableClass
|
58
|
+
RespondTo = CallableClass
|
59
|
+
And = CallableClass
|
60
|
+
Send = CallableClass
|
61
|
+
Not = CallableClass
|
62
|
+
Maybe = CallableClass
|
63
|
+
HashOf = CallableClass
|
64
|
+
Exactly = CallableClass
|
65
|
+
Eq = CallableClass
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Contracts
|
2
|
+
module Noop
|
3
|
+
class Loader
|
4
|
+
def initialize(load_strategy, rescue_strategy)
|
5
|
+
@load_strategy = load_strategy
|
6
|
+
@rescue_strategy = rescue_strategy
|
7
|
+
end
|
8
|
+
|
9
|
+
def load(&blk)
|
10
|
+
blk.call if _load
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def _load
|
16
|
+
@load_strategy.call
|
17
|
+
true
|
18
|
+
rescue LoadError
|
19
|
+
@rescue_strategy.call
|
20
|
+
false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "contracts/noop/loader"
|
2
|
+
|
3
|
+
module Contracts
|
4
|
+
module Noop
|
5
|
+
RSpec.describe Loader do
|
6
|
+
let(:spy) { double("spy") }
|
7
|
+
let(:rescue_strategy) { lambda { spy.failed } }
|
8
|
+
|
9
|
+
subject { described_class.new(load_strategy, rescue_strategy) }
|
10
|
+
|
11
|
+
describe "#load" do
|
12
|
+
context "when able to load" do
|
13
|
+
let(:load_strategy) { lambda { spy.load } }
|
14
|
+
|
15
|
+
it "executes block" do
|
16
|
+
expect(spy).to receive(:load).ordered.once
|
17
|
+
expect(spy).to receive(:done).ordered.once
|
18
|
+
expect(spy).not_to receive(:failed)
|
19
|
+
|
20
|
+
subject.load do
|
21
|
+
spy.done
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "does not rescue if block failed with LoadError" do
|
26
|
+
expect(spy).to receive(:load).ordered.once
|
27
|
+
expect(spy).not_to receive(:done)
|
28
|
+
expect(spy).not_to receive(:failed)
|
29
|
+
|
30
|
+
expect {
|
31
|
+
subject.load do
|
32
|
+
raise LoadError
|
33
|
+
spy.done
|
34
|
+
end
|
35
|
+
}.to raise_error(LoadError)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when unable to load" do
|
40
|
+
let(:load_strategy) { lambda { raise LoadError } }
|
41
|
+
|
42
|
+
it "doesn't execute block and call rescue_strategy" do
|
43
|
+
expect(spy).not_to receive(:load)
|
44
|
+
expect(spy).not_to receive(:done)
|
45
|
+
expect(spy).to receive(:failed)
|
46
|
+
|
47
|
+
subject.load do
|
48
|
+
spy.done
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.expect_with :rspec do |expectations|
|
3
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
4
|
+
end
|
5
|
+
|
6
|
+
config.mock_with :rspec do |mocks|
|
7
|
+
mocks.verify_partial_doubles = true
|
8
|
+
end
|
9
|
+
|
10
|
+
config.filter_run :focus
|
11
|
+
config.run_all_when_everything_filtered = true
|
12
|
+
|
13
|
+
config.disable_monkey_patching!
|
14
|
+
|
15
|
+
config.warnings = true
|
16
|
+
|
17
|
+
if config.files_to_run.one?
|
18
|
+
config.default_formatter = 'doc'
|
19
|
+
end
|
20
|
+
|
21
|
+
config.profile_examples = 10
|
22
|
+
|
23
|
+
config.order = :random
|
24
|
+
|
25
|
+
Kernel.srand config.seed
|
26
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contracts-noop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleksii Fedorov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,13 +52,20 @@ extensions: []
|
|
52
52
|
extra_rdoc_files: []
|
53
53
|
files:
|
54
54
|
- ".gitignore"
|
55
|
+
- ".gitmodules"
|
56
|
+
- ".rspec"
|
55
57
|
- Gemfile
|
56
58
|
- LICENSE.txt
|
57
59
|
- README.md
|
58
60
|
- Rakefile
|
59
61
|
- contracts-noop.gemspec
|
60
62
|
- lib/contracts/noop.rb
|
63
|
+
- lib/contracts/noop/fake.rb
|
64
|
+
- lib/contracts/noop/loader.rb
|
61
65
|
- lib/contracts/noop/version.rb
|
66
|
+
- spec/contracts/noop/fake_spec.rb
|
67
|
+
- spec/contracts/noop/loader_spec.rb
|
68
|
+
- spec/spec_helper.rb
|
62
69
|
homepage: https://github.com/waterlink/contracts-noop
|
63
70
|
licenses:
|
64
71
|
- MIT
|
@@ -83,4 +90,7 @@ rubygems_version: 2.2.2
|
|
83
90
|
signing_key:
|
84
91
|
specification_version: 4
|
85
92
|
summary: Allows usage of contracts.ruby as a development dependency
|
86
|
-
test_files:
|
93
|
+
test_files:
|
94
|
+
- spec/contracts/noop/fake_spec.rb
|
95
|
+
- spec/contracts/noop/loader_spec.rb
|
96
|
+
- spec/spec_helper.rb
|