mongodb_model 0.0.12 → 0.2.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.
Files changed (3) hide show
  1. data/Rakefile +2 -2
  2. data/readme.md +61 -35
  3. metadata +10 -10
data/Rakefile CHANGED
@@ -2,10 +2,10 @@ require 'rake_ext'
2
2
 
3
3
  project(
4
4
  name: "mongodb_model",
5
- # version: '0.1.0',
5
+ version: '0.2.1',
6
6
  gem: true,
7
7
  summary: "Object Model for MongoDB",
8
8
 
9
9
  author: "Alexey Petrushin",
10
- homepage: "http://github.com/alexeypetrushin/mongodb_model"
10
+ homepage: "http://alexeypetrushin.github.com/mongodb_model"
11
11
  )
data/readme.md CHANGED
@@ -1,3 +1,5 @@
1
+ **Documentation:** http://alexeypetrushin.github.com/mongodb_model
2
+
1
3
  Object Model for MongoDB (callbacks, validations, mass-assignment, finders, ...).
2
4
 
3
5
  - The same API for pure driver and Models.
@@ -14,61 +16,85 @@ Object Model for MongoDB (callbacks, validations, mass-assignment, finders, ...)
14
16
  Other ODM usually try to cover simple but non-standard API of MongoDB behind complex ORM-like abstractions. This tool **exposes simplicity and power of MongoDB and leverages its differences**.
15
17
 
16
18
  ``` ruby
17
- # Connecting to MongoDB.
19
+ # Basic example of working with [Mongo Model][mongodb_model].
20
+ #
21
+ # In this example we'll create simple model and examine basic CRUD and
22
+ # querying operations.
18
23
  require 'mongo/model'
19
- Mongo.defaults.merge! symbolize: true, multi: true, safe: true
20
- connection = Mongo::Connection.new
21
- db = connection.db 'default_test'
22
- db.units.drop
23
- Mongo::Model.db = db
24
24
 
25
- # Let's define the game unit.
25
+ # Connecting to test database and cleaning it before starting.
26
+ Mongo::Model.default_database_name = :default_test
27
+ Mongo::Model.default_database.clear
28
+
29
+ # Let's define Game Unit.
30
+ # Models are just plain Ruby Objects, there's no any Attribute Scheme,
31
+ # Types, Proxies, or other complex stuff, just use standard Ruby practices.
26
32
  class Unit
33
+ # Inheriting our Unit Class from Mongo::Model (the `inherit` keyword is
34
+ # just a simple shortcut including Module and its ClassMethods).
27
35
  inherit Mongo::Model
36
+
37
+ # You can specify collection name explicitly or omit it and it will be
38
+ # guessed from the class name.
28
39
  collection :units
29
40
 
41
+ # There's no need to define attributes, just use plain old Ruby technics to
42
+ # of working with objects.
30
43
  attr_accessor :name, :status, :stats
31
44
 
32
- scope :alive, status: 'alive'
45
+ def inspect; name end
46
+ end
47
+
48
+ # Stats conaining statistics about Unit (it will be embedded into the
49
+ # Unit).
50
+ #
51
+ # There are no difference between main and embedded objects, all of them
52
+ # are just standard Ruby objects.
53
+ class Unit::Stats
54
+ inherit Mongo::Model
33
55
 
34
- class Stats
35
- inherit Mongo::Model
36
- attr_accessor :attack, :life, :shield
37
- end
56
+ attr_accessor :attack, :life, :shield
38
57
  end
39
58
 
40
- # Create.
41
- zeratul = Unit.build(name: 'Zeratul', status: 'alive', stats: Unit::Stats.build(attack: 85, life: 300, shield: 100))
42
- tassadar = Unit.build(name: 'Tassadar', status: 'dead', stats: Unit::Stats.build(attack: 0, life: 80, shield: 300))
59
+ # Let's create two great Heroes.
60
+ zeratul = Unit.new name: 'Zeratul', status: 'alive'
61
+ zeratul.stats = Unit::Stats.new attack: 85, life: 300, shield: 100
62
+
63
+ tassadar = Unit.new name: 'Tassadar', status: 'dead'
64
+ tassadar.stats = Unit::Stats.new attack: 0, life: 80, shield: 300
43
65
 
44
- zeratul.save
45
- tassadar.save
66
+ # Saving units to database
67
+ p zeratul.save # => true
68
+ p tassadar.save # => true
46
69
 
47
- # Udate (we made error - mistakenly set Tassadar's attack as zero, let's fix it).
70
+ # We made error - mistakenly set Tassadar's attack as zero, let's fix it.
48
71
  tassadar.stats.attack = 20
49
- tassadar.save
72
+ p tassadar.save # => true
50
73
 
51
- # Querying first & all, there's also :each, the same as :all.
52
- Unit.first name: 'Zeratul' # => zeratul
53
- Unit.all name: 'Zeratul' # => [zeratul]
74
+ # Querying, use standard MongoDB query.
75
+ p Unit.first(name: 'Zeratul') # => Zeratul
76
+ p Unit.all(name: 'Zeratul') # => [Zeratul]
54
77
  Unit.all name: 'Zeratul' do |unit|
55
- unit # => zeratul
78
+ p unit # => Zeratul
56
79
  end
57
80
 
58
- # Simple finders (bang versions also availiable).
59
- Unit.by_name 'Zeratul' # => zeratul
60
- Unit.first_by_name 'Zeratul' # => zeratul
61
- Unit.all_by_name 'Zeratul' # => [zeratul]
62
-
63
- # Scopes.
64
- Unit.alive.count # => 1
65
- Unit.alive.first # => zeratul
81
+ # Simple dynamic finders (bang versions also availiable).
82
+ p Unit.by_name('Zeratul') # => Zeratul
83
+ p Unit.first_by_name('Zeratul') # => Zeratul
84
+ p Unit.all_by_name('Zeratul') # => [Zeratul]
66
85
 
67
- # Callbacks & callbacks on embedded models.
86
+ # In this example we covered basics of [Mongo Model][mongodb_model],
87
+ # please go to [contents][mongodb_model] for more samples.
88
+ #
89
+ # [mongodb_model]: index.html
90
+ ```
68
91
 
