tinymongo 0.1.0
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.
- data/LICENSE +19 -0
- data/README.rdoc +48 -0
- data/Rakefile +30 -0
- data/VERSION +1 -0
- data/init.rb +4 -0
- data/lib/generators/USAGE +8 -0
- data/lib/generators/templates/tinymongo.yml.erb +23 -0
- data/lib/generators/tinymongo_generator.rb +16 -0
- data/lib/tinymongo/helper.rb +62 -0
- data/lib/tinymongo/model.rb +276 -0
- data/lib/tinymongo.rb +43 -0
- data/test/test_helper.rb +2 -0
- data/test/test_tinymongo.rb +232 -0
- data/tinymongo.gemspec +61 -0
- metadata +104 -0
    
        data/LICENSE
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            Copyright (c) 2010 Peter Jihoon Kim
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 4 | 
            +
            of this software and associated documentation files (the "Software"), to deal
         | 
| 5 | 
            +
            in the Software without restriction, including without limitation the rights
         | 
| 6 | 
            +
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         | 
| 7 | 
            +
            copies of the Software, and to permit persons to whom the Software is
         | 
| 8 | 
            +
            furnished to do so, subject to the following conditions:
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            The above copyright notice and this permission notice shall be included in
         | 
| 11 | 
            +
            all copies or substantial portions of the Software.
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         | 
| 14 | 
            +
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         | 
| 15 | 
            +
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         | 
| 16 | 
            +
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         | 
| 17 | 
            +
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         | 
| 18 | 
            +
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
         | 
| 19 | 
            +
            THE SOFTWARE.
         | 
    
        data/README.rdoc
    ADDED
    
    | @@ -0,0 +1,48 @@ | |
| 1 | 
            +
            = TinyMongo
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Simple MongoDB wrapper
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            == Install
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              gem install tinymongo
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            == Rails Setup
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            To create TinyMongo config file (config/tinymongo.yml), do the following:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              rails generate tinymongo
         | 
| 14 | 
            +
              
         | 
| 15 | 
            +
            == Connecting To MongoDB directly (for non-Rails projects)
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              TinyMongo.configure({:host => 'localhost', :database => 'test'})
         | 
| 18 | 
            +
              TinyMongo.connect
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
            == Example
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              class Person < TinyMongo::Model
         | 
| 23 | 
            +
                mongo_collection :people  # optional if using Rails
         | 
| 24 | 
            +
                mongo_key :name
         | 
| 25 | 
            +
                mongo_key :age
         | 
| 26 | 
            +
                mongo_key :children
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
                def make_child
         | 
| 29 | 
            +
                  child = Person.new(:name => 'Baby', :age => 0)
         | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                  self.push({:children => child})
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              
         | 
| 34 | 
            +
                def grow_up
         | 
| 35 | 
            +
                  self.inc({:age => 1})
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
                
         | 
| 38 | 
            +
                def set_stuff(n,a,c)
         | 
| 39 | 
            +
                  name = n
         | 
| 40 | 
            +
                  age = a
         | 
| 41 | 
            +
                  children = c
         | 
| 42 | 
            +
                  save
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
              
         | 
| 46 | 
            +
            == Copyright
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            Copyright (c) 2010 Peter Jihoon Kim. See LICENSE for details.
         | 
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            require 'rake'
         | 
| 2 | 
            +
            require 'rake/testtask'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            begin
         | 
| 5 | 
            +
              require 'jeweler'
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              Jeweler::Tasks.new do |s|
         | 
| 8 | 
            +
                s.name              = "tinymongo"
         | 
| 9 | 
            +
                s.summary           = "Simple MongoDB wrapper"
         | 
| 10 | 
            +
                s.description       = s.summary
         | 
| 11 | 
            +
                s.homepage          = "http://github.com/petejkim/tinymongo"
         | 
| 12 | 
            +
                s.authors           = ["Peter Jihoon Kim"]
         | 
| 13 | 
            +
                s.email             = "raingrove@gmail.com"
         | 
| 14 | 
            +
                s.add_dependency 'mongo'
         | 
| 15 | 
            +
                s.add_dependency 'bson'
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              Jeweler::GemcutterTasks.new
         | 
| 19 | 
            +
            rescue LoadError
         | 
| 20 | 
            +
              puts "Jeweler - or one of its dependencies - is not available. " <<
         | 
| 21 | 
            +
              "Install it with: sudo gem install jeweler -s http://gemcutter.org"
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            Rake::TestTask.new do |t|
         | 
| 25 | 
            +
              t.libs << 'lib'
         | 
| 26 | 
            +
              t.pattern = 'test/**/test_*.rb'
         | 
| 27 | 
            +
              t.verbose = true
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            task :default => :test
         | 
    
        data/VERSION
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            0.1.0
         | 
    
        data/init.rb
    ADDED
    
    
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            development:
         | 
| 2 | 
            +
              host: localhost
         | 
| 3 | 
            +
              port:
         | 
| 4 | 
            +
              options:
         | 
| 5 | 
            +
              database: <%= application_name %>_development
         | 
| 6 | 
            +
              username: 
         | 
| 7 | 
            +
              password: 
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            test: 
         | 
| 10 | 
            +
              host: localhost
         | 
| 11 | 
            +
              port:
         | 
| 12 | 
            +
              options:
         | 
| 13 | 
            +
              database: <%= application_name %>_test
         | 
| 14 | 
            +
              username: 
         | 
| 15 | 
            +
              password: 
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            production:
         | 
| 18 | 
            +
              host: localhost
         | 
| 19 | 
            +
              port:
         | 
| 20 | 
            +
              options:
         | 
| 21 | 
            +
              database: <%= application_name %>_production
         | 
| 22 | 
            +
              username: 
         | 
| 23 | 
            +
              password: 
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            class TinymongoGenerator < Rails::Generators::Base
         | 
| 2 | 
            +
              source_root File.expand_path('../templates', __FILE__)
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              def generate_config
         | 
