mongo_doc 0.4.2 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/HISTORY.md +8 -1
- data/README.textile +12 -24
- data/Rakefile +58 -11
- data/VERSION +1 -1
- data/features/embed_hash.feature +16 -0
- data/features/step_definitions/document_steps.rb +1 -1
- data/features/step_definitions/documents.rb +2 -0
- data/features/step_definitions/embed_hash_steps.rb +6 -0
- data/features/step_definitions/string_casting_steps.rb +2 -1
- data/features/support/support.rb +1 -0
- data/lib/mongo_doc/associations/collection_proxy.rb +29 -13
- data/lib/mongo_doc/associations/document_proxy.rb +14 -5
- data/lib/mongo_doc/associations/hash_proxy.rb +20 -16
- data/lib/mongo_doc/associations/proxy_base.rb +21 -26
- data/lib/mongo_doc/associations.rb +15 -6
- data/lib/mongo_doc/attributes.rb +2 -20
- data/lib/mongo_doc/collection.rb +1 -1
- data/lib/mongo_doc/connection.rb +1 -1
- data/lib/mongo_doc/contexts/ids.rb +3 -3
- data/lib/mongo_doc/contexts/mongo.rb +1 -1
- data/lib/mongo_doc/document.rb +30 -13
- data/lib/mongo_doc/ext/binary.rb +2 -2
- data/lib/mongo_doc/ext/dbref.rb +2 -2
- data/lib/mongo_doc/ext/min_max_keys.rb +13 -0
- data/lib/mongo_doc/ext/object.rb +4 -2
- data/lib/mongo_doc/ext/object_id.rb +2 -2
- data/lib/mongo_doc/ext.rb +1 -0
- data/lib/mongo_doc/finders.rb +2 -2
- data/lib/mongo_doc/root.rb +26 -0
- data/lib/mongo_doc/validations.rb +16 -0
- data/lib/mongo_doc.rb +2 -1
- data/lib/mongoid/criterion/optional.rb +1 -1
- data/mongo_doc.gemspec +29 -17
- data/perf/mongo_doc_object.rb +78 -0
- data/perf/mongo_document.rb +78 -0
- data/perf/ruby_driver.rb +43 -0
- data/spec/associations/collection_proxy_spec.rb +29 -6
- data/spec/associations/document_proxy_spec.rb +22 -19
- data/spec/associations/hash_proxy_spec.rb +17 -4
- data/spec/associations/proxy_base_spec.rb +92 -0
- data/spec/associations_spec.rb +4 -16
- data/spec/bson_spec.rb +1 -1
- data/spec/connection_spec.rb +2 -2
- data/spec/contexts/ids_spec.rb +2 -2
- data/spec/document_spec.rb +31 -22
- data/spec/ext_spec.rb +8 -0
- data/spec/root_spec.rb +41 -0
- data/spec/validations_spec.rb +30 -0
- metadata +46 -23
- data/lib/mongo_doc/query.rb +0 -7
- data/perf/mongo_doc_runner.rb +0 -90
- data/perf/ruby_driver_runner.rb +0 -64
- data/spec/query_spec.rb +0 -12
data/perf/mongo_doc_runner.rb
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
require "benchmark"
|
2
|
-
require "ruby-prof"
|
3
|
-
require "mongo_doc"
|
4
|
-
|
5
|
-
class Person < MongoDoc::Document
|
6
|
-
key :birth_date
|
7
|
-
has_one :name
|
8
|
-
has_one :address
|
9
|
-
has_many :phones
|
10
|
-
end
|
11
|
-
|
12
|
-
class Name < MongoDoc::Document
|
13
|
-
key :given
|
14
|
-
key :family
|
15
|
-
key :middle
|
16
|
-
end
|
17
|
-
|
18
|
-
class Address < MongoDoc::Document
|
19
|
-
key :street
|
20
|
-
key :city
|
21
|
-
key :state
|
22
|
-
key :post_code
|
23
|
-
key :type
|
24
|
-
end
|
25
|
-
|
26
|
-
class Phone < MongoDoc::Document
|
27
|
-
key :country_code
|
28
|
-
key :number
|
29
|
-
key :type
|
30
|
-
end
|
31
|
-
|
32
|
-
class MongoDocRunner
|
33
|
-
def self.benchmark
|
34
|
-
MongoDoc.connect_to_database('mongo_doc_perf_test')
|
35
|
-
MongoDoc.database.collection('people').drop
|
36
|
-
|
37
|
-
puts "Starting benchmark..."
|
38
|
-
|
39
|
-
10.times do |n|
|
40
|
-
person = Person.new(:birth_date => Date.new(1970, 1, 1))
|
41
|
-
name = Name.new(:given => "James", :family => "Kirk", :middle => "Tiberius")
|
42
|
-
address = Address.new(:street => "1 Starfleet Command Way", :city => "San Francisco", :state => "CA", :post_code => "94133", :type => "Work")
|
43
|
-
phone = Phone.new(:country_code => 1, :number => "415-555-1212", :type => "Mobile")
|
44
|
-
person.name = name
|
45
|
-
person.address = address
|
46
|
-
person.phones << phone
|
47
|
-
person.save
|
48
|
-
end
|
49
|
-
|
50
|
-
Benchmark.bm do |bm|
|
51
|
-
bm.report('MongoDoc') do
|
52
|
-
10000.times do |n|
|
53
|
-
person = Person.new(:birth_date => Date.new(1970, 1, 1))
|
54
|
-
name = Name.new(:given => "James", :family => "Kirk", :middle => "Tiberius")
|
55
|
-
address = Address.new(:street => "1 Starfleet Command Way", :city => "San Francisco", :state => "CA", :post_code => "94133", :type => "Work")
|
56
|
-
phone = Phone.new(:country_code => 1, :number => "415-555-1212", :type => "Mobile")
|
57
|
-
person.name = name
|
58
|
-
person.address = address
|
59
|
-
person.phones << phone
|
60
|
-
person.save
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.profile
|
68
|
-
MongoDoc.connect_to_database('mongo_doc_perf_test')
|
69
|
-
MongoDoc.database.collection('people').drop
|
70
|
-
|
71
|
-
RubyProf.start
|
72
|
-
|
73
|
-
puts "Starting profiler..."
|
74
|
-
|
75
|
-
1000.times do |n|
|
76
|
-
person = Person.new(:birth_date => Date.new(1970, 1, 1))
|
77
|
-
name = Name.new(:given => "James", :family => "Kirk", :middle => "Tiberius")
|
78
|
-
address = Address.new(:street => "1 Starfleet Command Way", :city => "San Francisco", :state => "CA", :post_code => "94133", :type => "Work")
|
79
|
-
phone = Phone.new(:country_code => 1, :number => "415-555-1212", :type => "Mobile")
|
80
|
-
person.name = name
|
81
|
-
person.address = address
|
82
|
-
person.phones << phone
|
83
|
-
person.save
|
84
|
-
end
|
85
|
-
|
86
|
-
result = RubyProf.stop
|
87
|
-
printer = RubyProf::FlatPrinter.new(result)
|
88
|
-
printer.print(STDOUT, 0)
|
89
|
-
end
|
90
|
-
end
|
data/perf/ruby_driver_runner.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require "rubygems"
|
2
|
-
require "ruby-prof"
|
3
|
-
require "mongo_doc"
|
4
|
-
|
5
|
-
class RubyDriverRunner
|
6
|
-
def self.benchmark
|
7
|
-
MongoDoc.connect_to_database('mongo_doc_perf_test')
|
8
|
-
collection = MongoDoc.database.collection('people')
|
9
|
-
collection.drop
|
10
|
-
|
11
|
-
puts "Starting benchmark..."
|
12
|
-
|
13
|
-
10.times do |n|
|
14
|
-
person = {:birth_date => Date.new(1970, 1, 1).to_bson, :phones => []}
|
15
|
-
name = {:given => "James", :family => "Kirk", :middle => "Tiberius"}
|
16
|
-
address = {:street => "1 Starfleet Command Way", :city => "San Francisco", :state => "CA", :post_code => "94133", :type => "Work"}
|
17
|
-
phone = {:country_code => 1, :number => "415-555-1212", :type => "Mobile"}
|
18
|
-
person[:name] = name
|
19
|
-
person[:address] = address
|
20
|
-
person[:phones] << phone
|
21
|
-
collection.save(person)
|
22
|
-
end
|
23
|
-
|
24
|
-
Benchmark.bm do |bm|
|
25
|
-
bm.report('Driver') do
|
26
|
-
10000.times do |n|
|
27
|
-
person = {:birth_date => Date.new(1970, 1, 1).to_bson, :phones => []}
|
28
|
-
name = {:given => "James", :family => "Kirk", :middle => "Tiberius"}
|
29
|
-
address = {:street => "1 Starfleet Command Way", :city => "San Francisco", :state => "CA", :post_code => "94133", :type => "Work"}
|
30
|
-
phone = {:country_code => 1, :number => "415-555-1212", :type => "Mobile"}
|
31
|
-
person[:name] = name
|
32
|
-
person[:address] = address
|
33
|
-
person[:phones] << phone
|
34
|
-
collection.save(person)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.profile
|
41
|
-
MongoDoc.connect_to_database('mongo_doc_perf_test')
|
42
|
-
collection = MongoDoc.database.collection('people')
|
43
|
-
collection.drop
|
44
|
-
|
45
|
-
RubyProf.start
|
46
|
-
|
47
|
-
puts "Starting profiler..."
|
48
|
-
|
49
|
-
1000.times do |n|
|
50
|
-
person = {:birth_date => Date.new(1970, 1, 1), :phones => []}
|
51
|
-
name = {:given => "James", :family => "Kirk", :middle => "Tiberius"}
|
52
|
-
address = { :street => "1 Starfleet Command Way", :city => "San Francisco", :state => "CA", :post_code => "94133", :type => "Work"}
|
53
|
-
phone = {:country_code => 1, :number => "415-555-1212", :type => "Mobile"}
|
54
|
-
person[:name] = name
|
55
|
-
person[:address] = address
|
56
|
-
person[:phones] << phone
|
57
|
-
collection.insert(person)
|
58
|
-
end
|
59
|
-
|
60
|
-
result = RubyProf.stop
|
61
|
-
printer = RubyProf::FlatPrinter.new(result)
|
62
|
-
printer.print(STDOUT, 0)
|
63
|
-
end
|
64
|
-
end
|
data/spec/query_spec.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
describe "Query support for MongoDoc" do
|
4
|
-
describe "#set_modifier" do
|
5
|
-
it "modifies all simple key/values of the hash to a set modifier" do
|
6
|
-
key = 'key'
|
7
|
-
value = 'value'
|
8
|
-
hash = {key => value}
|
9
|
-
MongoDoc::Query.set_modifier(hash).should == {'$set' => hash}
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|