mongoid-rspec-callbacks 0.0.1 → 1.0.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 +7 -0
- data/Gemfile +4 -2
- data/README.md +1 -1
- data/Rakefile +14 -0
- data/VERSION +1 -0
- data/lib/matchers/callbacks.rb +68 -39
- data/lib/mongoid-rspec-callbacks/version.rb +1 -1
- data/mongoid-rspec-callbacks.gemspec +62 -0
- data/spec/callbacks_spec.rb +4 -4
- metadata +44 -34
- data/.gitignore +0 -6
- data/.rvmrc +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 465a27718060c18e511a3325a334d7f6f6b2069f
|
4
|
+
data.tar.gz: 460b30c060683b4cfd25ad4d8a9a777151395ce3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a0b7b93b7a11f9fdd0f2959c0d9ef8219bc627bdfdfe4f9332f11791e565e7901c9f84ee13d79379f5da2092e4b37b18831496e63dee072c0634deb371ff60a
|
7
|
+
data.tar.gz: 8a661367cb27819cb28c70d34d9480d4a142280badde2c2920b1c2e546a098ba99ded2f7111705bbb3cbe2559407964e7cac5e820a74ff4812077b1a99992020
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@ mongoid-rspec-callbacks
|
|
3
3
|
|
4
4
|
http://rubygems.org/gems/mongoid-rspec-callbacks
|
5
5
|
|
6
|
-
RSpec Callbacks matchers for Mongoid
|
6
|
+
RSpec Callbacks matchers for Mongoid 5.x and ActiveSupport 4.2.
|
7
7
|
|
8
8
|
This gem is meant to be use with [mongoid-rpsec](http://rubygems.org/gems/mongoid-rspec), altought it works by itself.
|
9
9
|
|
data/Rakefile
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
require 'jeweler'
|
2
|
+
Jeweler::Tasks.new do |gem|
|
3
|
+
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
4
|
+
gem.name = "mongoid-rspec-callbacks"
|
5
|
+
gem.homepage = "http://github.com/nanocity/mongoid-rspec-callbacks"
|
6
|
+
gem.license = "GPLv3"
|
7
|
+
gem.summary = %Q{RSpec Callbacks matchers for Mongoid 3.X}
|
8
|
+
gem.description = %Q{This gem is meant to be use with mongoid-rpsec, altought it works by itself. Syntax is the same as shoulda-callback-matchers.}
|
9
|
+
gem.email = "lciugar@gmail.com"
|
10
|
+
gem.authors = ["Luis Ciudad"]
|
11
|
+
# dependencies defined in Gemfile
|
12
|
+
end
|
13
|
+
Jeweler::RubygemsDotOrgTasks.new
|
14
|
+
|
1
15
|
require 'rspec/core/rake_task'
|
2
16
|
|
3
17
|
RSpec::Core::RakeTask.new(:spec)
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/lib/matchers/callbacks.rb
CHANGED
@@ -1,28 +1,18 @@
|
|
1
1
|
module Mongoid
|
2
2
|
module Matchers
|
3
3
|
class HaveCallbackMatcher
|
4
|
+
# Ensure that the given model has a callback defined for the given method/s
|
5
|
+
# callback(:method1, :method2).after(:validation).on(:create)
|
6
|
+
# @methods @kind @operation @context
|
7
|
+
|
4
8
|
KINDS = %w[ before around after ]
|
5
9
|
|
10
|
+
# Set methods to look for
|
6
11
|
def initialize( *args )
|
7
12
|
@methods = args || []
|
8
13
|
end
|
9
14
|
|
10
|
-
|
11
|
-
return false unless @kind
|
12
|
-
return false if @no_op = !klass.class.respond_to?( :"_#{@operation}_callbacks" )
|
13
|
-
|
14
|
-
@guess = nil
|
15
|
-
@methods.each do |method|
|
16
|
-
filter = klass.class.send( :"_#{@operation}_callbacks" ).detect do |c|
|
17
|
-
@guess = c if c.filter == method
|
18
|
-
|
19
|
-
c.filter == method and c.kind == @kind and c.options[:on] == @on
|
20
|
-
end
|
21
|
-
|
22
|
-
return false unless filter
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
15
|
+
# Set when callback is fired using @kind and @operation
|
26
16
|
KINDS.each do |kind|
|
27
17
|
define_method( kind.to_sym ) do |op|
|
28
18
|
@operation = op
|
@@ -31,48 +21,87 @@ module Mongoid
|
|
31
21
|
end
|
32
22
|
end
|
33
23
|
|
24
|
+
# Set on condition
|
34
25
|
def on( action )
|
35
|
-
@
|
26
|
+
@context = action
|
36
27
|
self
|
37
28
|
end
|
38
29
|
|
39
|
-
def
|
40
|
-
|
30
|
+
def matches?( klass )
|
31
|
+
return false unless @kind
|
32
|
+
return false if @no_op = !klass.class.respond_to?( :"_#{@operation}_callbacks" )
|
33
|
+
|
34
|
+
@guess = nil
|
35
|
+
@methods.each do |method|
|
36
|
+
filter = klass.class.send( :"_#{@operation}_callbacks" ).detect do |callback|
|
37
|
+
# Save callback instance in order to print information
|
38
|
+
# about it in case of failure
|
39
|
+
@guess = callback if callback.filter == method
|
40
|
+
check_filter?(callback, method) and check_kind?(callback, @kind) and check_context?(callback, @context)
|
41
|
+
end
|
42
|
+
|
43
|
+
return false unless filter
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def failure_message
|
48
|
+
message( true )
|
41
49
|
end
|
42
50
|
|
43
|
-
def
|
44
|
-
|
51
|
+
def failure_message_when_negated
|
52
|
+
message( false )
|
45
53
|
end
|
46
54
|
|
47
55
|
def description
|
48
56
|
msg = "call #{@methods.join(", ")}"
|
49
57
|
msg << " #{@kind} #{@operation}" if @operation
|
50
|
-
msg << " on #{@
|
58
|
+
msg << " on #{@context}" if @context
|
51
59
|
msg
|
52
60
|
end
|
53
61
|
|
54
62
|
protected
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
63
|
+
def message( should )
|
64
|
+
return "Invalid operation. Use :initialize, :build, :validation,"\
|
65
|
+
":create, :find, :update, :upsert, :save or :destroy" if @no_op
|
66
|
+
|
67
|
+
if @kind
|
68
|
+
msg = "Expected method#{@methods.size > 1 ? 's' : ''} #{@methods.join(", ")} #{should ? '' : 'not ' }to be called"
|
69
|
+
msg << " #{@kind} #{@operation}" if @operation
|
70
|
+
msg << " on #{@context}" if @context
|
71
|
+
msg << ( @guess ? ", but got method #{@guess.filter} called" : ", but no callback found" )
|
72
|
+
msg << " #{@guess.kind} #{@operation}" if @guess
|
73
|
+
msg << " on another context" if @guess and !@context_match
|
74
|
+
|
75
|
+
msg
|
76
|
+
else
|
77
|
+
"Callback#{@methods.size > 1 ? 's' : '' } #{@methods.join(", ")} can"\
|
78
|
+
"not be tested against undefined lifecycle. Use .before, .after or .around"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
def check_filter?(callback, method)
|
84
|
+
callback.filter == method
|
85
|
+
end
|
86
|
+
|
87
|
+
def check_kind?(callback, kind)
|
88
|
+
callback.kind == kind
|
71
89
|
end
|
72
|
-
end
|
73
90
|
|
91
|
+
def check_context?(callback, context)
|
92
|
+
return true if !context
|
93
|
+
|
94
|
+
options = callback.instance_variable_get(:@if)
|
95
|
+
@context_match = options.select do |o|
|
96
|
+
o.is_a?(Proc)
|
97
|
+
end.detect do |o|
|
98
|
+
o.call(ValidationContext.new(context))
|
99
|
+
end
|
100
|
+
end
|
74
101
|
end
|
75
102
|
|
103
|
+
ValidationContext = Struct.new :validation_context
|
104
|
+
|
76
105
|
def callback( *args )
|
77
106
|
HaveCallbackMatcher.new( *args )
|
78
107
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: mongoid-rspec-callbacks 1.0.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "mongoid-rspec-callbacks"
|
9
|
+
s.version = "1.0.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
13
|
+
s.authors = ["Luis Ciudad"]
|
14
|
+
s.date = "2016-03-09"
|
15
|
+
s.description = "This gem is meant to be use with mongoid-rpsec, altought it works by itself. Syntax is the same as shoulda-callback-matchers."
|
16
|
+
s.email = "lciugar@gmail.com"
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.md"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
"COPYING",
|
23
|
+
"Gemfile",
|
24
|
+
"LICENSE",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"lib/matchers/callbacks.rb",
|
29
|
+
"lib/mongoid-rspec-callbacks.rb",
|
30
|
+
"lib/mongoid-rspec-callbacks/version.rb",
|
31
|
+
"mongoid-rspec-callbacks.gemspec",
|
32
|
+
"spec/callbacks_spec.rb",
|
33
|
+
"spec/models/user.rb",
|
34
|
+
"spec/spec_helper.rb"
|
35
|
+
]
|
36
|
+
s.homepage = "http://github.com/nanocity/mongoid-rspec-callbacks"
|
37
|
+
s.licenses = ["GPLv3"]
|
38
|
+
s.rubygems_version = "2.4.8"
|
39
|
+
s.summary = "RSpec Callbacks matchers for Mongoid 3.X"
|
40
|
+
|
41
|
+
if s.respond_to? :specification_version then
|
42
|
+
s.specification_version = 4
|
43
|
+
|
44
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
45
|
+
s.add_runtime_dependency(%q<activesupport>, ["~> 4.2"])
|
46
|
+
s.add_runtime_dependency(%q<jeweler>, [">= 0"])
|
47
|
+
s.add_runtime_dependency(%q<rspec>, [">= 0"])
|
48
|
+
s.add_runtime_dependency(%q<mongoid>, [">= 0"])
|
49
|
+
else
|
50
|
+
s.add_dependency(%q<activesupport>, ["~> 4.2"])
|
51
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
52
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
53
|
+
s.add_dependency(%q<mongoid>, [">= 0"])
|
54
|
+
end
|
55
|
+
else
|
56
|
+
s.add_dependency(%q<activesupport>, ["~> 4.2"])
|
57
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
58
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
59
|
+
s.add_dependency(%q<mongoid>, [">= 0"])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
data/spec/callbacks_spec.rb
CHANGED
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "Callbacks" do
|
4
4
|
describe User do
|
5
|
-
it {
|
6
|
-
it {
|
7
|
-
it {
|
8
|
-
it {
|
5
|
+
it { is_expected.to callback(:callback1).before(:save) }
|
6
|
+
it { is_expected.to callback(:callback2).after(:save) }
|
7
|
+
it { is_expected.to callback(:callback1, :callback2).before(:validation) }
|
8
|
+
it { is_expected.to callback(:callback3).after(:validation).on(:create) }
|
9
9
|
end
|
10
10
|
end
|
metadata
CHANGED
@@ -1,105 +1,115 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-rspec-callbacks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Luis Ciudad
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jeweler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
20
32
|
- !ruby/object:Gem::Version
|
21
33
|
version: '0'
|
22
34
|
type: :runtime
|
23
35
|
prerelease: false
|
24
36
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
37
|
requirements:
|
27
|
-
- -
|
38
|
+
- - ">="
|
28
39
|
- !ruby/object:Gem::Version
|
29
40
|
version: '0'
|
30
41
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
42
|
+
name: rspec
|
32
43
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
44
|
requirements:
|
35
|
-
- -
|
45
|
+
- - ">="
|
36
46
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
47
|
+
version: '0'
|
38
48
|
type: :runtime
|
39
49
|
prerelease: false
|
40
50
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
51
|
requirements:
|
43
|
-
- -
|
52
|
+
- - ">="
|
44
53
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
54
|
+
version: '0'
|
46
55
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
56
|
+
name: mongoid
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
58
|
requirements:
|
51
|
-
- -
|
59
|
+
- - ">="
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
61
|
+
version: '0'
|
54
62
|
type: :runtime
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
65
|
requirements:
|
59
|
-
- -
|
66
|
+
- - ">="
|
60
67
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
62
|
-
description:
|
68
|
+
version: '0'
|
69
|
+
description: This gem is meant to be use with mongoid-rpsec, altought it works by
|
70
|
+
itself. Syntax is the same as shoulda-callback-matchers.
|
63
71
|
email: lciugar@gmail.com
|
64
72
|
executables: []
|
65
73
|
extensions: []
|
66
|
-
extra_rdoc_files:
|
74
|
+
extra_rdoc_files:
|
75
|
+
- LICENSE
|
76
|
+
- README.md
|
67
77
|
files:
|
68
|
-
- .gitignore
|
69
|
-
- .rvmrc
|
70
78
|
- COPYING
|
71
79
|
- Gemfile
|
72
80
|
- LICENSE
|
73
81
|
- README.md
|
74
82
|
- Rakefile
|
83
|
+
- VERSION
|
75
84
|
- lib/matchers/callbacks.rb
|
76
85
|
- lib/mongoid-rspec-callbacks.rb
|
77
86
|
- lib/mongoid-rspec-callbacks/version.rb
|
87
|
+
- mongoid-rspec-callbacks.gemspec
|
78
88
|
- spec/callbacks_spec.rb
|
79
89
|
- spec/models/user.rb
|
80
90
|
- spec/spec_helper.rb
|
81
91
|
homepage: http://github.com/nanocity/mongoid-rspec-callbacks
|
82
|
-
licenses:
|
92
|
+
licenses:
|
93
|
+
- GPLv3
|
94
|
+
metadata: {}
|
83
95
|
post_install_message:
|
84
96
|
rdoc_options: []
|
85
97
|
require_paths:
|
86
98
|
- lib
|
87
99
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
100
|
requirements:
|
90
|
-
- -
|
101
|
+
- - ">="
|
91
102
|
- !ruby/object:Gem::Version
|
92
103
|
version: '0'
|
93
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
105
|
requirements:
|
96
|
-
- -
|
106
|
+
- - ">="
|
97
107
|
- !ruby/object:Gem::Version
|
98
108
|
version: '0'
|
99
109
|
requirements: []
|
100
110
|
rubyforge_project:
|
101
|
-
rubygems_version:
|
111
|
+
rubygems_version: 2.4.8
|
102
112
|
signing_key:
|
103
|
-
specification_version:
|
104
|
-
summary: Callbacks
|
113
|
+
specification_version: 4
|
114
|
+
summary: RSpec Callbacks matchers for Mongoid 3.X
|
105
115
|
test_files: []
|
data/.gitignore
DELETED
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use --create 1.9.3@mongoid-rspec-callbacks
|