| 5 | 
            +
                template "tinymongo.yml.erb", "config/tinymongo.yml"
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              private
         | 
| 9 | 
            +
              def application_name # from Rails::Generators::NamedBase
         | 
| 10 | 
            +
                if defined?(Rails) && Rails.application
         | 
| 11 | 
            +
                  Rails.application.class.name.split('::').first.underscore
         | 
| 12 | 
            +
                else
         | 
| 13 | 
            +
                  "application"
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            module TinyMongo
         | 
| 2 | 
            +
              module Helper
         | 
| 3 | 
            +
                class << self
         | 
| 4 | 
            +
                  def stringify_keys_in_hash(hash)
         | 
| 5 | 
            +
                    new_hash = {}
         | 
| 6 | 
            +
                    hash.each_pair { |key, value| new_hash[key.to_s] = value }
         | 
| 7 | 
            +
                    new_hash['_id'] = bson_object_id(new_hash['_id']) if(new_hash['_id'])
         | 
| 8 | 
            +
                    new_hash
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def symbolify_keys_in_hash(hash)
         | 
| 12 | 
            +
                    new_hash = {}
         | 
| 13 | 
            +
                    hash.each_pair { |key, value| new_hash[key.to_sym] = value }
         | 
| 14 | 
            +
                    new_hash[:_id] = bson_object_id(new_hash[:_id]) if(new_hash[:_id])
         | 
| 15 | 
            +
                    new_hash
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                  
         | 
| 18 | 
            +
                  def hashify_models_in(obj)
         | 
| 19 | 
            +
                    if(obj.instance_of? Hash)
         | 
| 20 | 
            +
                      hashify_models_in_hash(obj)
         | 
| 21 | 
            +
                    elsif(obj.instance_of? Array)
         | 
| 22 | 
            +
                      hashify_models_in_array(obj)
         | 
| 23 | 
            +
                    elsif(obj.kind_of? TinyMongo::Model)
         | 
| 24 | 
            +
                      obj.to_hash
         | 
| 25 | 
            +
                    else
         | 
| 26 | 
            +
                      obj
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                  
         | 
| 30 | 
            +
                  def hashify_models_in_array(array)
         | 
| 31 | 
            +
                    new_array = []
         | 
| 32 | 
            +
                    array.each do |value|
         | 
| 33 | 
            +
                      new_array << hashify_models_in(value)
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
                    new_array
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                  
         | 
| 38 | 
            +
                  def hashify_models_in_hash(hash)
         | 
| 39 | 
            +
                    new_hash = {}
         | 
| 40 | 
            +
                    hash.each_pair do |key,value|
         | 
| 41 | 
            +
                      key_s = key.to_s
         | 
| 42 | 
            +
                      if(key_s == '_id')
         | 
| 43 | 
            +
                        new_hash[key_s] = bson_object_id(value)
         | 
| 44 | 
            +
                      else
         | 
| 45 | 
            +
                        new_hash[key_s] = hashify_models_in(value)
         | 
| 46 | 
            +
                      end
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                    new_hash
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                  
         | 
| 51 | 
            +
                  def bson_object_id(id)
         | 
| 52 | 
            +
                    if(id.instance_of? BSON::ObjectID)
         | 
| 53 | 
            +
                      id
         | 
| 54 | 
            +
                    elsif(id.instance_of? String)
         | 
| 55 | 
            +
                      BSON::ObjectID(id)
         | 
| 56 | 
            +
                    else
         | 
| 57 | 
            +
                      BSON::ObjectID(id.to_s)
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
            end
         | 
| @@ -0,0 +1,276 @@ | |
| 1 | 
            +
            module TinyMongo
         | 
| 2 | 
            +
              class Model
         | 
| 3 | 
            +
                class << self
         | 
| 4 | 
            +
                  def mongo_key(*args)
         | 
| 5 | 
            +
                    args.each do |key_name|
         | 
| 6 | 
            +
                      if([Symbol, String].include? key_name.class)
         | 
| 7 | 
            +
                        key_name_s = key_name.to_s
         | 
| 8 | 
            +
                        key_name_sym = key_name.to_sym
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                        define_method(key_name_sym) do
         | 
| 11 | 
            +
                          instance_variable_get("@_tinymongo_hash")[key_name_s]
         | 
| 12 | 
            +
                        end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                        define_method("#{key_name_s}=".to_sym) do |val|
         | 
| 15 | 
            +
                          instance_variable_get("@_tinymongo_hash")[key_name_s] = val
         | 
| 16 | 
            +
                        end
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                  
         | 
| 21 | 
            +
                  def mongo_collection(name)
         | 
| 22 | 
            +
                    @_tinymongo_collection_name = name.to_s
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                  
         | 
| 25 | 
            +
                  def db
         | 
| 26 | 
            +
                    TinyMongo.db
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def collection
         | 
| 30 | 
            +
                    if @_tinymongo_collection_name
         | 
| 31 | 
            +
                      TinyMongo.db[@_tinymongo_collection_name]
         | 
| 32 | 
            +
                    elsif(defined?(Rails))
         | 
| 33 | 
            +
                      TinyMongo.db[self.to_s.gsub('/','_').tableize]
         | 
| 34 | 
            +
                    else
         | 
| 35 | 
            +
                      TinyMongo.db[self.to_s]
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                  
         | 
| 39 | 
            +
                  def find(*args)
         | 
| 40 | 
            +
                    new_args = []
         | 
| 41 | 
            +
                    args.each do |arg|
         | 
| 42 | 
            +
                      new_args << Helper.hashify_models_in(arg)
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                    collection.find(*new_args)
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  def find_one(*args)
         | 
| 48 | 
            +
                    if([BSON::ObjectID, String].include? args[0].class)
         | 
| 49 | 
            +
                      self.new(collection.find_one({'_id' => Helper.bson_object_id(args[0])}))
         | 
| 50 | 
            +
                    else
         | 
