mongo_db 0.1.5 → 0.1.6

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.
@@ -0,0 +1,64 @@
1
+ require 'mongo_db/model'
2
+ require 'rspec'
3
+
4
+ describe "Object example" do
5
+ defaults = nil
6
+ before(:all){defaults = Mongo.defaults.clone}
7
+ after :all do
8
+ Mongo.defaults = defaults
9
+ Object.send :remove_const, :Unit if Object.const_defined? :Unit
10
+ end
11
+
12
+ it do
13
+ # let's define the game unit
14
+ class Unit
15
+ attr_reader :name, :stats
16
+
17
+ # don't forget to allow creating object with no arguments
18
+ def initialize name = nil, stats = nil
19
+ @name, @stats = name, stats
20
+ end
21
+
22
+ class Stats
23
+ attr_accessor :attack, :life, :shield
24
+
25
+ def initialize attack = nil, life = nil, shield = nil
26
+ @attack, @life, @shield = attack, life, shield
27
+ end
28
+ end
29
+ end
30
+
31
+ # connecting to MongoDB
32
+ require 'mongo_db/model'
33
+ Mongo.defaults.merge! symbolize: true, multi: true, safe: true
34
+ connection = Mongo::Connection.new
35
+ db = connection.db 'default_test'
36
+
37
+ # create
38
+ zeratul = Unit.new('Zeratul', Unit::Stats.new(85, 300, 100))
39
+ tassadar = Unit.new('Tassadar', Unit::Stats.new(0, 80, 300))
40
+
41
+ db.units.save zeratul
42
+ db.units.save tassadar
43
+
44
+ # udate (we made error - mistakenly set Tassadar's attack as zero, let's fix it)
45
+ tassadar.stats.attack = 20
46
+ db.units.save tassadar
47
+
48
+ # querying first & all, there's also :each, the same as :all
49
+ db.units.first name: 'Zeratul' # => zeratul
50
+ db.units.all name: 'Zeratul' # => [zeratul]
51
+ db.units.all name: 'Zeratul' do |unit|
52
+ unit # => zeratul
53
+ end
54
+
55
+ # simple finders (bang versions also availiable)
56
+ db.units.by_name 'Zeratul' # => zeratul
57
+ db.units.first_by_name 'Zeratul' # => zeratul
58
+ db.units.all_by_name 'Zeratul' # => [zeratul]
59
+
60
+ # query sugar, use {life: {_lt: 100}} instead of {life: {:$lt => 100}}
61
+ Mongo.defaults.merge! convert_underscore_to_dollar: true
62
+ db.units.all('stats.life' => {_lt: 100}) # => [tassadar]
63
+ end
64
+ end
@@ -1,37 +1,37 @@
1
- require 'spec_helper'
1
+ require 'object/spec_helper'
2
2
  require 'object/crud_shared'
3
3
 
4
4
  describe "Object CRUD" do
5
- with_mongo_model
6
-
5
+ with_mongo
6
+
7
7
  describe 'simple' do
8
8
  before do
9
9
  class Person
10
- def initialize name, info; @name, @info = name, info end
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
-
15
- @zeratul = User.new 'Zeratul', 'Dark Templar'
14
+
15
+ @zeratul = Person.new 'Zeratul', 'Dark Templar'
16
16
  end
17
17
  after{remove_constants :Person}
18
-
18
+
19
19
  it_should_behave_like "object CRUD"
20
20
  end
21
-
21
+
22
22
  describe 'embedded' do
23
- before do
23
+ before do
24
24
  class Player
25
25
  attr_accessor :missions
26
- def == o; [self.class, self.missions] = [o.class, o.respond_to(:missions)] end
27
-
26
+ def == o; [self.class, self.missions] == [o.class, o.respond_to(:missions)] end
27
+
28
28
  class Mission
29
- def initialize name, stats; @name, @stats = name, stats end
29
+ def initialize name = nil, stats = nil; @name, @stats = name, stats end
30
30
  attr_accessor :name, :stats
31
- def == o; [self.class, self.name, self.stats] = [o.class, o.respond_to(:name), o.respond_to(:stats)] end
32
- end
31
+ def == o; [self.class, self.name, self.stats] == [o.class, o.respond_to(:name), o.respond_to(:stats)] end
32
+ end
33
33
  end
34
-
34
+
35
35
  @player = Player.new
36
36
  @player.missions = [
37
37
  Player::Mission.new('Wasteland', {buildings: 5, units: 10}),
@@ -39,7 +39,7 @@ describe "Object CRUD" do
39
39
  ]
40
40
  end
41
41
  after{remove_constants :Player}
42
-
42
+
43
43
  it_should_behave_like 'embedded object CRUD'
44
- end
44
+ end
45
45
  end
@@ -0,0 +1,3 @@
1
+ require 'mongo_db/model'
2
+
3
+ require 'driver/spec_helper'
data/spec/test.rb CHANGED
@@ -1,5 +1,10 @@
1
- require 'spec_helper'
1
+ require 'driver/spec_helper'
2
2
 
