mongo_db 0.1.9 → 0.1.10

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.
Files changed (51) hide show
  1. data/lib/mongo_db/driver/{core/collection.rb → collection.rb} +13 -5
  2. data/lib/mongo_db/driver/{core/database.rb → database.rb} +0 -0
  3. data/lib/mongo_db/driver/dynamic_finders.rb +41 -0
  4. data/lib/mongo_db/driver.rb +33 -2
  5. data/lib/mongo_db/migration/definition.rb +19 -0
  6. data/lib/mongo_db/migration/migration.rb +68 -0
  7. data/lib/mongo_db/migration/tasks.rb +19 -0
  8. data/lib/mongo_db/migration.rb +8 -0
  9. data/lib/mongo_db/model/assignment.rb +54 -0
  10. data/lib/mongo_db/model/callbacks.rb +36 -0
  11. data/lib/mongo_db/model/crud.rb +28 -0
  12. data/lib/mongo_db/model/db.rb +53 -0
  13. data/lib/mongo_db/model/misc.rb +14 -0
  14. data/lib/mongo_db/model/model.rb +10 -0
  15. data/lib/mongo_db/model/query.rb +36 -0
  16. data/lib/mongo_db/model/scope.rb +99 -0
  17. data/lib/mongo_db/model/spec.rb +12 -0
  18. data/lib/mongo_db/model/support/types.rb +110 -0
  19. data/lib/mongo_db/model/validation.rb +5 -0
  20. data/lib/mongo_db/model.rb +30 -0
  21. data/lib/mongo_db/object/object_serializer.rb +20 -21
  22. data/readme.md +132 -19
  23. data/spec/driver/{core/collection_spec.rb → collection_spec.rb} +13 -0
  24. data/spec/driver/{core/crud_spec.rb → crud_spec.rb} +0 -0
  25. data/spec/driver/{core/database_spec.rb → database_spec.rb} +0 -0
  26. data/spec/driver/dynamic_finders_spec.rb +50 -0
  27. data/spec/driver/{core/hash_helper_spec.rb → hash_helper_spec.rb} +0 -0
  28. data/spec/{model/example.rb → integration/am_conversion_spec.rb} +0 -0
  29. data/spec/integration/am_validation_spec.rb +40 -0
  30. data/spec/migration/migration_spec.rb +60 -0
  31. data/spec/model/assignment_spec.rb +79 -0
  32. data/spec/model/callbacks_spec.rb +47 -0
  33. data/spec/model/{model_crud.rb → crud_spec.rb} +46 -36
  34. data/spec/model/db_spec.rb +63 -0
  35. data/spec/model/misc_spec.rb +32 -0
  36. data/spec/model/query_spec.rb +47 -0
  37. data/spec/model/scope_spec.rb +149 -0
  38. data/spec/model/spec_helper.rb +4 -0
  39. data/spec/model/validation_spec.rb +37 -0
  40. data/spec/object/callbacks_spec.rb +6 -4
  41. data/spec/object/crud_shared.rb +1 -1
  42. data/spec/object/crud_spec.rb +15 -10
  43. data/spec/object/spec_helper.rb +3 -2
  44. data/spec/object/validation_spec.rb +4 -2
  45. metadata +39 -18
  46. data/lib/mongo_db/driver/core.rb +0 -29
  47. data/lib/mongo_db/driver/more/collection_finders.rb +0 -43
  48. data/lib/mongo_db/driver/more.rb +0 -10
  49. data/spec/driver/more/querying_spec.rb +0 -59
  50. data/spec/model/callbacks.rb +0 -100
  51. data/spec/test.rb +0 -10
@@ -5,23 +5,25 @@ describe "Object CRUD" do
5
5
  with_mongo
6
6
 
7
7
  describe 'simple' do
8
- before do
9
- class Person
8
+ before :all do
9
+ class Unit2
10
10
  def initialize name = nil, info = nil; @name, @info = name, info end
11
11
  attr_accessor :name, :info
12
12
  def == o; [self.class, name, info] == [o.class, o.respond_to(:name), o.respond_to(:info)] end
13
13
  end
14
+ end
15
+ after(:all){remove_constants :Unit2}
14
16
 
15
- @zeratul = Person.new 'Zeratul', 'Dark Templar'
17
+ before do
18
+ @zeratul = Unit2.new 'Zeratul', 'Dark Templar'
16
19
  end
17
- after{remove_constants :Person}
18
20
 
19
21
  it_should_behave_like "object CRUD"
20
22
  end
21
23
 
22
24
  describe 'embedded' do
23
- before do
24
- class Player
25
+ before :all do
26
+ class Player2
25
27
  attr_accessor :missions