| 51 | 
            +
                      self.new(collection.find_one(*args))
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  def create(hash)
         | 
| 56 | 
            +
                    obj = self.new(hash)
         | 
| 57 | 
            +
                    obj.save
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
                  
         | 
| 60 | 
            +
                  def delete(id)
         | 
| 61 | 
            +
                    collection.remove({ '_id' => Helper.bson_object_id(id)})
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def delete_all
         | 
| 65 | 
            +
                    collection.drop
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
                  
         | 
| 68 | 
            +
                  def destroy_all
         | 
| 69 | 
            +
                    delete_all
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  def count
         | 
| 73 | 
            +
                    collection.count
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
                
         | 
| 77 | 
            +
                def _id
         | 
| 78 | 
            +
                  @_tinymongo_hash['_id']
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
                
         | 
| 81 | 
            +
                def _id=(val)
         | 
| 82 | 
            +
                  @_tinymongo_hash['_id'] = Helper.bson_object_id(val)
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
              
         | 
| 85 | 
            +
                def initialize(hash={})
         | 
| 86 | 
            +
                  @_tinymongo_hash = Helper.stringify_keys_in_hash(hash)
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
                
         | 
| 89 | 
            +
                def db
         | 
| 90 | 
            +
                  self.db
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
              
         | 
| 93 | 
            +
                def collection
         | 
| 94 | 
            +
                  self.class.collection
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
                
         | 
| 97 | 
            +
                def to_hash
         | 
| 98 | 
            +
                  @_tinymongo_hash.clone
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              
         | 
| 101 | 
            +
                def save(v=true)
         | 
| 102 | 
            +
                  
         | 
| 103 | 
            +
                  if((v && (defined?(Rails) && self.valid?) || (!defined?(Rails))) || (!v))
         | 
| 104 | 
            +
                    begin
         | 
| 105 | 
            +
                      obj = create_or_update
         | 
| 106 | 
            +
                      return obj
         | 
| 107 | 
            +
                    rescue
         | 
| 108 | 
            +
                      return false
         | 
| 109 | 
            +
                    end
         | 
| 110 | 
            +
                  else
         | 
| 111 | 
            +
                    return false
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
                end
         | 
| 114 | 
            +
              
         | 
| 115 | 
            +
                def update_attribute(name, value)
         | 
| 116 | 
            +
                  send(name.to_s + '=', value)
         | 
| 117 | 
            +
                  save(false)
         | 
| 118 | 
            +
                end
         | 
| 119 | 
            +
              
         | 
| 120 | 
            +
                def update_attributes(hash)
         | 
| 121 | 
            +
                  hash.each_pair { |key, value| send(key.to_s + '=', value) }
         | 
| 122 | 
            +
                  save
         | 
| 123 | 
            +
                end
         | 
| 124 | 
            +
              
         | 
| 125 | 
            +
                def delete
         | 
| 126 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 127 | 
            +
                    collection.remove({ '_id' => @_tinymongo_hash['_id'] })
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
              
         | 
| 131 | 
            +
                def destroy
         | 
| 132 | 
            +
                  delete
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
              
         | 
| 135 | 
            +
                def destroy(id)
         | 
| 136 | 
            +
                  delete(id)
         | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
              
         | 
| 139 | 
            +
                def inc(hash)
         | 
| 140 | 
            +
                  hash.each_pair do |key, value|
         | 
| 141 | 
            +
                    key = key.to_s
         | 
| 142 | 
            +
                    
         | 
| 143 | 
            +
                    if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].kind_of? Numeric))
         | 
| 144 | 
            +
                      send(key + '=', (send(key) + value))
         | 
| 145 | 
            +
                    else
         | 
| 146 | 
            +
                      send(key + '=', value)
         | 
| 147 | 
            +
                    end
         | 
| 148 | 
            +
                  end
         | 
| 149 | 
            +
                
         | 
| 150 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 151 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$inc' => Helper.hashify_models_in_hash(hash) })
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
              
         | 
| 155 | 
            +
                def set(hash)
         | 
| 156 | 
            +
                  hash.each_pair { |key, value| send(key.to_s + '=', value) }
         | 
| 157 | 
            +
                
         | 
| 158 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 159 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$set' => Helper.hashify_models_in_hash(hash) })
         | 
| 160 | 
            +
                  end
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
              
         | 
| 163 | 
            +
                def unset(hash)
         | 
| 164 | 
            +
                  hash.each_key do |key| 
         | 
| 165 | 
            +
                    @_tinymongo_hash.delete(key.to_s)
         | 
| 166 | 
            +
                  end
         | 
| 167 | 
            +
                
         | 
| 168 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 169 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$unset' => Helper.hashify_models_in_hash(hash) })
         | 
| 170 | 
            +
                  end
         | 
| 171 | 
            +
                end
         | 
| 172 | 
            +
              
         | 
| 173 | 
            +
                def push(hash)
         | 
| 174 | 
            +
                  hash.each_pair do |key, value|
         | 
| 175 | 
            +
                    key = key.to_s
         | 
| 176 | 
            +
                    
         | 
| 177 | 
            +
                    if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
         | 
| 178 | 
            +
                      send(key) << value
         | 
| 179 | 
            +
                    else
         | 
| 180 | 
            +
                      send(key + '=', value)
         | 
| 181 | 
            +
                    end
         | 
| 182 | 
            +
                  end
         | 
| 183 | 
            +
                
         | 
| 184 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 185 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$push' => Helper.hashify_models_in_hash(hash) })
         | 
| 186 | 
            +
                  end
         | 
| 187 | 
            +
                end
         | 
| 188 | 
            +
              
         | 
| 189 | 
            +
                def push_all(hash)
         | 
| 190 | 
            +
                  hash.each_pair do |key, value|
         | 
| 191 | 
            +
                    key = key.to_s
         | 
| 192 | 
            +
                    
         | 
| 193 | 
            +
                    if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
         | 
