durran-mongoid 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ class Array #:nodoc:
2
+ include Mongoid::Extensions::Array::Conversions
3
+ end
4
+
5
+ class Object #:nodoc:
6
+ include Mongoid::Extensions::Object::Conversions
7
+ end
@@ -0,0 +1,13 @@
1
+ module Mongoid #:nodoc:
2
+ module Extensions #:nodoc:
3
+ module Object #:nodoc:
4
+ # This module converts objects into mongoid related objects.
5
+ module Conversions #:nodoc:
6
+ # Converts this object to a hash of attributes
7
+ def mongoidize
8
+ self.attributes
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Mongoid #:nodoc:
2
+ module Extensions #:nodoc:
3
+ module Array #:nodoc:
4
+ # This module converts arrays into mongoid related objects.
5
+ module Conversions #:nodoc:
6
+ # Converts this array into an array of hashes.
7
+ def mongoidize
8
+ collect { |obj| obj.attributes }
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ module Mongoid #:nodoc:
2
+ class Paginator #:nodoc:
3
+
4
+ attr_reader :limit, :offset
5
+
6
+ # Create the new Paginator with the supplied options.
7
+ # * Will default to offset 0 if no page defined in the options.
8
+ # * Will default to limit 20 if no per_page defined in the options.
9
+ def initialize(options = {})
10
+ page = options[:page]
11
+ @limit = options[:per_page] || 20
12
+ @offset = page ? (page - 1) * @limit : 0
13
+ end
14
+
15
+ # Generate the options needed for returning the correct
16
+ # results given the supplied parameters
17
+ def options
18
+ { :limit => @limit, :offset => @offset }
19
+ end
20
+
21
+ end
22
+ end
data/mongoid.gemspec ADDED
@@ -0,0 +1,79 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{mongoid}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Durran Jordan"]
12
+ s.date = %q{2009-09-23}
13
+ s.email = %q{durran@gmail.com}
14
+ s.extra_rdoc_files = [
15
+ "README.textile"
16
+ ]
17
+ s.files = [
18
+ ".gitignore",
19
+ "MIT_LICENSE",
20
+ "README.textile",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "lib/mongoid.rb",
24
+ "lib/mongoid/associations/association_factory.rb",
25
+ "lib/mongoid/associations/belongs_to_association.rb",
26
+ "lib/mongoid/associations/has_many_association.rb",
27
+ "lib/mongoid/associations/has_one_association.rb",
28
+ "lib/mongoid/document.rb",
29
+ "lib/mongoid/extensions.rb",
30
+ "lib/mongoid/extensions/array/conversions.rb",
31
+ "lib/mongoid/extensions/object/conversions.rb",
32
+ "lib/mongoid/paginator.rb",
33
+ "mongoid.gemspec",
34
+ "spec/integration/mongoid/document_spec.rb",
35
+ "spec/spec.opts",
36
+ "spec/spec_helper.rb",
37
+ "spec/unit/mongoid/associations/association_factory_spec.rb",
38
+ "spec/unit/mongoid/associations/belongs_to_association_spec.rb",
39
+ "spec/unit/mongoid/associations/has_many_association_spec.rb",
40
+ "spec/unit/mongoid/associations/has_one_association_spec.rb",
41
+ "spec/unit/mongoid/document_spec.rb",
42
+ "spec/unit/mongoid/extensions/array/conversions_spec.rb",
43
+ "spec/unit/mongoid/extensions/object/conversions_spec.rb",
44
+ "spec/unit/mongoid/paginator_spec.rb"
45
+ ]
46
+ s.homepage = %q{http://github.com/durran/mongoid}
47
+ s.rdoc_options = ["--charset=UTF-8"]
48
+ s.require_paths = ["lib"]
49
+ s.rubygems_version = %q{1.3.5}
50
+ s.summary = %q{Mongoid}
51
+ s.test_files = [
52
+ "spec/integration/mongoid/document_spec.rb",
53
+ "spec/spec_helper.rb",
54
+ "spec/unit/mongoid/associations/association_factory_spec.rb",
55
+ "spec/unit/mongoid/associations/belongs_to_association_spec.rb",
56
+ "spec/unit/mongoid/associations/has_many_association_spec.rb",
57
+ "spec/unit/mongoid/associations/has_one_association_spec.rb",
58
+ "spec/unit/mongoid/document_spec.rb",
59
+ "spec/unit/mongoid/extensions/array/conversions_spec.rb",
60
+ "spec/unit/mongoid/extensions/object/conversions_spec.rb",
61
+ "spec/unit/mongoid/paginator_spec.rb"
62
+ ]
63
+
64
+ if s.respond_to? :specification_version then
65
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
66
+ s.specification_version = 3
67
+
68
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
69
+ s.add_runtime_dependency(%q<active_support>, [">= 0"])
70
+ s.add_runtime_dependency(%q<mongodb-mongo>, [">= 0"])
71
+ else
72
+ s.add_dependency(%q<active_support>, [">= 0"])
73
+ s.add_dependency(%q<mongodb-mongo>, [">= 0"])
74
+ end
75
+ else
76
+ s.add_dependency(%q<active_support>, [">= 0"])
77
+ s.add_dependency(%q<mongodb-mongo>, [">= 0"])
78
+ end
79
+ end
@@ -0,0 +1,95 @@
1
+ require File.join(File.dirname(__FILE__), "/../../spec_helper.rb")
2
+
3
+ describe Mongoid::Document do
4
+
5
+ before do
6
+ Mongoid.database.collection(:people).drop
7
+ end
8
+
9
+ describe "#new" do
10
+
11
+ it "gets a new or current database connection" do
12
+ person = Person.new
13
+ person.collection.should be_a_kind_of(Mongo::Collection)
14
+ end
15
+
16
+ end
17
+
18
+ describe "#create" do
19
+
20
+ it "persists a new record to the database" do
21
+ person = Person.create(:test => "Test")
22
+ person.id.should be_a_kind_of(Mongo::ObjectID)
23
+ person.attributes[:test].should == "Test"
24
+ end
25
+
26
+ end
27
+
28
+ describe "#find" do
29
+
30
+ before do
31
+ @person = Person.create(:title => "Test", :document_class => "Person")
32
+ end
33
+
34
+ context "finding all documents" do
35
+
36
+ it "returns an array of documents based on the selector provided" do
37
+ documents = Person.find(:all, :title => "Test")
38
+ documents[0].title.should == "Test"
39
+ end
40
+
41
+ end
42
+
43
+ context "finding first document" do
44
+
45
+ it "returns the first document based on the selector provided" do
46
+ person = Person.find(:first, :title => "Test")
47
+ person.title.should == "Test"
48
+ end
49
+
50
+ end
51
+
52
+ context "finding by id" do
53
+
54
+ it "finds the document by the supplied id" do
55
+ person = Person.find(@person.id)
56
+ person.id.should == @person.id
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+ describe "#group_by" do
64
+
65
+ before do
66
+ 30.times do |num|
67
+ Person.create(:title => "Sir", :age => num, :document_class => "Person")
68
+ end
69
+ end
70
+
71
+ it "returns grouped documents" do
72
+ grouped = Person.group_by([:title], {})
73
+ people = grouped.first["group"]
74
+ person = people.first
75
+ person.should be_a_kind_of(Person)
76
+ person.title.should == "Sir"
77
+ end
78
+
79
+ end
80
+
81
+ describe "#paginate" do
82
+
83
+ before do
84
+ 30.times do |num|
85
+ Person.create(:title => "Test-#{num}", :document_class => "Person")
86
+ end
87
+ end
88
+
89
+ it "returns paginated documents" do
90
+ Person.paginate({}, { :per_page => 20, :page => 2 }).length.should == 10
91
+ end
92
+
93
+ end
94
+
95
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,5 @@
1
+ --colour
2
+ -fs
3
+ --loadby
4
+ mtime
5
+ --reverse
@@ -0,0 +1,40 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+ require 'rubygems'
4
+
5
+ gem "mocha", "0.9.8"
6
+
7
+ require "mocha"
8
+ require "mongoid"
9
+ require "spec"
10
+
11
+ Mongoid.connect_to("mongoid_test")
12
+
13
+ Spec::Runner.configure do |config|
14
+ config.mock_with :mocha
15
+ end
16
+
17
+ class Person < Mongoid::Document
18
+ fields \
19
+ :title,
20
+ :terms,
21
+ :age
22
+ has_many :addresses
23
+ has_one :name
24
+ end
25
+
26
+ class Address < Mongoid::Document
27
+ fields \
28
+ :street,
29
+ :city,
30
+ :state,
31
+ :post_code
32
+ belongs_to :person
33
+ end
34
+
35
+ class Name < Mongoid::Document
36
+ fields \
37
+ :first_name,
38
+ :last_name
39
+ belongs_to :person
40
+ end
@@ -0,0 +1,48 @@
1
+ require File.join(File.dirname(__FILE__), "/../../../spec_helper.rb")
2
+
3
+ describe Mongoid::Associations::AssociationFactory do
4
+
5
+ describe "#create" do
6
+
7
+ before do
8
+ @document = Person.new
9
+ end
10
+
11
+ context "when type is has_many" do
12
+
13
+ it "returns a HasManyAssociationProxy" do
14
+ association = Mongoid::Associations::AssociationFactory.create(:has_many, :addresses, @document)
15
+ association.should be_a_kind_of(Mongoid::Associations::HasManyAssociation)
16
+ end
17
+
18
+ end
19
+
20
+ context "when type is has_one" do
21
+
22
+ it "returns a HashOneAssociationProxy" do
23
+ association = Mongoid::Associations::AssociationFactory.create(:has_one, :name, @document)
24
+ association.should be_a_kind_of(Mongoid::Associations::HasOneAssociation)
25
+ end
26
+
27
+ end
28
+
29
+ context "when type is belongs_to" do
30
+
31
+ it "returns a BelongsToAssociationProxy" do
32
+ association = Mongoid::Associations::AssociationFactory.create(:belongs_to, :person, @document)
33
+ association.should be_a_kind_of(Mongoid::Associations::BelongsToAssociation)
34
+ end
35
+
36
+ end
37
+
38
+ context "when type is invalid" do
39
+
40
+ it "should raise a InvalidAssociationError" do
41
+ lambda { Mongoid::Associations::AssociationFactory.create(:something, :person, @document) }.should raise_error
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__), "/../../../spec_helper.rb")
2
+
3
+ describe Mongoid::Associations::BelongsToAssociation do
4
+
5
+ before do
6
+ @parent = Name.new(:first_name => "Drexel")
7
+ @document = stub(:parent => @parent)
8
+ end
9
+
10
+ describe "#method_missing" do
11
+
12
+ before do
13
+ @association = Mongoid::Associations::BelongsToAssociation.new(@document)
14
+ end
15
+
16
+ context "when getting values" do
17
+
18
+ it "delegates to the document" do
19
+ @association.first_name.should == "Drexel"
20
+ end
21
+
22
+ end
23
+
24
+ context "when setting values" do
25
+
26
+ it "delegates to the document" do
27
+ @association.first_name = "Test"
28
+ @association.first_name.should == "Test"
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,105 @@
1
+ require File.join(File.dirname(__FILE__), "/../../../spec_helper.rb")
2
+
3
+ describe Mongoid::Associations::HasManyAssociation do
4
+
5
+ before do
6
+ @attributes = { :addresses => [
7
+ { :street => "Street 1", :document_class => "Address" },
8
+ { :street => "Street 2", :document_class => "Address" } ] }
9
+ @document = stub(:attributes => @attributes)
10
+ end
11
+
12
+ describe "#[]" do
13
+
14
+ before do
15
+ @association = Mongoid::Associations::HasManyAssociation.new(:addresses, @document)
16
+ end
17
+
18
+ context "when the index is present in the association" do
19
+
20
+ it "returns the document at the index" do
21
+ @association[0].should be_a_kind_of(Address)
22
+ @association[0].street.should == "Street 1"
23
+ end
24
+
25
+ end
26
+
27
+ context "when the index is not present in the association" do
28
+
29
+ it "returns nil" do
30
+ @association[3].should be_nil
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ describe "#<<" do
38
+
39
+ before do
40
+ @association = Mongoid::Associations::HasManyAssociation.new(:addresses, @document)
41
+ end
42
+
43
+ it "appends the document to the end of the array" do
44
+ @association << Address.new
45
+ @association.length.should == 3
46
+ end
47
+
48
+ end
49
+
50
+ describe "#first" do
51
+
52
+ context "when there are elements in the array" do
53
+
54
+ before do
55
+ @association = Mongoid::Associations::HasManyAssociation.new(:addresses, @document)
56
+ end
57
+
58
+ it "returns the first element" do
59
+ @association.first.should be_a_kind_of(Address)
60
+ @association.first.street.should == "Street 1"
61
+ end
62
+
63
+ end
64
+
65
+ context "when the array is empty" do
66
+
67
+ before do
68
+ @association = Mongoid::Associations::HasManyAssociation.new(:addresses, Person.new)
69
+ end
70
+
71
+ it "returns nil" do
72
+ @association.first.should be_nil
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
79
+ describe "#length" do
80
+
81
+ context "#length" do
82
+
83
+ it "returns the length of the delegated array" do
84
+ @association = Mongoid::Associations::HasManyAssociation.new(:addresses, @document)
85
+ @association.length.should == 2
86
+ end
87
+
88
+ end
89
+
90
+ end
91
+
92
+ describe "#push" do
93
+
94
+ before do
95
+ @association = Mongoid::Associations::HasManyAssociation.new(:addresses, @document)
96
+ end
97
+
98
+ it "appends the document to the end of the array" do
99
+ @association.push(Address.new)
100
+ @association.length.should == 3
101
+ end
102
+
103
+ end
104
+
105
+ end