26
28
  def == o; [self.class, self.missions] == [o.class, o.respond_to(:missions)] end
27
29
 
@@ -31,14 +33,17 @@ describe "Object CRUD" do
31
33
  def == o; [self.class, self.name, self.stats] == [o.class, o.respond_to(:name), o.respond_to(:stats)] end
32
34
  end
33
35
  end
36
+ end
37
+ after(:all){remove_constants :Player2}
34
38
 
35
- @player = Player.new
39
+ before do
40
+ @mission_class = Player2::Mission
41
+ @player = Player2.new
36
42
  @player.missions = [
37
- Player::Mission.new('Wasteland', {buildings: 5, units: 10}),
38
- Player::Mission.new('Backwater Station', {buildings: 8, units: 25}),
43
+ Player2::Mission.new('Wasteland', {buildings: 5, units: 10}),
44
+ Player2::Mission.new('Backwater Station', {buildings: 8, units: 25}),
39
45
  ]
40
46
  end
41
- after{remove_constants :Player}
42
47
 
43
48
  it_should_behave_like 'embedded object CRUD'
44
49
  end
@@ -7,7 +7,8 @@ Mongo::ObjectSerializer::SIMPLE_TYPES << RSpec::Mocks::Proxy
7
7
 
8
8
  # To simplify callback expectations
9
9
  module RSpec::CallbackHelper
10
- def _run_callbacks name
11
- send name if respond_to? name
10
+ def _run_callbacks type, method_name
11
+ callback_method_name = :"#{type}_#{method_name}"
12
+ send callback_method_name if respond_to? callback_method_name
12
13
  end
13
14
  end
@@ -3,19 +3,21 @@ require 'object/spec_helper'
3
3
  describe 'Object validation' do
4
4
  with_mongo
5
5
 
6
- before do
6
+ before :all do
7
7
  class Player
8
8
  attr_accessor :missions
9
9
 
10
10
  class Mission
11
11
  end
12
12
  end
13
+ end
14
+ after(:all){remove_constants :Player}
13
15
 
16
+ before do
14
17
  @mission = Player::Mission.new
15
18
  @player = Player.new
16
19
  @player.missions = [@mission]
17
20
  end
18
- after{remove_constants :Player}
19
21
 
20
22
  it 'should not save/update/destroy invalid objects' do
21
23
  # create
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-18 00:00:00.000000000Z
12
+ date: 2011-08-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongo
16
- requirement: &2844700 !ruby/object:Gem::Requirement
16
+ requirement: &753720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '1.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2844700
24
+ version_requirements: *753720
25
25
  description:
26
26
  email:
27
27
  executables: []
@@ -30,34 +30,55 @@ extra_rdoc_files: []
30
30
  files:
31
31
  - Rakefile
32
32
  - readme.md
33
- - lib/mongo_db/driver/core/collection.rb
34
- - lib/mongo_db/driver/core/database.rb
35
- - lib/mongo_db/driver/core.rb
36
- - lib/mongo_db/driver/more/collection_finders.rb
37
- - lib/mongo_db/driver/more.rb
33
+ - lib/mongo_db/driver/collection.rb
34
+ - lib/mongo_db/driver/database.rb
35
+ - lib/mongo_db/driver/dynamic_finders.rb
38
36
  - lib/mongo_db/driver/spec.rb
39
37
  - lib/mongo_db/driver.rb
40
38
  - lib/mongo_db/gems.rb
39
+ - lib/mongo_db/migration/definition.rb
40
+ - lib/mongo_db/migration/migration.rb
41
+ - lib/mongo_db/migration/tasks.rb
42
+ - lib/mongo_db/migration.rb
43
+ - lib/mongo_db/model/assignment.rb
44
+ - lib/mongo_db/model/callbacks.rb
45
+ - lib/mongo_db/model/crud.rb
46
+ - lib/mongo_db/model/db.rb
47
+ - lib/mongo_db/model/misc.rb
48
+ - lib/mongo_db/model/model.rb
49
+ - lib/mongo_db/model/query.rb
50
+ - lib/mongo_db/model/scope.rb
51
+ - lib/mongo_db/model/spec.rb
52
+ - lib/mongo_db/model/support/types.rb
53
+ - lib/mongo_db/model/validation.rb
54
+ - lib/mongo_db/model.rb
41
55
  - lib/mongo_db/object/object_helper.rb
42
56
  - lib/mongo_db/object/object_serializer.rb
43
57
  - lib/mongo_db/object.rb