| 194 | 
            +
                      value.each { |v| send(key) << value }
         | 
| 195 | 
            +
                    else
         | 
| 196 | 
            +
                      send(key + '=', value)
         | 
| 197 | 
            +
                    end
         | 
| 198 | 
            +
                  end
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 201 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pushAll' => Helper.hashify_models_in_hash(hash) })
         | 
| 202 | 
            +
                  end
         | 
| 203 | 
            +
                end
         | 
| 204 | 
            +
              
         | 
| 205 | 
            +
                def add_to_set(hash)
         | 
| 206 | 
            +
                  hash.each_pair do |key, value|
         | 
| 207 | 
            +
                    key = key.to_s
         | 
| 208 | 
            +
                    
         | 
| 209 | 
            +
                    if(!(@_tinymongo_hash[key].include? value) && (@_tinymongo_hash[key].instance_of? Array))
         | 
| 210 | 
            +
                      send(key) << value
         | 
| 211 | 
            +
                    end
         | 
| 212 | 
            +
                  end
         | 
| 213 | 
            +
                
         | 
| 214 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 215 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$addToSet' => Helper.hashify_models_in_hash(hash) })
         | 
| 216 | 
            +
                  end
         | 
| 217 | 
            +
                end
         | 
| 218 | 
            +
              
         | 
| 219 | 
            +
                def pop(hash)
         | 
| 220 | 
            +
                  hash.each_pair do |key, value|
         | 
| 221 | 
            +
                    key = key.to_s
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                    if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
         | 
| 224 | 
            +
                      if(value == 1)
         | 
| 225 | 
            +
                        send(key).pop
         | 
| 226 | 
            +
                      elsif(value == -1)
         | 
| 227 | 
            +
                        send(key).shift
         | 
| 228 | 
            +
                      end
         | 
| 229 | 
            +
                    end
         | 
| 230 | 
            +
                  end
         | 
| 231 | 
            +
                
         | 
| 232 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 233 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pop' => Helper.hashify_models_in_hash(hash) })
         | 
| 234 | 
            +
                  end
         | 
| 235 | 
            +
                end
         | 
| 236 | 
            +
              
         | 
| 237 | 
            +
                def pull(hash)
         | 
| 238 | 
            +
                  hash.each_pair do |key, value|
         | 
| 239 | 
            +
                    key = key.to_s
         | 
| 240 | 
            +
                    if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
         | 
| 241 | 
            +
                      send(key).delete_if { |v| v == value }
         | 
| 242 | 
            +
                    end
         | 
| 243 | 
            +
                  end
         | 
| 244 | 
            +
                
         | 
| 245 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 246 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pull' => Helper.hashify_models_in_hash(hash) })
         | 
| 247 | 
            +
                  end
         | 
| 248 | 
            +
                end
         | 
| 249 | 
            +
              
         | 
| 250 | 
            +
                def pull_all(hash)
         | 
| 251 | 
            +
                  hash.each_pair do |key, value|
         | 
| 252 | 
            +
                    key = key.to_s
         | 
| 253 | 
            +
                    if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
         | 
| 254 | 
            +
                      value.each do |v|
         | 
| 255 | 
            +
                        send(key).delete_if { |w| w == v }
         | 
| 256 | 
            +
                      end
         | 
| 257 | 
            +
                    end
         | 
| 258 | 
            +
                  end
         | 
| 259 | 
            +
                
         | 
| 260 | 
            +
                  if(@_tinymongo_hash['_id'])
         | 
| 261 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pullAll' => Helper.hashify_models_in_hash(hash) })
         | 
| 262 | 
            +
                  end
         | 
| 263 | 
            +
                end
         | 
| 264 | 
            +
              
         | 
| 265 | 
            +
                protected  
         | 
| 266 | 
            +
                def create_or_update
         | 
| 267 | 
            +
                  if(@_tinymongo_hash['_id'].nil?) # new 
         | 
| 268 | 
            +
                    @_tinymongo_hash['_id'] = collection.save(@_tinymongo_hash)
         | 
| 269 | 
            +
                  else # update
         | 
| 270 | 
            +
                    collection.update({ '_id' => @_tinymongo_hash['_id'] }, @_tinymongo_hash)
         | 
| 271 | 
            +
                  end
         | 
| 272 | 
            +
                  return self
         | 
| 273 | 
            +
                end
         | 
| 274 | 
            +
             | 
| 275 | 
            +
              end
         | 
| 276 | 
            +
            end
         | 
    
        data/lib/tinymongo.rb
    ADDED
    
    | @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            require 'mongo'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module TinyMongo
         | 
| 4 | 
            +
              class << self
         | 
| 5 | 
            +
                def configure(config)
         | 
| 6 | 
            +
                  config = Helper.stringify_keys_in_hash(config)
         | 
| 7 | 
            +
                
         | 
| 8 | 
            +
                  @host = config['host'] || 'localhost'
         | 
| 9 | 
            +
                  @port = config['port']
         | 
| 10 | 
            +
                  @options = config['options'] || {}
         | 
| 11 | 
            +
                  @database = config['database'] || 'mongo'
         | 
| 12 | 
            +
                  @username = config['username']
         | 
| 13 | 
            +
                  @password = config['password']
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
                def db
         | 
| 17 | 
            +
                  @db
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def connect
         | 
| 21 | 
            +
                  if defined?(PhusionPassenger) && @connection
         | 
| 22 | 
            +
                    PhusionPassenger.on_event(:starting_worker_process) do |forked|
         | 
| 23 | 
            +
                      @connection.connect_to_master if forked
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                    
         | 
| 27 | 
            +
                  if(@connection.nil?)
         | 
| 28 | 
            +
                    @connection = Mongo::Connection.new(@host, @port, @options)
         | 
| 29 | 
            +
                    @db = @connection.db(@database)
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    if(@username && @password) 
         | 
| 32 | 
            +
                      auth = db.authenticate(@username, @password)
         | 