69
- # Validations.
92
+ # Installation
70
93
 
71
- # Save model to any collection.
94
+ ``` bash
95
+ gem install mongodb_model
72
96
  ```
73
97
 
74
- Source: examples/model.rb
98
+ # License
99
+
100
+ Copyright (c) Alexey Petrushin, http://petrush.in, released under the MIT license.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-09-15 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongodb
16
- requirement: &2843630 !ruby/object:Gem::Requirement
16
+ requirement: &2844160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2843630
24
+ version_requirements: *2844160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: file_model
27
- requirement: &2843390 !ruby/object:Gem::Requirement
27
+ requirement: &2843920 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2843390
35
+ version_requirements: *2843920
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: validatable2
38
- requirement: &2843150 !ruby/object:Gem::Requirement
38
+ requirement: &2843680 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2843150
46
+ version_requirements: *2843680
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: ruby_ext
49
- requirement: &2842910 !ruby/object:Gem::Requirement
49
+ requirement: &2843440 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2842910
57
+ version_requirements: *2843440
58
58
  description:
59
59
  email:
60
60
  executables: []
@@ -95,7 +95,7 @@ files:
95
95
  - spec/scope_spec.rb
96
96
  - spec/spec_helper.rb
97
97
  - spec/validation_spec.rb
98
- homepage: http://github.com/alexeypetrushin/mongodb_model
98
+ homepage: http://alexeypetrushin.github.com/mongodb_model
99
99
  licenses: []
100
100
  post_install_message:
101
101
  rdoc_options: []