3
- db = Mongo::Connection.new("localhost").db("default_test")
4
- p db.class
5
- puts db.methods.sort
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
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.5
4
+ version: 0.1.6
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-13 00:00:00.000000000Z
12
+ date: 2011-08-14 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongo
16
- requirement: &366240 !ruby/object:Gem::Requirement
16
+ requirement: &2844710 !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: *366240
24
+ version_requirements: *2844710
25
25
  description:
26
26
  email:
27
27
  executables: []
@@ -32,33 +32,33 @@ files:
32
32
  - readme.md
33
33
  - lib/mongo_db/driver/core/collection.rb
34
34
  - lib/mongo_db/driver/core/database.rb
35
- - lib/mongo_db/driver/core/hash_helper.rb
36
35
  - lib/mongo_db/driver/core.rb
37
- - lib/mongo_db/driver/more/collection.rb
36
+ - lib/mongo_db/driver/more/collection_finders.rb
38
37
  - lib/mongo_db/driver/more.rb
39
38
  - lib/mongo_db/driver/spec.rb
40
39
  - lib/mongo_db/driver.rb
41
40
  - lib/mongo_db/gems.rb
41
+ - lib/mongo_db/model/model_helper.rb
42
+ - lib/mongo_db/model/model_serializer.rb
42
43
  - lib/mongo_db/model.rb
43
44
  - lib/mongo_db/support.rb
44
- - lib/old/advanced_finders.rb
45
- - lib/old/query.rb
46
- - lib/old/query_spec.rb
47
45
  - spec/driver/core/collection_spec.rb
48
46
  - spec/driver/core/crud_spec.rb
49
47
  - spec/driver/core/database_spec.rb
50
48
  - spec/driver/core/hash_helper_spec.rb
49
+ - spec/driver/example_spec.rb
50
+ - spec/driver/fixes_spec.rb
51
51
  - spec/driver/more/querying_spec.rb
52
52
  - spec/driver/spec_helper.rb
53
- - spec/driver_example_spec.rb
54
53
  - spec/migration/migration_spec.rb
55
- - spec/model/model/crud.rb
56
- - spec/model/model/query.rb
57
- - spec/model/object/callbacks.rb
58
- - spec/model/object/crud.rb
59
- - spec/model/object/crud_shared.rb
60
- - spec/model/object/validation.rb
61
- - spec/model/spec_helper.rb
54
+ - spec/model/callbacks.rb
55
+ - spec/model/example.rb
56
+ - spec/model/model_crud.rb
57
+ - spec/model/validation.rb
58
+ - spec/object/crud_shared.rb
59
+ - spec/object/example_spec.rb
60
+ - spec/object/object_crud_spec.rb
61
+ - spec/object/spec_helper.rb
62
62
  - spec/test.rb
63
63
  homepage: http://github.com/alexeypetrushin/mongo_db
64
64
  licenses: []