44
- - spec/driver/core/collection_spec.rb
45
- - spec/driver/core/crud_spec.rb
46
- - spec/driver/core/database_spec.rb
47
- - spec/driver/core/hash_helper_spec.rb
58
+ - spec/driver/collection_spec.rb
59
+ - spec/driver/crud_spec.rb
60
+ - spec/driver/database_spec.rb
61
+ - spec/driver/dynamic_finders_spec.rb
48
62
  - spec/driver/fixes_spec.rb
49
- - spec/driver/more/querying_spec.rb
63
+ - spec/driver/hash_helper_spec.rb
50
64
  - spec/driver/spec_helper.rb
65
+ - spec/integration/am_conversion_spec.rb
66
+ - spec/integration/am_validation_spec.rb
51
67
  - spec/migration/migration_spec.rb
52
- - spec/model/callbacks.rb
53
- - spec/model/example.rb
54
- - spec/model/model_crud.rb
68
+ - spec/model/assignment_spec.rb
69
+ - spec/model/callbacks_spec.rb
70
+ - spec/model/crud_spec.rb
71
+ - spec/model/db_spec.rb
72
+ - spec/model/misc_spec.rb
73
+ - spec/model/query_spec.rb
74
+ - spec/model/scope_spec.rb
75
+ - spec/model/spec_helper.rb
76
+ - spec/model/validation_spec.rb
55
77
  - spec/object/callbacks_spec.rb
56
78
  - spec/object/crud_shared.rb
57
79
  - spec/object/crud_spec.rb
58
80
  - spec/object/spec_helper.rb
59
81
  - spec/object/validation_spec.rb
60
- - spec/test.rb
61
82
  homepage: http://github.com/alexeypetrushin/mongo_db
62
83
  licenses: []
63
84
  post_install_message:
@@ -1,29 +0,0 @@
1
- require 'mongo_db/gems'
2
-
3
- require 'mongo'
4
-
5
- %w(
6
- database
7
- collection
8
- ).each{|f| require "mongo_db/driver/core/#{f}"}
9
-
10
- # defaults
11
- Mongo.class_eval do
12
- class << self
13
- def defaults; @defaults ||= {} end
14
- attr_writer :defaults
15
- end
16
- end
17
-
18
- # database
19
- Mongo::DB.send :include, Mongo::DBExt
20
-
21
- # collection
22
- Mongo::Collection.class_eval do
23
- include Mongo::CollectionExt
24
-
25
- %w(insert update remove save).each do |method|
26
- alias_method "#{method}_without_ext", method
27
- alias_method method, "#{method}_with_ext"
28
- end
29
- end
@@ -1,43 +0,0 @@
1
- module Mongo::CollectionFinders
2
- #
3
- # first_by_id, special case
4
- #
5
- def first_by_id id
6
- first _id: id
7
- end
8
- alias_method :by_id, :first_by_id
9
-
10
- def first_by_id! id
11
- first_by_id(id) || raise(Mongo::NotFound, "document with id #{id} not found!")
12
- end
13
- alias_method :by_id!, :first_by_id!
14
-
15
- protected
16
- #
17
- # first_by_field, all_by_field
18
- #
19
- def method_missing clause, *a, &b
20
- if clause =~ /^([a-z]_by_[a-z_])|(by_[a-z_])/
21
- clause = clause.to_s
22
-
23
- bang = clause =~ /!$/
24
- clause = clause[0..-2] if bang
25
-
26
- finder, field = if clause =~ /^by_/
27
- ['first', clause.sub(/by_/, '')]
28
- else
29
- clause.split(/_by_/, 2)
30
- end
31
- finder = 'first' if finder == 'find'
32
-
33
- raise "You can't use bang version with :#{finder}!" if bang and finder != 'first'
34
-
35
- raise "invalid arguments for finder (#{a})!" unless a.size == 1
36
- field_value = a.first
37
-
38
- send(finder, field => field_value) || (bang && raise(Mongo::NotFound, "document with #{field}: #{field_value} not found!"))
39
- else
40
- super
41
- end
42
- end
43
- end
@@ -1,10 +0,0 @@
1
- require 'mongo_db/driver/core'
2
-
3
- class Mongo::NotFound < StandardError; end
4
-
5
- %w(
6
- collection_finders
7
- ).each{|f| require "mongo_db/driver/more/#{f}"}
8
-
9
- Mongo::Collection.send :include, Mongo::CollectionFinders
10
-
@@ -1,59 +0,0 @@
1
- require 'driver/spec_helper'
2
-
3
- describe "Querying" do
4
- with_mongo
5
-
6
- before do
7
- @jim = {name: 'Jim', age: 34}
8
- @units = db.units
9
- end
10
-
11
- describe "dynamic finders" do
12
- it "find, first, by" do
13
- @units.first_by_name('Jim').should be_nil
14
- -> {@units.first_by_name!('Jim')}.should raise_error(Mongo::NotFound)
15
- @units.by_name('Jim').should be_nil
16
- -> {@units.by_name!('Jim')}.should raise_error(Mongo::NotFound)
17
- @units.first_by_name('Jim').should be_nil
18
- -> {@units.first_by_name!('Jim')}.should raise_error(Mongo::NotFound)
19
-
20
- @units.save @jim
21
-
22
- @units.first_by_name('Jim').should == @jim
23
- @units.first_by_name!('Jim').should == @jim
24
- @units.by_name('Jim').should == @jim
25
- @units.by_name!('Jim').should == @jim
26
- @units.first_by_name('Jim').should == @jim
27
- @units.first_by_name!('Jim').should == @jim
28
- end
29
-
30
- it "all" do
31
- @units.all_by_name('Jim').should == []
32
- @units.save @jim
33
- @units.all_by_name('Jim').should == [@jim]
34
- end
35
-
36
- it "should allow to use bang version only with :first" do
37
- -> {@units.all_by_name!('Jim')}.should raise_error(/can't use bang/)
38
- end
39
-
40
- it "by_id (special case)" do
41
- @units.method(:by_id).should == @units.method(:first_by_id)
42
- @units.method(:by_id!).should == @units.method(:first_by_id!)
43
-
44
- @units.by_id('4de81858cf26bde569000009').should be_nil
45
- -> {@units.by_id!('4de81858cf26bde569000009')}.should raise_error(Mongo::NotFound)
46
-
47
- @units.save @jim
48
-
49
- @units.by_id(@jim[:_id]).should == @jim
50
- @units.by_id!(@jim[:_id]).should == @jim
51
- end
52
- end
53
-
54
- it "underscore to dollar" do
55
- @units.save @jim
56
- @units.save name: 'Zeratul', age: 600
57
- @units.all(age: {_lt: 100}).should == [@jim]
58
- end
59
- end
@@ -1,100 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Object callbacks' do
4
- with_mongo
5
-
6
- before do
7
- class Player
8
- attr_accessor :missions
9
-
10
- class Mission
11
- end
12
- end
13
-
14
- @mission = Player::Mission.new
15
- @player = Player.new
16
- @player.missions = [@mission]
17
- end
18
- after{remove_constants :Player}
19
-
20
- it 'create' do
21
- [
22
- :before_validation,
23
- :after_validation,
24
- :before_save,
25
- :before_create,
26
- :after_create,
27
- :after_save
28
- ].each do |name|
29
- @player.should_receive(name).ordered
30
- @misson.should_receive(name).ordered
31
- end
32
-
33
- db.players.save @player
34
- end
35
-
36
- it 'update' do
37
- db.players.save @player
38
-
39
- [
40
- :before_validation,
41
- :validate,
42
- :after_validation,
43
- :before_save,
44
- :before_update,
45
- :after_update,
46
- :after_save
47
- ].each do |name|
48
- @player.should_receive(name).ordered
49
- @misson.should_receive(name).ordered
50
- end
51
- db.players.save @player
52
- end
53
-
54
- it 'destroy' do
55
- db.players.save @player
56
-
57
- [
58
- :before_validation,
59
- :validate,
60
- :after_validation,
61
- :before_destroy,
62
- :after_destroy,
63
- ].each do |name|
64
- @player.should_receive(name).ordered
65
- @misson.should_receive(name).ordered
66
- end
67
- db.players.destroy @player
68
- end
69
-
70
- it 'should be able interrupt CRUD' do
71
- @misson.stub!(:before_save).and_return(false)
72
- db.players.save(@player).should be_false
73
- db.players.count.should == 0
74
- end
75
-
76
- it 'should be able skip callbacks' do
77
- [
78
- :before_validation,
79
- :after_validation,
80
- :before_save,
81
- :before_create,
82
- :after_create,
83
- :after_save,
84
- :before_update,
85
- :after_update,
86
- :before_destroy,
87
- :after_destroy
88
- ].each do |name|
89
- @player.should_not_receive(name)
90
- @misson.should_receive(name)
91
- end
92
-
93
- db.players.save @player, callbacks: false
94
- db.players.count.should == 1
95
- db.players.save @player, callbacks: false
96
- db.players.count.should == 1
97
- db.players.destroy @player, callbacks: false
98
- db.players.count.should == 0
99
- end
100
- end
data/spec/test.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'driver/spec_helper'
2
-
3
- describe 'Test' do
4
- with_mongo
5
-
6
- it do
7
- class A; end
8
- db.units.save a: A.new
9
- end
10
- end