mongo_scope 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,7 +1,46 @@
1
- = mongo_scope
1
+ = MongoScope
2
2
 
3
3
  Hacking on some scope methods for MongoDB in Ruby. Inspired by Searchlogic.
4
4
 
5
+ Adds a scope method, as well as helper methods for MongoDB operators.
6
+
7
+ = Installation
8
+
9
+ Hosted on Gemcutter
10
+
11
+ $ gem install mongo_scope
12
+
13
+ = Example
14
+
15
+ From the examples dir
16
+
17
+ # Mongod should be running locally
18
+
19
+ require 'rubygems'
20
+ require 'mongo'
21
+ require 'mongo_scope'
22
+
23
+ # get a collection
24
+ connection = Mongo::Connection.new
25
+ db = connection.db('ruby-mongo-test')
26
+ coll = db.collection("test")
27
+
28
+ # Add some data
29
+ coll.remove
30
+ coll.save({:first_name => 'Mike', :last_name => 'Harris', :age => 27})
31
+ coll.save({:first_name => 'Lowell', :age => 28})
32
+ coll.save({:first_name => 'Lou', :age => 27})
33
+
34
+ # using a scope helper method (find works just like the normal Mongo::Collection find)
35
+ puts coll.scope_in(:first_name => ['Mike','Lowell']).find.count # 2
36
+ puts coll.scope_gt(:age => 27).find.count # 1
37
+
38
+ # chained scopes
39
+ puts coll.scope_eq(:first_name => /^L/).scope_eq(:age => 27).find.count # 1
40
+
41
+ # the raw scope method (this is wrapped by the helper methods)
42
+ puts coll.scope(:op => '$in', :field => :first_name, :val => ['Mike','Lowell']).find.count # 2
43
+
5
44
  == Copyright
6
45
 
7
46
  Copyright (c) 2009 Mike Harris. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'mongo'
3
+ require 'mongo_scope'
4
+
5
+ # taken from the spec
6
+ # Mongod should be running locally
7
+
8
+ # get a collection
9
+ connection = Mongo::Connection.new
10
+ db = connection.db('ruby-mongo-test')
11
+ coll = db.collection("test")
12
+
13
+ # Add some data
14
+ coll.remove
15
+ coll.save({:first_name => 'Mike', :last_name => 'Harris', :age => 27})
16
+ coll.save({:first_name => 'Lowell', :age => 28})
17
+ coll.save({:first_name => 'Lou', :age => 27})
18
+
19
+ # using a scope helper method (find works just like the normal Mongo::Collection find)
20
+ puts coll.scope_in(:first_name => ['Mike','Lowell']).find.count # 2
21
+ puts coll.scope_gt(:age => 27).find.count # 1
22
+
23
+ # chained scopes
24
+ puts coll.scope_eq(:first_name => /^L/).scope_eq(:age => 27).find.count # 1
25
+
26
+ # the raw scope method (this is wrapped by the helper methods)
27
+ puts coll.scope(:op => '$in', :field => :first_name, :val => ['Mike','Lowell']).find.count # 2
data/lib/mongo_scope.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'rubygems'
2
- require 'fattr'
3
2
  require File.join(File.dirname(__FILE__),'mongo_scope','util')
4
3
 
5
4
  module MongoScope
@@ -11,7 +10,7 @@ module MongoScope
11
10
  scope_ops = {:field => ops.keys.first, :val => ops.values.first}
12
11
  ScopedCollection.new(EqScope.new(scope_ops),self)
13
12
  end
14
- %w(in gt nin).each do |op|
13
+ %w(in nin gt lt gte lte ne mod all size exists).each do |op|
15
14
  define_method("scope_#{op}") do |ops|
16
15
  scope(:op => "$#{op}", :field => ops.keys.first, :val => ops.values.first)
17
16
  end
@@ -33,12 +32,18 @@ module MongoScope
33
32
  self.coll = coll
34
33
  end
35
34
  def scoped_ops(ops)
35
+ ops = {'_id' => ops} unless ops.kind_of?(Hash)
36
36
  ops.merge(scope_obj.find_ops)
37
37
  end
38
- def find(ops={})
39
- coll.find(scoped_ops(ops))
38
+ def find(selector={},options={})
39
+ coll.find(scoped_ops(selector),options)
40
+ end
41
+ def find_one(selector={},options={})
42
+ coll.find_one(scoped_ops(selector),options)
43
+ end
44
+ def method_missing(sym,*args,&b)
45
+ coll.send(sym,*args,&b)
40
46
  end
41
-
42
47
  end
43
48
 
44
49
  class Scope
@@ -1,5 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
+ class Object
4
+ def to_sym_keys
5
+ h = {}
6
+ each { |k,v| h[k.to_sym] = v }
7
+ h
8
+ end
9
+ def to_subset(h)
10
+ h = h.to_sym_keys
11
+ keys.each { |k| delete(k) unless h.keys.include?(k) }
12
+ self
13
+ end
14
+ end
15
+
3
16
  describe "MongoScope" do
4
17
  before(:all) do
5
18
  @connection = Mongo::Connection.new(ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost', ENV['MONGO_RUBY_DRIVER_PORT'] || Mongo::Connection::DEFAULT_PORT)
@@ -37,4 +50,19 @@ describe "MongoScope" do
37
50
  scope = MongoScope::Scope.new(:op => '$in', :field => :first_name, :val => ['Mike','Dave'])
38
51
  scope.find_ops.should == {:first_name => {'$in' => ['Mike','Dave']}}
39
52
  end
53
+ it 'scoped find_one' do
54
+ @coll.find_one(:age => 27)['first_name'].should == 'Mike'
55
+ @coll.scope_eq(:first_name => /^L/).find_one(:age => 27)['first_name'].should == 'Lou'
56
+ end
57
+ it 'scoped find_one with id' do
58
+ mike_id = @coll.find_one(:first_name => 'Mike')['_id']
59
+ lou_id = @coll.find_one(:first_name => 'Lou')['_id']
60
+ @coll.find_one(mike_id)['first_name'].should == 'Mike'
61
+ @coll.scope_eq(:first_name => /^L/).find_one(lou_id)['first_name'].should == 'Lou'
62
+ @coll.scope_eq(:first_name => 'Mike').find_one(lou_id).should_not be
63
+ end
64
+ it 'should save' do
65
+ @coll.scope_eq(:first_name => 'Mike').save(:abc => 42)
66
+ end
67
+
40
68
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_scope
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Harris
@@ -28,6 +28,7 @@ files:
28
28
  - README.rdoc
29
29
  - Rakefile
30
30
  - VERSION
31
+ - examples/the_lonely_example.rb
31
32
  - lib/mongo_scope.rb
32
33
  - lib/mongo_scope/util.rb
33
34
  - spec/mongo_scope_spec.rb
@@ -67,3 +68,4 @@ test_files:
67
68
  - spec/spec_helper.rb
68
69
  - test/mongo_scope_test.rb
69
70
  - test/test_helper.rb
71
+ - examples/the_lonely_example.rb