@@ -1,67 +0,0 @@
1
- require 'set'
2
- require 'date'
3
-
4
- class Mongo::Ext::HashHelper
5
- # SIMPLE_TYPES = [
6
- # String, Symbol,
7
- # Numeric,
8
- # Regexp,
9
- # Array,
10
- # TrueClass, FalseClass,
11
- # Date, DateTime,
12
- # BSON::ObjectId
13
- # ].to_set
14
-
15
- QUERY_KEYWORDS = [
16
- :_lt, :_lte, :_gt, :_gte,
17
- :_all, :_exists, :_mod, :_ne, :_in, :_nin,
18
- :_nor, :_or, :_and,
19
- :_size, :_type
20
- ].to_set
21
-
22
- UPDATE_KEYWORDS = [
23
- :_inc, :_set, :_unset, :_push, :_pushAll, :_addToSet, :_pop, :_pull, :_pullAll, :_rename, :_bit
24
- ].to_set
25
-
26
- class << self
27
- # symbolizing hashes
28
- def symbolize o
29
- convert o do |k, v, result|
30
- k = k.to_sym if k.is_a? String
31
- result[k] = v
32
- end
33
- end
34
-
35
- # replaces :_lt to :$lt in query
36
- def convert_underscore_to_dollar_in_selector selector
37
- convert selector do |k, v, result|
38
- k = "$#{k.to_s[1..-1]}".to_sym if QUERY_KEYWORDS.include?(k)
39
- result[k] = v
40
- end
41
- end
42
-
43
- # replaces :_set to :$set in query
44
- def convert_underscore_to_dollar_in_update update
45
- convert update do |k, v, result|
46
- k = "$#{k.to_s[1..-1]}".to_sym if UPDATE_KEYWORDS.include?(k)
47
- result[k] = v
48
- end
49
- end
50
-
51
- # converts hashes (also works with nested & arrays)
52
- def convert o, &block
53
- if o.is_a? Hash
54
- result = {}
55
- o.each do |k, v|
56
- v = convert v, &block
57
- block.call k, v, result
58
- end
59
- result
60
- elsif o.is_a? Array
61
- o.collect{|v| convert v, &block}
62
- else
63
- o
64
- end
65
- end
66
- end
67
- end
@@ -1,26 +0,0 @@
1
- before do
2
- @zeratul = {name: 'Zeratul', stats: {attack: 85, life: 300, shield: 100}}
3
- @tassadar = {name: 'Tassadar', stats: {attack: 20, life: 80, shield: 300}}
4
-
5
- db.units.save @zeratul
6
- db.units.save @tassadar
7
- end
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
- it "selector" do
19
- db.units.select{|u|
20
- u.stats.life < 100
21
- u.name.exist
22
- u.name.in
23
- }.first.should == @tassadar
24
-
25
- db.units.select{|u| }
26
- end
data/lib/old/query.rb DELETED
@@ -1,91 +0,0 @@
1
- class Mongo::Ext::Query
2
- class Dsl < BasicObject
3
- class Statement < ::Array
4
- def add_to hash
5
- operator, value = self[-2, -1]
6
- path = self[0..-3]
7
-
8
- current = hash
9
- path.each_with_index do |key, index|
10
- if index == path.size - 1
11
- raise "dupliate key :#{key}!" if current.include? key
12
- current[key] = value
13
- else
14
- raise "dupliate key :#{key}!" if current.include?(key) and !current[key].is_a?(Hash)
15
- current[key] ||= {}
16
- current = current[key]
17
- end
18
- end
19
- nil
20
- end
21
- end
22
-
23
- def initialize &block
24
- @statements = [Statement.new]
25
- block.call self
26
- statements.pop if statements.last.empty?
27
- end
28
-
29
- {
30
- :== => :==,
31
- :!= => :$ne,
32
- :< => :$lt,
33
- :<= => :$lte,
34
- :> => :$gt,
35
- :>= => :$gte,
36
- }.each do |ruby, mongo|
37
- define_method ruby do |arg|
38
- emit mongo
39
- emit arg, true
40
- end
41
- end
42
-
43
- def to_hash
44
- h = {}
45
- statements.each{|s| h.add_to h}
46
- h
47
- end
48
-
49
- protected
50
- attr_reader :statements
51
-
52
- def emit statement = nil, terminate = false
53
- statements.last << statement if statement
54
- statements << Statement.new if terminate
55
- nil
56
- end
57
-
58
- def method_missing m, *args, &block
59
- raise "invalid usage, there can be only one argument (#{args})!" if args.size > 1
60
-
61
- if args.empty?
62
- emit m
63
- self
64
- else
65
- emit m
66
- emit args.first, true
67
- end
68
- end
69
-
70
- def p *args
71
- ::Kernel.p *args
72
- end
73
- end
74
-
75
- def initialize collection, &block
76
- @collection = collection
77
- @hash_query = Dsl.new(&block).to_hash
78
- end
79
-
80
- def first
81
- collection.first to_hash
82
- end
83
-
84
- def all &block
85
- collection.first to_hash, &block
86
- end
87
- alias_method :each, :all
88
-
89
- protected
90
- attr_reader :collection, :hash_query
91
- end
@@ -1,77 +0,0 @@
1
- require 'driver/spec_helper'
2
-
3
- describe "Query" do
4
- dsl_class = Mongo::Ext::Query::Dsl
5
- dsl_class.class_eval do
6
- public :statements
7
- end
8
-
9
- it "operators" do
10
- value = :value
11
- dsl_class.new do |o|
12
- o.key == value
13
- o.key != value
14
- o.key < value
15
- o.key <= value
16
- o.key > value
17
- o.key >= value
18
- o.key.all value
19
- o.key.exists true
20
- o.key.mod value
21
- o.key.in value
22
- o.key.nin value
23
- o.key.size value
24
- o.key.type value
25
- end.statements.should == [
26
- [:key, :==, :value],
27
- [:key, :$ne, :value],
28
- [:key, :$lt, :value],
29
- [:key, :$lte, :value],
30
- [:key, :$gt, :value],
31
- [:key, :$gte, :value],
32
- [:key, :all, :value],
33
- [:key, :exists, true],
34
- [:key, :mod, :value],
35
- [:key, :in, :value],
36
- [:key, :nin, :value],
37
- [:key, :size, :value],
38
- [:key, :type, :value]
39
- ]
40
- end
41
-
42
- it ":nor, :or, :and"
43
-
44
- describe "statement" do
45
- def process_statement *args
46
- s = Mongo::Ext::Query::Dsl::Statement.new
47
- s.push *args
48
- result = {}
49
- s.add_to result
50
- result
51
- end
52
-
53
- it "basics", focus: true do
54
- p process_statement(:age, :$gt, 34)
55
- end
56
- end
57
-
58
- # it "to_hash" do
59
- # dsl.new do |o|
60
- # # o.name == 'Jim'
61
- # o.age > 34
62
- # end.to_hash.should == {
63
- # # name: 'Jim',
64
- # :$gt => {age: 34}
65
- # }
66
- # end
67
- #
68
- # it do
69
- # dsl.new do |unit|
70
- # unit.name == 'Zeratul'
71
- # unit.stats.life > 100
72
- # unit.stats.attack != 0
73
- # end.statement.should == {
74
- # name: 1
75
- # }
76
- # end
77
- end
@@ -1 +0,0 @@
1
- require 'mongo_model'