ar_left_over_guardian 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -0
- data/ar_left_over_guardian.gemspec +2 -0
- data/lib/ar_left_over_guardian.rb +27 -3
- data/lib/ar_left_over_guardian/custom_contracts.rb +13 -0
- data/lib/ar_left_over_guardian/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bd41421d24e0733bc844c0f22c975c3844041b4
|
4
|
+
data.tar.gz: 7fe50c1c7b834dc750e3097ea1c544f17db27648
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7113abaf02efa91c53f2d42548819ffc3d24a1a60fbbc3b4c232a1b23fac30b72a6d8f88c46f766fb0e537b63c1480527af317714f27d8f069c6bccb573ba81
|
7
|
+
data.tar.gz: 3124b5c9fd0839350d7ed3fae2af65697d35a15422cc4628c8d5a17932d9f832d1e46791ceadff1ac7a8c1f75ce741ac5167b2527b735294afee01d5af56b752
|
data/Gemfile
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_runtime_dependency "contracts-noop"
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
25
|
end
|
@@ -1,18 +1,31 @@
|
|
1
1
|
require "ar_left_over_guardian/version"
|
2
|
+
require "ar_left_over_guardian/custom_contracts"
|
2
3
|
|
4
|
+
# Fails your test suite if tests doesn't clean up any database records
|
5
|
+
# after itself. Assumes models have `.count` method.
|
3
6
|
module ARLeftOverGuardian
|
4
|
-
|
5
|
-
|
6
|
-
end
|
7
|
+
include Contracts
|
8
|
+
include CustomContracts
|
7
9
|
|
8
10
|
class DidntCleanup < StandardError; end
|
9
11
|
|
12
|
+
# Instance of left over guardian, which keeps track of all models
|
13
|
+
# counts before test and after test, and expects them to be the same
|
10
14
|
class Instance
|
15
|
+
include Contracts
|
16
|
+
include CustomContracts
|
17
|
+
|
18
|
+
# Creates new instance
|
19
|
+
Contract ArrayOf[Model] => self
|
11
20
|
def initialize(models)
|
12
21
|
@models = models.reject(&method(:abstract?))
|
13
22
|
@counts = current_counts(false)
|
23
|
+
self
|
14
24
|
end
|
15
25
|
|
26
|
+
# Verifies if counts before test and after are the same.
|
27
|
+
# @raise [DidntCleanup] When counts don't match
|
28
|
+
Contract None => nil
|
16
29
|
def verify
|
17
30
|
left_overs = get_left_overs
|
18
31
|
return if left_overs.empty?
|
@@ -24,6 +37,7 @@ module ARLeftOverGuardian
|
|
24
37
|
|
25
38
|
attr_reader :counts, :models
|
26
39
|
|
40
|
+
Contract None => ArrayOf[Model]
|
27
41
|
def get_left_overs
|
28
42
|
current_counts.each_with_index.inject([]) do |acc, (count, index)|
|
29
43
|
if count != counts[index]
|
@@ -33,20 +47,30 @@ module ARLeftOverGuardian
|
|
33
47
|
end
|
34
48
|
end
|
35
49
|
|
50
|
+
Contract Bool => ArrayOf[Num]
|
36
51
|
def current_counts(reset = true)
|
37
52
|
models.map { |model|
|
38
53
|
reset_model(model, reset).count
|
39
54
|
}
|
40
55
|
end
|
41
56
|
|
57
|
+
Contract Model => Bool
|
42
58
|
def abstract?(model)
|
43
59
|
model.respond_to?(:abstract_class?) && model.abstract_class?
|
44
60
|
end
|
45
61
|
|
62
|
+
Contract Model, Bool => Model
|
46
63
|
def reset_model(model, reset)
|
47
64
|
return model unless reset
|
48
65
|
RSpec::Mocks.space.proxy_for(model).reset if defined?(RSpec::Mocks)
|
49
66
|
model
|
50
67
|
end
|
51
68
|
end
|
69
|
+
|
70
|
+
# Initializes instance of left over guardian with given list of
|
71
|
+
# models
|
72
|
+
Contract ArrayOf[Model] => Instance
|
73
|
+
def self.init(models)
|
74
|
+
Instance.new(models)
|
75
|
+
end
|
52
76
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar_left_over_guardian
|
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
|
- Alexey Fedorov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: contracts-noop
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -55,6 +69,7 @@ files:
|
|
55
69
|
- Rakefile
|
56
70
|
- ar_left_over_guardian.gemspec
|
57
71
|
- lib/ar_left_over_guardian.rb
|
72
|
+
- lib/ar_left_over_guardian/custom_contracts.rb
|
58
73
|
- lib/ar_left_over_guardian/version.rb
|
59
74
|
- spec/ar_left_over_guardian_spec.rb
|
60
75
|
- spec/spec_helper.rb
|
@@ -85,3 +100,4 @@ summary: Active Record Left Over Guardian.
|
|
85
100
|
test_files:
|
86
101
|
- spec/ar_left_over_guardian_spec.rb
|
87
102
|
- spec/spec_helper.rb
|
103
|
+
has_rdoc:
|