ar_left_over_guardian 0.0.3 → 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/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:
|