| 33 | 
            +
                      return nil unless(auth)
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
                  
         | 
| 37 | 
            +
                  true
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            require 'tinymongo/helper'
         | 
| 43 | 
            +
            require 'tinymongo/model'
         | 
    
        data/test/test_helper.rb
    ADDED
    
    
| @@ -0,0 +1,232 @@ | |
| 1 | 
            +
            $: << (File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
         | 
| 2 | 
            +
            require 'test_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            TinyMongo.configure({:host => 'localhost', :database => 'tinymongo_test'})
         | 
| 5 | 
            +
            TinyMongo.connect
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            class Dummy < TinyMongo::Model
         | 
| 8 | 
            +
              mongo_collection :dummies
         | 
| 9 | 
            +
              mongo_key :foo
         | 
| 10 | 
            +
              mongo_key :bar
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            class TinyMongoTest < Test::Unit::TestCase
         | 
| 14 | 
            +
              def setup
         | 
| 15 | 
            +
                TinyMongo.db['dummies'].drop()
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              def test_helper_stringify_keys_in_hash
         | 
| 19 | 
            +
                hash = {:foo => 'hello', :bar => 'world'}
         | 
| 20 | 
            +
                assert_equal({'foo' => 'hello', 'bar' => 'world'}, TinyMongo::Helper.stringify_keys_in_hash(hash))
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def test_helper_symbolify_keys_in_hash
         | 
| 24 | 
            +
                hash = {'foo' => 'hello', 'bar' => 'world'}
         | 
| 25 | 
            +
                assert_equal({:foo => 'hello', :bar => 'world'}, TinyMongo::Helper.symbolify_keys_in_hash(hash))
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
              def test_helper_hashify_models_in_hash
         | 
| 29 | 
            +
                obj1 = Dummy.new(:foo => 'hello', :bar => 'world')
         | 
| 30 | 
            +
                obj2 = Dummy.new(:foo => 'love', :bar => 'ek')
         | 
| 31 | 
            +
                hash = { :obj1 => obj1, :obj2 => obj2, :hash => { :obj => obj1 }, :array => [obj1, obj2, 'yay'], :val => 'pete' }
         | 
| 32 | 
            +
                assert_equal({ 'obj1'  => { 'foo' => 'hello', 'bar' => 'world' }, 
         | 
| 33 | 
            +
                               'obj2'  => { 'foo' => 'love', 'bar' => 'ek' },
         | 
| 34 | 
            +
                               'hash'  => { 'obj' => { 'foo' => 'hello', 'bar' => 'world' } },
         | 
| 35 | 
            +
                               'array' => [ { 'foo' => 'hello', 'bar' => 'world' }, { 'foo' => 'love', 'bar' => 'ek' }, 'yay' ],
         | 
| 36 | 
            +
                               'val'   => 'pete' },
         | 
| 37 | 
            +
                             TinyMongo::Helper.hashify_models_in_hash(hash))
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
              
         | 
| 40 | 
            +
              def test_helper_hashify_models_in_array
         | 
| 41 | 
            +
                obj1 = Dummy.new(:foo => 'hello', :bar => 'world')
         | 
| 42 | 
            +
                obj2 = Dummy.new(:foo => 'love', :bar => 'ek')
         | 
| 43 | 
            +
                array = [ obj1, obj2, { :obj => obj1 }, [obj1, obj2, 'yay'], 'pete' ]
         | 
| 44 | 
            +
                assert_equal([ { 'foo' => 'hello', 'bar' => 'world' }, 
         | 
| 45 | 
            +
                               { 'foo' => 'love', 'bar' => 'ek' },
         | 
| 46 | 
            +
                               { 'obj' => { 'foo' => 'hello', 'bar' => 'world' } },
         | 
| 47 | 
            +
                               [ { 'foo' => 'hello', 'bar' => 'world' }, { 'foo' => 'love', 'bar' => 'ek' }, 'yay' ],
         | 
| 48 | 
            +
                               'pete' ],
         | 
| 49 | 
            +
                             TinyMongo::Helper.hashify_models_in_array(array))
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
              
         | 
| 52 | 
            +
              def test_mongo_key
         | 
| 53 | 
            +
                m = Dummy.new('foo' => 'hello')
         | 
| 54 | 
            +
                m.bar = 'world'
         | 
| 55 | 
            +
                
         | 
| 56 | 
            +
                assert_equal 'hello', m.foo
         | 
| 57 | 
            +
                assert_equal 'world', m.bar
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              def test_save_new
         | 
| 61 | 
            +
                hash = {'foo' => 'hello', 'bar' => 'world'}
         | 
| 62 | 
            +
                
         | 
| 63 | 
            +
                obj = Dummy.new(hash) 
         | 
| 64 | 
            +
                obj.save # save to db
         | 
| 65 | 
            +
                hash['_id'] = obj._id # add _id to hash
         | 
| 66 | 
            +
                result = TinyMongo.db['dummies'].find_one({'_id' => obj._id})
         | 
| 67 | 
            +
                assert_equal TinyMongo::Helper.stringify_keys_in_hash(hash), result # compare
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
              
         | 
| 70 | 
            +
              def test_create
         | 
| 71 | 
            +
                hash = {'foo' => 'hello', 'bar' => 'world'}
         | 
| 72 | 
            +
                
         | 
| 73 | 
            +
                obj = Dummy.create(hash) # save to db
         | 
| 74 | 
            +
                hash['_id'] = obj._id # add _id to hash
         | 
| 75 | 
            +
                
         | 
| 76 | 
            +
                result = TinyMongo.db['dummies'].find_one({'_id' => obj._id})
         | 
| 77 | 
            +
                assert_equal TinyMongo::Helper.stringify_keys_in_hash(hash), result, result # compare
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
              def test_save_update
         | 
| 81 | 
            +
                obj = Dummy.create('foo' => 'hello') 
         | 
| 82 | 
            +
                obj.foo = 'bye'
         | 
| 83 | 
            +
                obj.save
         | 
| 84 | 
            +
                
         | 
| 85 | 
            +
                result = TinyMongo.db['dummies'].find_one({'_id' => obj._id})
         | 
| 86 | 
            +
                assert_equal 'bye', result['foo']
         | 
| 87 | 
            +
              end
         | 
| 88 | 
            +
              
         | 
| 89 | 
            +
              def test_update_attribute
         | 
| 90 | 
            +
                obj = Dummy.create('foo' => 'hello') 
         | 
| 91 | 
            +
                obj.update_attribute('foo', 'bye')
         | 
| 92 | 
            +
                
         | 
| 93 | 
            +
                result = TinyMongo.db['dummies'].find_one({'_id' => obj._id})
         | 
| 94 | 
            +
                assert_equal 'bye', result['foo']
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
              
         | 
| 97 | 
            +
              def test_update_attributes
         | 
| 98 | 
            +
                obj = Dummy.create('foo' => 'hello', 'bar' => 'world') 
         | 
| 99 | 
            +
                obj.update_attributes({'foo' => 'world', 'bar' => 'hello'})
         | 
| 100 | 
            +
                
         | 
| 101 | 
            +
                result = TinyMongo.db['dummies'].find_one({'_id' => obj._id})
         | 
| 102 | 
            +
                assert_equal 'world', result['foo']
         | 
| 103 | 
            +
                assert_equal 'hello', result['bar']
         | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
              
         | 
| 106 | 
            +
              def test_find_one_using_id
         | 
| 107 | 
            +
                o_id = TinyMongo.db['dummies'].save({'foo' => 'hello'})
         | 
| 108 | 
            +
                
         | 
| 109 | 
            +
                found = Dummy.find_one(o_id)
         | 
| 110 | 
            +
                
         | 
| 111 | 
            +
                assert_equal 'hello', found.foo
         | 
| 112 | 
            +
                assert_equal o_id, found._id
         | 
| 113 | 
            +
              end
         | 
| 114 | 
            +
              
         | 
| 115 | 
            +
              def test_find_one_using_id_string
         | 
| 116 | 
            +
                o_id = TinyMongo.db['dummies'].save({'foo' => 'hello'})
         | 
| 117 | 
            +
                
         | 
| 118 | 
            +
                found = Dummy.find_one(o_id.to_s)
         | 
| 119 | 
            +
                
         | 
| 120 | 
            +
                assert_equal 'hello', found.foo
         | 
| 121 | 
            +
                assert_equal o_id, found._id
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              def test_find_one_using_hash
         | 
| 125 | 
            +
                o_id = TinyMongo.db['dummies'].save({'foo' => 'hello', 'bar' => 'world'})
         | 
| 126 | 
            +
                
         | 
| 127 | 
            +
                found = Dummy.find_one({'foo' => 'hello'})
         | 
| 128 | 
            +
                
         | 
| 129 | 
            +
                assert_equal 'hello', found.foo
         | 
| 130 | 
            +
                assert_equal 'world', found.bar
         | 
| 131 | 
            +
                assert_equal o_id, found._id
         | 
| 132 | 
            +
              end
         | 
| 133 | 
            +
              
         | 
| 134 | 
            +
              def test_count
         | 
| 135 | 
            +
                Dummy.create('foo' => 'hello')
         | 
| 136 | 
            +
                Dummy.create('foo' => 'hello')
         | 
| 137 | 
            +
                Dummy.create('foo' => 'hello')
         | 
| 138 | 
            +
                
         | 
| 139 | 
            +
                assert_equal 3, Dummy.count
         | 
| 140 | 
            +
              end
         | 
| 141 | 
            +
              
         | 
| 142 | 
            +
              def test_delete
         | 
| 143 | 
            +
                obj = Dummy.create('foo' => 'hello')
         | 
| 144 | 
            +
                assert_equal 1, Dummy.count
         | 
| 145 | 
            +
                obj.delete
         | 
| 146 | 
            +
                assert_equal 0, Dummy.count
         | 
| 147 | 
            +
              end
         | 
| 148 | 
            +
              
         | 
| 149 | 
            +
              def test_delete_using_id
         | 
| 150 | 
            +
                obj = Dummy.create('foo' => 'hello')
         | 
| 151 | 
            +
                assert_equal 1, Dummy.count
         | 
| 152 | 
            +
                Dummy.delete(obj._id)
         | 
| 153 | 
            +
                assert_equal 0, Dummy.count
         | 
| 154 | 
            +
              end
         | 
| 155 | 
            +
              
         | 
| 156 | 
            +
              def test_delete_all
         | 
| 157 | 
            +
                Dummy.create('foo' => 'hello')
         | 
| 158 | 
            +
                Dummy.create('foo' => 'hello')
         | 
| 159 | 
            +
                Dummy.create('foo' => 'hello')
         | 
| 160 | 
            +
                assert_equal 3, Dummy.count
         | 
| 161 | 
            +
                Dummy.delete_all
         | 
| 162 | 
            +
                assert_equal 0, Dummy.count
         | 
| 163 | 
            +
              end
         | 
| 164 | 
            +
              
         | 
| 165 | 
            +
              def test_inc
         | 
| 166 | 
            +
                d = Dummy.create('foo' => 1)
         | 
| 167 | 
            +
                assert_equal 1, TinyMongo.db['dummies'].find_one()['foo']
         | 
| 168 | 
            +
                d.inc({'foo' => 1})
         | 
| 169 | 
            +
                assert_equal 2, TinyMongo.db['dummies'].find_one()['foo']
         | 
| 170 | 
            +
              end
         | 
| 171 | 
            +
             | 
| 172 | 
            +
              def test_set
         | 
| 173 | 
            +
                d = Dummy.create('foo' => 'hello')
         | 
| 174 | 
            +
                assert_equal 'hello', TinyMongo.db['dummies'].find_one()['foo']
         | 
| 175 | 
            +
                d.set({'foo' => 'bye'})
         | 
| 176 | 
            +
                assert_equal 'bye', TinyMongo.db['dummies'].find_one()['foo']
         | 
| 177 | 
            +
              end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
              def test_unset
         | 
| 180 | 
            +
                d = Dummy.create('foo' => 'hello')
         | 
| 181 | 
            +
                assert_equal 'hello', TinyMongo.db['dummies'].find_one()['foo']
         | 
| 182 | 
            +
                d.unset({'foo' => 1})
         | 
| 183 | 
            +
                assert_equal nil, TinyMongo.db['dummies'].find_one()['foo']
         | 
| 184 | 
            +
              end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
              def test_push
         | 
| 187 | 
            +
                d = Dummy.create('foo' => [])
         | 
| 188 | 
            +
                assert_equal [], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 189 | 
            +
                d.push({'foo' => 'hello'})
         | 
| 190 | 
            +
                assert_equal ['hello'], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 191 | 
            +
              end
         | 
| 192 | 
            +
             | 
| 193 | 
            +
              def test_push_all
         | 
| 194 | 
            +
                d = Dummy.create('foo' => [])
         | 
| 195 | 
            +
                assert_equal [], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 196 | 
            +
                d.push_all({'foo' => ['hello','world']})
         | 
| 197 | 
            +
                assert_equal ['hello', 'world'], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 198 | 
            +
              end
         | 
| 199 | 
            +
             | 
| 200 | 
            +
              def test_add_to_set
         | 
| 201 | 
            +
                d = Dummy.create('foo' => [1,2,3,4])
         | 
| 202 | 
            +
                assert_equal [1,2,3,4], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 203 | 
            +
                d.add_to_set({'foo' => 1})
         | 
| 204 | 
            +
                assert_equal [1,2,3,4], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 205 | 
            +
                d.add_to_set({'foo' => 5})
         | 
| 206 | 
            +
                assert_equal [1,2,3,4,5], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 207 | 
            +
              end
         | 
| 208 | 
            +
             | 
| 209 | 
            +
              def test_pop
         | 
| 210 | 
            +
                d = Dummy.create('foo' => [1,2,3,4])
         | 
| 211 | 
            +
                assert_equal [1,2,3,4], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 212 | 
            +
                d.pop({'foo' => 1})
         | 
| 213 | 
            +
                assert_equal [1,2,3], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 214 | 
            +
                d.pop({'foo' => -1})
         | 
| 215 | 
            +
                assert_equal [2,3], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 216 | 
            +
              end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              def test_pull
         | 
| 219 | 
            +
                d = Dummy.create('foo' => [1,1,2,2,2,3])
         | 
| 220 | 
            +
                assert_equal [1,1,2,2,2,3], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 221 | 
            +
                d.pull({'foo' => 2})
         | 
| 222 | 
            +
                assert_equal [1,1,3], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 223 | 
            +
              end
         | 
| 224 | 
            +
             | 
| 225 | 
            +
              def test_pull_all
         | 
| 226 | 
            +
                d = Dummy.create('foo' => [1,1,2,2,2,3])
         | 
| 227 | 
            +
                assert_equal [1,1,2,2,2,3], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 228 | 
            +
                d.pull_all({'foo' => [1,2]})
         | 
| 229 | 
            +
                assert_equal [3], TinyMongo.db['dummies'].find_one()['foo']
         | 
| 230 | 
            +
              end
         | 
| 231 | 
            +
              
         | 
| 232 | 
            +
            end
         | 
    
        data/tinymongo.gemspec
    ADDED
    
    | @@ -0,0 +1,61 @@ | |
| 1 | 
            +
            # Generated by jeweler
         | 
| 2 | 
            +
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 | 
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         | 
| 4 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |s|
         | 
| 7 | 
            +
              s.name = %q{tinymongo}
         | 
| 8 | 
            +
              s.version = "0.1.0"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 | 
            +
              s.authors = ["Peter Jihoon Kim"]
         | 
| 12 | 
            +
              s.date = %q{2010-07-21}
         | 
| 13 | 
            +
              s.description = %q{Simple MongoDB wrapper}
         | 
| 14 | 
            +
              s.email = %q{raingrove@gmail.com}
         | 
| 15 | 
            +
              s.extra_rdoc_files = [
         | 
| 16 | 
            +
                "LICENSE",
         | 
| 17 | 
            +
                 "README.rdoc"
         | 
| 18 | 
            +
              ]
         | 
| 19 | 
            +
              s.files = [
         | 
| 20 | 
            +
                "LICENSE",
         | 
| 21 | 
            +
                 "README.rdoc",
         | 
| 22 | 
            +
                 "Rakefile",
         | 
| 23 | 
            +
                 "VERSION",
         | 
| 24 | 
            +
                 "init.rb",
         | 
| 25 | 
            +
                 "lib/generators/USAGE",
         | 
| 26 | 
            +
                 "lib/generators/templates/tinymongo.yml.erb",
         | 
| 27 | 
            +
                 "lib/generators/tinymongo_generator.rb",
         | 
| 28 | 
            +
                 "lib/tinymongo.rb",
         | 
| 29 | 
            +
                 "lib/tinymongo/helper.rb",
         | 
| 30 | 
            +
                 "lib/tinymongo/model.rb",
         | 
| 31 | 
            +
                 "test/test_helper.rb",
         | 
| 32 | 
            +
                 "test/test_tinymongo.rb",
         | 
| 33 | 
            +
                 "tinymongo.gemspec"
         | 
| 34 | 
            +
              ]
         | 
| 35 | 
            +
              s.homepage = %q{http://github.com/petejkim/tinymongo}
         | 
| 36 | 
            +
              s.rdoc_options = ["--charset=UTF-8"]
         | 
| 37 | 
            +
              s.require_paths = ["lib"]
         | 
| 38 | 
            +
              s.rubygems_version = %q{1.3.7}
         | 
| 39 | 
            +
              s.summary = %q{Simple MongoDB wrapper}
         | 
| 40 | 
            +
              s.test_files = [
         | 
| 41 | 
            +
                "test/test_helper.rb",
         | 
| 42 | 
            +
                 "test/test_tinymongo.rb"
         | 
| 43 | 
            +
              ]
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              if s.respond_to? :specification_version then
         | 
| 46 | 
            +
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         | 
| 47 | 
            +
                s.specification_version = 3
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 50 | 
            +
                  s.add_runtime_dependency(%q<mongo>, [">= 0"])
         | 
| 51 | 
            +
                  s.add_runtime_dependency(%q<bson>, [">= 0"])
         | 
| 52 | 
            +
                else
         | 
| 53 | 
            +
                  s.add_dependency(%q<mongo>, [">= 0"])
         | 
| 54 | 
            +
                  s.add_dependency(%q<bson>, [">= 0"])
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
              else
         | 
| 57 | 
            +
                s.add_dependency(%q<mongo>, [">= 0"])
         | 
| 58 | 
            +
                s.add_dependency(%q<bson>, [">= 0"])
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
            end
         | 
| 61 | 
            +
             | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,104 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: tinymongo
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              prerelease: false
         | 
| 5 | 
            +
              segments: 
         | 
| 6 | 
            +
              - 0
         | 
| 7 | 
            +
              - 1
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              version: 0.1.0
         | 
| 10 | 
            +
            platform: ruby
         | 
| 11 | 
            +
            authors: 
         | 
| 12 | 
            +
            - Peter Jihoon Kim
         | 
| 13 | 
            +
            autorequire: 
         | 
| 14 | 
            +
            bindir: bin
         | 
| 15 | 
            +
            cert_chain: []
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            date: 2010-07-21 00:00:00 +09:00
         | 
| 18 | 
            +
            default_executable: 
         | 
| 19 | 
            +
            dependencies: 
         | 
| 20 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 21 | 
            +
              name: mongo
         | 
| 22 | 
            +
              prerelease: false
         | 
| 23 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 24 | 
            +
                none: false
         | 
| 25 | 
            +
                requirements: 
         | 
| 26 | 
            +
                - - ">="
         | 
| 27 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 28 | 
            +
                    segments: 
         | 
| 29 | 
            +
                    - 0
         | 
| 30 | 
            +
                    version: "0"
         | 
| 31 | 
            +
              type: :runtime
         | 
| 32 | 
            +
              version_requirements: *id001
         | 
| 33 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 34 | 
            +
              name: bson
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 37 | 
            +
                none: false
         | 
| 38 | 
            +
                requirements: 
         | 
| 39 | 
            +
                - - ">="
         | 
| 40 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 41 | 
            +
                    segments: 
         | 
| 42 | 
            +
                    - 0
         | 
| 43 | 
            +
                    version: "0"
         | 
| 44 | 
            +
              type: :runtime
         | 
| 45 | 
            +
              version_requirements: *id002
         | 
| 46 | 
            +
            description: Simple MongoDB wrapper
         | 
| 47 | 
            +
            email: raingrove@gmail.com
         | 
| 48 | 
            +
            executables: []
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            extensions: []
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            extra_rdoc_files: 
         | 
| 53 | 
            +
            - LICENSE
         | 
| 54 | 
            +
            - README.rdoc
         | 
| 55 | 
            +
            files: 
         | 
| 56 | 
            +
            - LICENSE
         | 
| 57 | 
            +
            - README.rdoc
         | 
| 58 | 
            +
            - Rakefile
         | 
| 59 | 
            +
            - VERSION
         | 
| 60 | 
            +
            - init.rb
         | 
| 61 | 
            +
            - lib/generators/USAGE
         | 
| 62 | 
            +
            - lib/generators/templates/tinymongo.yml.erb
         | 
| 63 | 
            +
            - lib/generators/tinymongo_generator.rb
         | 
| 64 | 
            +
            - lib/tinymongo.rb
         | 
| 65 | 
            +
            - lib/tinymongo/helper.rb
         | 
| 66 | 
            +
            - lib/tinymongo/model.rb
         | 
| 67 | 
            +
            - test/test_helper.rb
         | 
| 68 | 
            +
            - test/test_tinymongo.rb
         | 
| 69 | 
            +
            - tinymongo.gemspec
         | 
| 70 | 
            +
            has_rdoc: true
         | 
| 71 | 
            +
            homepage: http://github.com/petejkim/tinymongo
         | 
| 72 | 
            +
            licenses: []
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            post_install_message: 
         | 
| 75 | 
            +
            rdoc_options: 
         | 
| 76 | 
            +
            - --charset=UTF-8
         | 
| 77 | 
            +
            require_paths: 
         | 
| 78 | 
            +
            - lib
         | 
| 79 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 80 | 
            +
              none: false
         | 
| 81 | 
            +
              requirements: 
         | 
| 82 | 
            +
              - - ">="
         | 
| 83 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 84 | 
            +
                  segments: 
         | 
| 85 | 
            +
                  - 0
         | 
| 86 | 
            +
                  version: "0"
         | 
| 87 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 88 | 
            +
              none: false
         | 
| 89 | 
            +
              requirements: 
         | 
| 90 | 
            +
              - - ">="
         | 
| 91 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 92 | 
            +
                  segments: 
         | 
| 93 | 
            +
                  - 0
         | 
| 94 | 
            +
                  version: "0"
         | 
| 95 | 
            +
            requirements: []
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            rubyforge_project: 
         | 
| 98 | 
            +
            rubygems_version: 1.3.7
         | 
| 99 | 
            +
            signing_key: 
         | 
| 100 | 
            +
            specification_version: 3
         | 
| 101 | 
            +
            summary: Simple MongoDB wrapper
         | 
| 102 | 
            +
            test_files: 
         | 
| 103 | 
            +
            - test/test_helper.rb
         | 
| 104 | 
            +
            - test/test_tinymongo.rb
         |