couch_potato 0.5.6 → 0.5.7
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.
- data/CHANGES.md +5 -0
- data/README.md +1 -0
- data/lib/couch_potato/persistence.rb +2 -0
- data/lib/couch_potato/rspec/stub_db.rb +14 -3
- data/lib/couch_potato/version.rb +1 -1
- data/lib/couch_potato.rb +6 -0
- data/spec/unit/couch_potato_spec.rb +9 -0
- data/spec/unit/rspec_stub_db_spec.rb +31 -0
- metadata +2 -2
data/CHANGES.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## Changes
|
2
2
|
|
3
|
+
### 0.5.7
|
4
|
+
|
5
|
+
* support CouchPotato::Database#first/#first! calls when using `stub_db` from tests (langalex)
|
6
|
+
* support RSpec2 block syntax in `stub_db` (langalex)
|
7
|
+
|
3
8
|
### 0.5.6
|
4
9
|
|
5
10
|
* remove the stale parameter from a view query if it's nil, as couchdb only allows stale to be ok or update\_after (langalex)
|
data/README.md
CHANGED
@@ -400,6 +400,7 @@ For stubbing out the database couch potato offers some helpers:
|
|
400
400
|
db.stub_view(Comment, :by_commenter_id).with('23').and_return([:comment1, :comment2])
|
401
401
|
|
402
402
|
CouchPotato.database.view(Comment.by_commenter_id('23)) # => [:comment1, :comment2]
|
403
|
+
CouchPotato.database.first(Comment.by_commenter_id('23)) # => :comment1
|
403
404
|
|
404
405
|
##### Testing map/reduce functions
|
405
406
|
|
@@ -8,8 +8,9 @@ module CouchPotato::RSpec
|
|
8
8
|
@db = db
|
9
9
|
end
|
10
10
|
|
11
|
-
def with(*args)
|
11
|
+
def with(*args, &block)
|
12
12
|
@args = args
|
13
|
+
and_return(block.call) if block
|
13
14
|
self
|
14
15
|
end
|
15
16
|
|
@@ -19,11 +20,21 @@ module CouchPotato::RSpec
|
|
19
20
|
_stub.with(*@args) if @args
|
20
21
|
_stub.and_return(view_stub)
|
21
22
|
@db.stub(:view).with(view_stub).and_return(return_value)
|
23
|
+
if return_value.respond_to?(:first)
|
24
|
+
@db.stub(:first).with(view_stub).and_return(return_value.first)
|
25
|
+
if return_value.first
|
26
|
+
@db.stub(:first!).with(view_stub).and_return(return_value.first)
|
27
|
+
else
|
28
|
+
@db.stub(:first!).with(view_stub).and_raise(CouchPotato::NotFound)
|
29
|
+
end
|
30
|
+
end
|
22
31
|
end
|
23
32
|
end
|
24
33
|
|
25
|
-
def stub_view(clazz, view)
|
26
|
-
ViewStub.new clazz, view, self
|
34
|
+
def stub_view(clazz, view, &block)
|
35
|
+
stub = ViewStub.new clazz, view, self
|
36
|
+
stub.and_return(block.call) if block
|
37
|
+
stub
|
27
38
|
end
|
28
39
|
end
|
29
40
|
|
data/lib/couch_potato/version.rb
CHANGED
data/lib/couch_potato.rb
CHANGED
@@ -13,6 +13,12 @@ module CouchPotato
|
|
13
13
|
Config.split_design_documents_per_view = false
|
14
14
|
|
15
15
|
class NotFound < StandardError; end
|
16
|
+
|
17
|
+
# returns all the classes that implement the CouchPotato::Persistence module
|
18
|
+
def self.models
|
19
|
+
@models ||= []
|
20
|
+
@models
|
21
|
+
end
|
16
22
|
|
17
23
|
# Returns a database instance which you can then use to create objects and query views. You have to set the CouchPotato::Config.database_name before this works.
|
18
24
|
def self.database
|
@@ -19,6 +19,15 @@ describe CouchPotato, 'full_url_to_database' do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
describe CouchPotato, '.models' do
|
23
|
+
it "returns all classes that have implemented CouchPotato::Persistence" do
|
24
|
+
clazz = Class.new
|
25
|
+
clazz.send(:include, CouchPotato::Persistence)
|
26
|
+
|
27
|
+
CouchPotato.models.should include(clazz)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
22
31
|
describe CouchPotato, 'validation_framework' do
|
23
32
|
before(:each) do
|
24
33
|
@original_validation_framework = CouchPotato::Config.validation_framework
|
@@ -32,4 +32,35 @@ describe "stubbing a view" do
|
|
32
32
|
it "should stub the database to return fake results when called with the stub" do
|
33
33
|
@db.view(WithStubbedView.stubbed_view('123')).should == [:result]
|
34
34
|
end
|
35
|
+
|
36
|
+
it "stubs the database to return the first fake result" do
|
37
|
+
@db.first(WithStubbedView.stubbed_view('123')).should == :result
|
38
|
+
@db.first!(WithStubbedView.stubbed_view('123')).should == :result
|
39
|
+
end
|
40
|
+
|
41
|
+
it "raises an error if there is no first result" do
|
42
|
+
@db.stub_view(WithStubbedView, :stubbed_view).and_return([])
|
43
|
+
lambda {
|
44
|
+
@db.first!(WithStubbedView.stubbed_view('123'))
|
45
|
+
}.should raise_error(CouchPotato::NotFound)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "skips stubbing the first view (i.e. doesn't crash) if the fake result does not respond to first" do
|
49
|
+
@db.stub_view(WithStubbedView, :stubbed_view).with('123').and_return(:results)
|
50
|
+
|
51
|
+
@db.view(WithStubbedView.stubbed_view('123')).should == :results
|
52
|
+
end
|
53
|
+
|
54
|
+
it "supports the block style return syntax with `with`" do
|
55
|
+
@db.stub_view(WithStubbedView, :stubbed_view).with('123') {:results}
|
56
|
+
|
57
|
+
@db.view(WithStubbedView.stubbed_view('123')).should == :results
|
58
|
+
end
|
59
|
+
|
60
|
+
it "supports the block style return syntax without `with`" do
|
61
|
+
@db.stub_view(WithStubbedView, :stubbed_view) {:results}
|
62
|
+
|
63
|
+
@db.view(WithStubbedView.stubbed_view('123')).should == :results
|
64
|
+
end
|
65
|
+
|
35
66
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: couch_potato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Alexander Lang
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-08-10 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|