couchmodel 0.1.0 → 0.1.1
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/README.rdoc +5 -4
- data/Rakefile +4 -2
- data/lib/core_extension/string.rb +7 -1
- data/lib/couch_model/active_model.rb +5 -1
- data/lib/couch_model/design.rb +1 -1
- data/spec/integration/associations_spec.rb +40 -0
- data/spec/integration/models.rb +41 -0
- data/spec/integration/new_model_spec.rb +45 -0
- data/spec/integration/saved_model_spec.rb +76 -0
- data/spec/integration/views_spec.rb +38 -0
- data/spec/lib/couch_model/active_model_spec.rb +18 -21
- metadata +25 -7
- data/spec/integration/basic_spec.rb +0 -185
data/README.rdoc
CHANGED
@@ -6,16 +6,17 @@ implementation to integrate into an Rails 3 application.
|
|
6
6
|
|
7
7
|
The current version is under development and open for everyone to find bugs and post them into the issue tracker.
|
8
8
|
|
9
|
-
The code has been tested Ruby 1.9.1, CouchDB 0.10.0 and Rails 3.0.0.
|
9
|
+
The code has been tested Ruby 1.8.7 and 1.9.1, CouchDB 0.10.0 and Rails 3.0.0.beta3.
|
10
10
|
|
11
11
|
== Dependencies
|
12
12
|
|
13
|
-
|
13
|
+
Basically, the ruby standard library (1.9.1) if the only requirement. If you still using Ruby 1.8, the json gem is
|
14
|
+
required.
|
14
15
|
|
15
16
|
If the activemodel gem is installed, CouchModel automatically provides an interface to Rails 3.
|
16
17
|
|
17
|
-
To run the test suite,
|
18
|
-
|
18
|
+
To run the test suite, rspec (tested with 1.2.9) is required. A CouchDB instance is only required for the integration
|
19
|
+
tests (task <tt>spec:integration</tt>).
|
19
20
|
|
20
21
|
== Installation
|
21
22
|
|
data/Rakefile
CHANGED
@@ -9,8 +9,8 @@ task :default => :spec
|
|
9
9
|
|
10
10
|
specification = Gem::Specification.new do |specification|
|
11
11
|
specification.name = "couchmodel"
|
12
|
-
specification.version = "0.1.
|
13
|
-
specification.date = "2010-
|
12
|
+
specification.version = "0.1.1"
|
13
|
+
specification.date = "2010-05-05"
|
14
14
|
|
15
15
|
specification.authors = [ "Philipp Bruell" ]
|
16
16
|
specification.email = "b.phifty@gmail.com"
|
@@ -26,6 +26,8 @@ specification = Gem::Specification.new do |specification|
|
|
26
26
|
specification.require_path = "lib"
|
27
27
|
|
28
28
|
specification.test_files = Dir["spec/**/*_spec.rb"]
|
29
|
+
|
30
|
+
specification.add_development_dependency "rspec"
|
29
31
|
end
|
30
32
|
|
31
33
|
Rake::GemPackageTask.new(specification) do |package|
|
@@ -3,7 +3,13 @@ class String # :nodoc:
|
|
3
3
|
|
4
4
|
# This method converts a CamelCaseString into an underscore_string.
|
5
5
|
def underscore
|
6
|
-
|
6
|
+
word = self.to_s.dup
|
7
|
+
word.gsub!(/::/, '/')
|
8
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
9
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
10
|
+
word.tr!("-", "_")
|
11
|
+
word.downcase!
|
12
|
+
word
|
7
13
|
end
|
8
14
|
|
9
15
|
# This method converts an underscore_string into a CamelCaseString.
|
data/lib/couch_model/design.rb
CHANGED
@@ -29,7 +29,7 @@ module CouchModel
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def filename
|
32
|
-
@filename ||= File.join(CouchModel::Configuration.design_directory, "#{model_class.to_s.underscore}.design")
|
32
|
+
@filename ||= File.join(CouchModel::Configuration.design_directory, "#{@model_class.to_s.underscore}.design")
|
33
33
|
end
|
34
34
|
|
35
35
|
def load_file
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "models"))
|
3
|
+
|
4
|
+
describe "integration" do
|
5
|
+
|
6
|
+
use_real_transport!
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
create_users_and_memberships
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "belongs_to" do
|
13
|
+
|
14
|
+
it "should return the related model" do
|
15
|
+
@membership_one.user.should == @user_one
|
16
|
+
@membership_two.user.should == @user_two
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "has_many" do
|
22
|
+
|
23
|
+
it "should include the related model" do
|
24
|
+
@user_one.memberships.should include(@membership_one)
|
25
|
+
@user_two.memberships.should include(@membership_two)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should not include the not-related model" do
|
29
|
+
@user_one.memberships.should_not include(@membership_two)
|
30
|
+
@user_two.memberships.should_not include(@membership_one)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should use the selector" do
|
34
|
+
@user_one.memberships("yesterday").should include(@membership_one)
|
35
|
+
@user_one.memberships("today").should_not include(@membership_one)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "couch_model"))
|
2
|
+
|
3
|
+
CouchModel::Configuration.design_directory = File.join File.dirname(__FILE__), "design"
|
4
|
+
|
5
|
+
DATABASE = {
|
6
|
+
:url => "http://localhost:5984/test",
|
7
|
+
:create_if_missing => true,
|
8
|
+
:delete_if_exists => true,
|
9
|
+
:push_design => true
|
10
|
+
}.freeze unless defined?(DATABASE)
|
11
|
+
|
12
|
+
class User < CouchModel::Base
|
13
|
+
|
14
|
+
setup_database DATABASE
|
15
|
+
|
16
|
+
key_accessor :username
|
17
|
+
key_accessor :email, :default => "no email"
|
18
|
+
|
19
|
+
has_many :memberships,
|
20
|
+
:class_name => "Membership",
|
21
|
+
:view_name => :by_user_id_and_created_at,
|
22
|
+
:query => lambda { |created_at| { :startkey => [ self.id, (created_at || nil) ], :endkey => [ self.id, (created_at || { }) ] } }
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
class Membership < CouchModel::Base
|
27
|
+
|
28
|
+
setup_database DATABASE
|
29
|
+
|
30
|
+
key_accessor :created_at
|
31
|
+
|
32
|
+
belongs_to :user, :class_name => "User"
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_users_and_memberships
|
37
|
+
@user_one = User.create :username => "user one"
|
38
|
+
@user_two = User.create :username => "user two"
|
39
|
+
@membership_one = Membership.create :created_at => "yesterday", :user => @user_one
|
40
|
+
@membership_two = Membership.create :created_at => "yesterday", :user => @user_two
|
41
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "models"))
|
3
|
+
|
4
|
+
describe "integration" do
|
5
|
+
|
6
|
+
use_real_transport!
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
@user = User.new :username => "user"
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "setup" do
|
13
|
+
|
14
|
+
it "should have been created the database" do
|
15
|
+
User.database.exists?.should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have been created the design" do
|
19
|
+
User.design.exists?.should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should setup unique databases" do
|
23
|
+
User.database.should === Membership.database
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should setup designs for each model" do
|
27
|
+
User.design.should_not == Membership.design
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "save" do
|
33
|
+
|
34
|
+
it "should create the model" do
|
35
|
+
@user.save
|
36
|
+
@user.should_not be_new
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return true" do
|
40
|
+
@user.save.should be_true
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "models"))
|
3
|
+
|
4
|
+
describe "integration" do
|
5
|
+
|
6
|
+
use_real_transport!
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
create_users_and_memberships
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "save" do
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
@user_one.username = "new username"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should update the model" do
|
19
|
+
@user_one.save
|
20
|
+
@user_one.username.should == "new username"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return true" do
|
24
|
+
@user_one.save.should be_true
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "destroy" do
|
30
|
+
|
31
|
+
it "should return true" do
|
32
|
+
@user_one.destroy.should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should set the model to new" do
|
36
|
+
@user_one.destroy
|
37
|
+
@user_one.should be_new
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "count" do
|
43
|
+
|
44
|
+
it "should return the number of users" do
|
45
|
+
User.count.should >= 2
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "all" do
|
51
|
+
|
52
|
+
it "should include the saved user" do
|
53
|
+
begin
|
54
|
+
User.all.should include(@user_one)
|
55
|
+
rescue Object => error
|
56
|
+
puts error.backtrace
|
57
|
+
raise error
|
58
|
+
end
|
59
|
+
User.all.should include(@user_two)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "user_count" do
|
65
|
+
|
66
|
+
before :each do
|
67
|
+
@rows = User.user_count :returns => :rows
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return the user count" do
|
71
|
+
@rows.first.value.should >= 2
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "models"))
|
3
|
+
|
4
|
+
describe "integration" do
|
5
|
+
|
6
|
+
use_real_transport!
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
create_users_and_memberships
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "all" do
|
13
|
+
|
14
|
+
it "should include the saved user" do
|
15
|
+
begin
|
16
|
+
User.all.should include(@user_one)
|
17
|
+
rescue Object => error
|
18
|
+
puts error.backtrace
|
19
|
+
raise error
|
20
|
+
end
|
21
|
+
User.all.should include(@user_two)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "user_count" do
|
27
|
+
|
28
|
+
before :each do
|
29
|
+
@rows = User.user_count :returns => :rows
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return the user count" do
|
33
|
+
@rows.first.value.should >= 2
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -36,6 +36,16 @@ describe ActiveTestModel do
|
|
36
36
|
@model = ActiveTestModel.new :id => "test_model_1"
|
37
37
|
end
|
38
38
|
|
39
|
+
it "should fullfill all the lint tests" do
|
40
|
+
test_to_key
|
41
|
+
test_to_param
|
42
|
+
test_valid?
|
43
|
+
test_persisted?
|
44
|
+
test_model_naming
|
45
|
+
test_errors_aref
|
46
|
+
test_errors_full_messages
|
47
|
+
end
|
48
|
+
|
39
49
|
describe "initialize" do
|
40
50
|
|
41
51
|
it "should call the initialize callback" do
|
@@ -44,20 +54,8 @@ describe ActiveTestModel do
|
|
44
54
|
|
45
55
|
end
|
46
56
|
|
47
|
-
describe "new_record?" do
|
48
|
-
|
49
|
-
it "should fullfill the lint test" do
|
50
|
-
test_new_record?
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
57
|
describe "destroyed?" do
|
56
58
|
|
57
|
-
it "should fullfill the lint test" do
|
58
|
-
test_destroyed?
|
59
|
-
end
|
60
|
-
|
61
59
|
it "should return true if model is new" do
|
62
60
|
@model.stub!(:new?).and_return(true)
|
63
61
|
@model.should be_destroyed
|
@@ -65,14 +63,6 @@ describe ActiveTestModel do
|
|
65
63
|
|
66
64
|
end
|
67
65
|
|
68
|
-
describe "naming" do
|
69
|
-
|
70
|
-
it "should fullfill the lint test" do
|
71
|
-
test_model_naming
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
75
|
-
|
76
66
|
describe "valid?" do
|
77
67
|
|
78
68
|
it "should be true with a given name" do
|
@@ -125,6 +115,10 @@ describe ActiveTestModel do
|
|
125
115
|
|
126
116
|
describe "to_param" do
|
127
117
|
|
118
|
+
before :each do
|
119
|
+
@model.stub!(:persisted?).and_return(true)
|
120
|
+
end
|
121
|
+
|
128
122
|
it "should return the model's id" do
|
129
123
|
@model.to_param.should == @model.id
|
130
124
|
end
|
@@ -244,7 +238,10 @@ describe ActiveTestModel do
|
|
244
238
|
end
|
245
239
|
|
246
240
|
it "should return all attributes as json" do
|
247
|
-
@model.to_json.should
|
241
|
+
@model.to_json.should =~ /"_id":"test_model_1"/
|
242
|
+
@model.to_json.should =~ /"email":"test"/
|
243
|
+
@model.to_json.should =~ /"model_class":"ActiveTestModel"/
|
244
|
+
@model.to_json.should =~ /"name":"test"/
|
248
245
|
end
|
249
246
|
|
250
247
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Philipp Bruell
|
@@ -14,10 +14,21 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-05-05 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
21
32
|
description: CouchModel provides an interface to easly handle CouchDB documents. It also comes with a ActiveModel implementation to integrate into an Rails 3 application.
|
22
33
|
email: b.phifty@gmail.com
|
23
34
|
executables: []
|
@@ -70,9 +81,13 @@ files:
|
|
70
81
|
- spec/lib/core_extension/string_spec.rb
|
71
82
|
- spec/lib/core_extension/array_spec.rb
|
72
83
|
- spec/fake_transport_helper.rb
|
84
|
+
- spec/integration/views_spec.rb
|
85
|
+
- spec/integration/associations_spec.rb
|
73
86
|
- spec/integration/design/membership.design
|
74
87
|
- spec/integration/design/user.design
|
75
|
-
- spec/integration/
|
88
|
+
- spec/integration/saved_model_spec.rb
|
89
|
+
- spec/integration/new_model_spec.rb
|
90
|
+
- spec/integration/models.rb
|
76
91
|
- spec/fake_transport.yml
|
77
92
|
has_rdoc: true
|
78
93
|
homepage: http://github.com/phifty/couchmodel
|
@@ -122,4 +137,7 @@ test_files:
|
|
122
137
|
- spec/lib/couch_model_spec.rb
|
123
138
|
- spec/lib/core_extension/string_spec.rb
|
124
139
|
- spec/lib/core_extension/array_spec.rb
|
125
|
-
- spec/integration/
|
140
|
+
- spec/integration/views_spec.rb
|
141
|
+
- spec/integration/associations_spec.rb
|
142
|
+
- spec/integration/saved_model_spec.rb
|
143
|
+
- spec/integration/new_model_spec.rb
|
@@ -1,185 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
2
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "couch_model"))
|
3
|
-
|
4
|
-
CouchModel::Configuration.design_directory = File.join File.dirname(__FILE__), "design"
|
5
|
-
|
6
|
-
DATABASE = {
|
7
|
-
:url => "http://localhost:5984/test",
|
8
|
-
:create_if_missing => true,
|
9
|
-
:delete_if_exists => true,
|
10
|
-
:push_design => true
|
11
|
-
}.freeze unless defined?(DATABASE)
|
12
|
-
|
13
|
-
class User < CouchModel::Base
|
14
|
-
|
15
|
-
setup_database DATABASE
|
16
|
-
|
17
|
-
key_accessor :username
|
18
|
-
key_accessor :email, :default => "no email"
|
19
|
-
|
20
|
-
has_many :memberships,
|
21
|
-
:class_name => "Membership",
|
22
|
-
:view_name => :by_user_id_and_created_at,
|
23
|
-
:query => lambda { |created_at| { :startkey => [ self.id, (created_at || nil) ], :endkey => [ self.id, (created_at || { }) ] } }
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
class Membership < CouchModel::Base
|
28
|
-
|
29
|
-
setup_database DATABASE
|
30
|
-
|
31
|
-
key_accessor :created_at
|
32
|
-
|
33
|
-
belongs_to :user, :class_name => "User"
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "integration" do
|
38
|
-
|
39
|
-
use_real_transport!
|
40
|
-
|
41
|
-
context "on new models" do
|
42
|
-
|
43
|
-
before :each do
|
44
|
-
@user = User.new :username => "user"
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "setup" do
|
48
|
-
|
49
|
-
it "should have been created the database" do
|
50
|
-
User.database.exists?.should be_true
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should have been created the design" do
|
54
|
-
User.design.exists?.should be_true
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should setup unique databases" do
|
58
|
-
User.database.should === Membership.database
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should setup designs for each model" do
|
62
|
-
User.design.should_not == Membership.design
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
describe "save" do
|
68
|
-
|
69
|
-
it "should create the model" do
|
70
|
-
@user.save
|
71
|
-
@user.should_not be_new
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should return true" do
|
75
|
-
@user.save.should be_true
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
context "on saved models" do
|
83
|
-
|
84
|
-
before :each do
|
85
|
-
@user_one = User.create :username => "user one"
|
86
|
-
@user_two = User.create :username => "user two"
|
87
|
-
@membership_one = Membership.create :created_at => "yesterday", :user => @user_one
|
88
|
-
@membership_two = Membership.create :created_at => "yesterday", :user => @user_two
|
89
|
-
end
|
90
|
-
|
91
|
-
describe "save" do
|
92
|
-
|
93
|
-
before :each do
|
94
|
-
@user_one.username = "new username"
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should update the model" do
|
98
|
-
@user_one.save
|
99
|
-
@user_one.username.should == "new username"
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should return true" do
|
103
|
-
@user_one.save.should be_true
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
describe "destroy" do
|
109
|
-
|
110
|
-
it "should return true" do
|
111
|
-
@user_one.destroy.should be_true
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should set the model to new" do
|
115
|
-
@user_one.destroy
|
116
|
-
@user_one.should be_new
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
describe "all" do
|
122
|
-
|
123
|
-
it "should include the saved user" do
|
124
|
-
begin
|
125
|
-
User.all.should include(@user_one)
|
126
|
-
rescue Object => error
|
127
|
-
puts error.backtrace
|
128
|
-
raise error
|
129
|
-
end
|
130
|
-
User.all.should include(@user_two)
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
describe "count" do
|
136
|
-
|
137
|
-
it "should return the number of users" do
|
138
|
-
User.count.should >= 2
|
139
|
-
end
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
describe "belongs_to" do
|
144
|
-
|
145
|
-
it "should return the related model" do
|
146
|
-
@membership_one.user.should == @user_one
|
147
|
-
@membership_two.user.should == @user_two
|
148
|
-
end
|
149
|
-
|
150
|
-
end
|
151
|
-
|
152
|
-
describe "has_many" do
|
153
|
-
|
154
|
-
it "should include the related model" do
|
155
|
-
@user_one.memberships.should include(@membership_one)
|
156
|
-
@user_two.memberships.should include(@membership_two)
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should not include the not-related model" do
|
160
|
-
@user_one.memberships.should_not include(@membership_two)
|
161
|
-
@user_two.memberships.should_not include(@membership_one)
|
162
|
-
end
|
163
|
-
|
164
|
-
it "should use the selector" do
|
165
|
-
@user_one.memberships("yesterday").should include(@membership_one)
|
166
|
-
@user_one.memberships("today").should_not include(@membership_one)
|
167
|
-
end
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
describe "user_count" do
|
172
|
-
|
173
|
-
before :each do
|
174
|
-
@rows = User.user_count :returns => :rows
|
175
|
-
end
|
176
|
-
|
177
|
-
it "should return the user count" do
|
178
|
-
@rows.first.value.should >= 2
|
179
|
-
end
|
180
|
-
|
181
|
-
end
|
182
|
-
|
183
|
-
end
|
184
|
-
|
185
|
-
end
|