mongo_persist 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.lre ADDED
@@ -0,0 +1,2 @@
1
+ load "lib/mongo_persist.rb"
2
+
data/Gemfile ADDED
@@ -0,0 +1,29 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", ">= 1.0.0"
12
+ gem "jeweler", "~> 1.8.4"
13
+
14
+ gem 'guard'
15
+ gem 'guard-rspec'
16
+ gem 'guard-spork'
17
+
18
+ gem 'lre'
19
+
20
+ gem 'rr'
21
+ end
22
+
23
+ gem 'mharris_ext'
24
+ gem "mongo"
25
+ gem 'andand'
26
+
27
+ gem 'activesupport'
28
+ gem 'bson_ext'
29
+ gem 'mongo_scope'
data/Gemfile.lock ADDED
@@ -0,0 +1,93 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.2.13)
5
+ i18n (= 0.6.1)
6
+ multi_json (~> 1.0)
7
+ andand (1.3.3)
8
+ bson (1.7.0)
9
+ bson_ext (1.7.0)
10
+ bson (~> 1.7.0)
11
+ childprocess (0.3.9)
12
+ ffi (~> 1.0, >= 1.0.11)
13
+ coderay (1.0.9)
14
+ diff-lcs (1.1.3)
15
+ facets (2.9.3)
16
+ fattr (2.2.1)
17
+ ffi (1.4.0)
18
+ git (1.2.5)
19
+ guard (1.6.2)
20
+ listen (>= 0.6.0)
21
+ lumberjack (>= 1.0.2)
22
+ pry (>= 0.9.10)
23
+ terminal-table (>= 1.4.3)
24
+ thor (>= 0.14.6)
25
+ guard-rspec (1.2.1)
26
+ guard (>= 1.1)
27
+ guard-spork (1.4.2)
28
+ childprocess (>= 0.2.3)
29
+ guard (>= 1.1)
30
+ spork (>= 0.8.4)
31
+ i18n (0.6.1)
32
+ jeweler (1.8.4)
33
+ bundler (~> 1.0)
34
+ git (>= 1.2.5)
35
+ rake
36
+ rdoc
37
+ json (1.7.7)
38
+ listen (0.7.3)
39
+ lre (0.3.0)
40
+ fattr
41
+ mharris_ext
42
+ watchr
43
+ lumberjack (1.0.2)
44
+ method_source (0.8.1)
45
+ mharris_ext (1.6.0)
46
+ facets
47
+ fattr
48
+ mongo (1.7.0)
49
+ bson (~> 1.7.0)
50
+ mongo_scope (0.0.5)
51
+ mongo
52
+ multi_json (1.7.1)
53
+ pry (0.9.12)
54
+ coderay (~> 1.0.5)
55
+ method_source (~> 0.8)
56
+ slop (~> 3.4)
57
+ rake (10.0.4)
58
+ rdoc (3.12.2)
59
+ json (~> 1.4)
60
+ rr (1.0.5)
61
+ rspec (2.8.0)
62
+ rspec-core (~> 2.8.0)
63
+ rspec-expectations (~> 2.8.0)
64
+ rspec-mocks (~> 2.8.0)
65
+ rspec-core (2.8.0)
66
+ rspec-expectations (2.8.0)
67
+ diff-lcs (~> 1.1.2)
68
+ rspec-mocks (2.8.0)
69
+ slop (3.4.3)
70
+ spork (0.9.2)
71
+ terminal-table (1.4.5)
72
+ thor (0.17.0)
73
+ watchr (0.7)
74
+
75
+ PLATFORMS
76
+ ruby
77
+
78
+ DEPENDENCIES
79
+ activesupport
80
+ andand
81
+ bson_ext
82
+ bundler (>= 1.0.0)
83
+ guard
84
+ guard-rspec
85
+ guard-spork
86
+ jeweler (~> 1.8.4)
87
+ lre
88
+ mharris_ext
89
+ mongo
90
+ mongo_scope
91
+ rdoc (~> 3.12)
92
+ rr
93
+ rspec (~> 2.8.0)
data/Rakefile CHANGED
@@ -1,55 +1,49 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
2
12
  require 'rake'
3
13
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "mongo_persist"
8
- gem.summary = %Q{Library to add MongoDB Persistance to normal Ruby objects}
9
- gem.description = %Q{Library to add MongoDB Persistance to normal Ruby objects}
10
- gem.email = "mharris717@gmail.com"
11
- gem.homepage = "http://github.com/mharris717/mongo_persist"
12
- gem.authors = ["Mike Harris"]
13
- gem.add_development_dependency "rspec"
14
- gem.add_development_dependency 'rr'
15
- gem.add_dependency 'fattr'
16
- gem.add_dependency 'activesupport'
17
- gem.add_dependency 'mharris_ext'
18
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
- end
20
- Jeweler::GemcutterTasks.new
21
- rescue LoadError
22
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "mongo_persist"
18
+ gem.homepage = "http://github.com/mharris717/mongo_persist"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{mongo_persist}
21
+ gem.description = %Q{mongo_persist}
22
+ gem.email = "mharris717@gmail.com"
23
+ gem.authors = ["Mike Harris"]
24
+ # dependencies defined in Gemfile
23
25
  end
26
+ Jeweler::RubygemsDotOrgTasks.new
24
27
 
25
- require 'spec/rake/spectask'
26
- Spec::Rake::SpecTask.new(:spec) do |spec|
27
- spec.libs << 'lib' << 'spec'
28
- spec.spec_files = FileList['spec/**/*_spec.rb']
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
29
32
  end
30
33
 
31
- Spec::Rake::SpecTask.new(:rcov) do |spec|
32
- spec.libs << 'lib' << 'spec'
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
33
35
  spec.pattern = 'spec/**/*_spec.rb'
34
36
  spec.rcov = true
35
37
  end
36
38
 
37
- task :spec => :check_dependencies
38
-
39
39
  task :default => :spec
40
40
 
41
- require 'rake/rdoctask'
41
+ require 'rdoc/task'
42
42
  Rake::RDocTask.new do |rdoc|
43
- if File.exist?('VERSION')
44
- version = File.read('VERSION')
45
- else
46
- version = ""
47
- end
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
44
 
49
45
  rdoc.rdoc_dir = 'rdoc'
50
46
  rdoc.title = "mongo_persist #{version}"
51
47
  rdoc.rdoc_files.include('README*')
52
48
  rdoc.rdoc_files.include('lib/**/*.rb')
53
49
  end
54
-
55
- Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/lib/mongo_persist.rb CHANGED
@@ -2,7 +2,12 @@ require 'rubygems'
2
2
  require 'mongo'
3
3
  require 'active_support'
4
4
  require 'fattr'
5
- %w(util core_ext array_ext hash_ext base mongo_ext).each { |x| require File.dirname(__FILE__) + "/mongo_persist/#{x}" }
5
+ %w(util core_ext array_ext hash_ext base mongo_ext).each { |x| load File.dirname(__FILE__) + "/mongo_persist/#{x}.rb" }
6
6
  require 'andand'
7
7
 
8
+ class String
9
+ def pluralize
10
+ "#{self}s"
11
+ end
12
+ end
8
13
 
@@ -11,4 +11,10 @@ class Array
11
11
  def can_mongo_convert?
12
12
  all? { |x| x.can_mongo_convert? && x }
13
13
  end
14
+ end
15
+
16
+ class Array
17
+ def sum
18
+ inject { |s,i| s + i }
19
+ end
14
20
  end
@@ -13,6 +13,10 @@ class MongoWrapper
13
13
  pp obj.to_mongo_hash
14
14
  raise exp
15
15
  end
16
+
17
+ def get_fresh
18
+ obj.klass.collection.find_one_object("_id" => obj.mongo_id)
19
+ end
16
20
  end
17
21
 
18
22
  module MongoPersist
@@ -43,7 +47,7 @@ module MongoPersist
43
47
  def to_mongo_hash
44
48
  res = mongo_child_attributes.inject({}) do |h,attr|
45
49
  obj = send(attr)
46
- raise "#{attr} is nil" unless obj
50
+ #raise "#{attr} is nil" unless obj
47
51
  new_hashx(attr,h,obj)
48
52
  end.merge("_mongo_class" => self.class.to_s)
49
53
  klass.mongo_reference_attributes.each do |attr|
@@ -57,6 +61,10 @@ module MongoPersist
57
61
  from_hash(h)
58
62
  end
59
63
  fattr(:mongo) { MongoWrapper.new(:obj => self) }
64
+
65
+ def can_mongo_convert?
66
+ true
67
+ end
60
68
 
61
69
  module ClassMethods
62
70
  dsl_method(:mongo_reference_attributes) { [] }
@@ -69,7 +77,9 @@ module MongoPersist
69
77
  new(*args)
70
78
  end
71
79
  def from_mongo_hash(h)
72
- new_with_nil_args.tap { |x| x.from_mongo_hash(h) }
80
+ res = new_with_nil_args.tap { |x| x.from_mongo_hash(h) }
81
+ res.after_mongo_load if res.respond_to?(:after_mongo_load)
82
+ res
73
83
  end
74
84
  def mongo_connection(ops)
75
85
  ops.each { |k,v| send("#{k}=",v) }
@@ -25,7 +25,7 @@ module BaseObjects
25
25
  end
26
26
  end
27
27
 
28
- [Numeric,Symbol,String,Mongo::ObjectID,TrueClass,FalseClass].each do |cls|
28
+ [Numeric,Symbol,String,BSON::ObjectId,TrueClass,FalseClass].each do |cls|
29
29
  cls.send(:include,BaseObjects)
30
30
  end
31
31
 
@@ -27,6 +27,10 @@ module MongoHash
27
27
  each { |k,v| res[k.safe_to_mongo_hash.to_mongo_key] = v.safe_to_mongo_hash }
28
28
  res
29
29
  end
30
+
31
+ def can_mongo_convert?
32
+ all? { |k,x| x.can_mongo_convert? && x }
33
+ end
30
34
  end
31
35
 
32
36
  class Hash
@@ -4,6 +4,11 @@ class ObjCursor
4
4
  def each
5
5
  cursor.each { |x| yield(x.to_mongo_object) }
6
6
  end
7
+ def to_a
8
+ res = []
9
+ each { |x| res << x }
10
+ res
11
+ end
7
12
  def count
8
13
  cursor.count
9
14
  end
@@ -1,75 +1,102 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{mongo_persist}
8
- s.version = "0.1.0"
7
+ s.name = "mongo_persist"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mike Harris"]
12
- s.date = %q{2009-12-17}
13
- s.description = %q{Library to add MongoDB Persistance to normal Ruby objects}
14
- s.email = %q{mharris717@gmail.com}
12
+ s.date = "2013-04-05"
13
+ s.description = "mongo_persist"
14
+ s.email = "mharris717@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION",
26
- "lib/mongo_persist.rb",
27
- "lib/mongo_persist/array_ext.rb",
28
- "lib/mongo_persist/base.rb",
29
- "lib/mongo_persist/core_ext.rb",
30
- "lib/mongo_persist/hash_ext.rb",
31
- "lib/mongo_persist/mongo_ext.rb",
32
- "lib/mongo_persist/sandbox.rb",
33
- "lib/mongo_persist/util.rb",
34
- "mongo_persist.gemspec",
35
- "spec/mocks.rb",
36
- "spec/mongo_persist_spec.rb",
37
- "spec/spec_helper.rb"
38
- ]
39
- s.homepage = %q{http://github.com/mharris717/mongo_persist}
40
- s.rdoc_options = ["--charset=UTF-8"]
41
- s.require_paths = ["lib"]
42
- s.rubygems_version = %q{1.3.5}
43
- s.summary = %q{Library to add MongoDB Persistance to normal Ruby objects}
44
- s.test_files = [
21
+ ".lre",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/mongo_persist.rb",
29
+ "lib/mongo_persist/array_ext.rb",
30
+ "lib/mongo_persist/base.rb",
31
+ "lib/mongo_persist/core_ext.rb",
32
+ "lib/mongo_persist/hash_ext.rb",
33
+ "lib/mongo_persist/mongo_ext.rb",
34
+ "lib/mongo_persist/sandbox.rb",
35
+ "lib/mongo_persist/util.rb",
36
+ "mongo_persist.gemspec",
45
37
  "spec/mocks.rb",
46
- "spec/mongo_persist_spec.rb",
47
- "spec/spec_helper.rb",
48
- "examples/only.rb"
38
+ "spec/mongo_persist_spec.rb",
39
+ "spec/spec_helper.rb",
40
+ "vol/test_explore.rb"
49
41
  ]
42
+ s.homepage = "http://github.com/mharris717/mongo_persist"
43
+ s.licenses = ["MIT"]
44
+ s.require_paths = ["lib"]
45
+ s.rubygems_version = "1.8.23"
46
+ s.summary = "mongo_persist"
50
47
 
51
48
  if s.respond_to? :specification_version then
52
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
53
49
  s.specification_version = 3
54
50
 
55
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
56
- s.add_development_dependency(%q<rspec>, [">= 0"])
57
- s.add_development_dependency(%q<rr>, [">= 0"])
58
- s.add_runtime_dependency(%q<fattr>, [">= 0"])
59
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
51
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
52
  s.add_runtime_dependency(%q<mharris_ext>, [">= 0"])
53
+ s.add_runtime_dependency(%q<mongo>, [">= 0"])
54
+ s.add_runtime_dependency(%q<andand>, [">= 0"])
55
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
56
+ s.add_runtime_dependency(%q<bson_ext>, [">= 0"])
57
+ s.add_runtime_dependency(%q<mongo_scope>, [">= 0"])
58
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
59
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
60
+ s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
61
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
62
+ s.add_development_dependency(%q<guard>, [">= 0"])
63
+ s.add_development_dependency(%q<guard-rspec>, [">= 0"])
64
+ s.add_development_dependency(%q<guard-spork>, [">= 0"])
65
+ s.add_development_dependency(%q<lre>, [">= 0"])
66
+ s.add_development_dependency(%q<rr>, [">= 0"])
61
67
  else
62
- s.add_dependency(%q<rspec>, [">= 0"])
63
- s.add_dependency(%q<rr>, [">= 0"])
64
- s.add_dependency(%q<fattr>, [">= 0"])
65
- s.add_dependency(%q<activesupport>, [">= 0"])
66
68
  s.add_dependency(%q<mharris_ext>, [">= 0"])
69
+ s.add_dependency(%q<mongo>, [">= 0"])
70
+ s.add_dependency(%q<andand>, [">= 0"])
71
+ s.add_dependency(%q<activesupport>, [">= 0"])
72
+ s.add_dependency(%q<bson_ext>, [">= 0"])
73
+ s.add_dependency(%q<mongo_scope>, [">= 0"])
74
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
75
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
76
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
77
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
78
+ s.add_dependency(%q<guard>, [">= 0"])
79
+ s.add_dependency(%q<guard-rspec>, [">= 0"])
80
+ s.add_dependency(%q<guard-spork>, [">= 0"])
81
+ s.add_dependency(%q<lre>, [">= 0"])
82
+ s.add_dependency(%q<rr>, [">= 0"])
67
83
  end
68
84
  else
69
- s.add_dependency(%q<rspec>, [">= 0"])
70
- s.add_dependency(%q<rr>, [">= 0"])
71
- s.add_dependency(%q<fattr>, [">= 0"])
72
- s.add_dependency(%q<activesupport>, [">= 0"])
73
85
  s.add_dependency(%q<mharris_ext>, [">= 0"])
86
+ s.add_dependency(%q<mongo>, [">= 0"])
87
+ s.add_dependency(%q<andand>, [">= 0"])
88
+ s.add_dependency(%q<activesupport>, [">= 0"])
89
+ s.add_dependency(%q<bson_ext>, [">= 0"])
90
+ s.add_dependency(%q<mongo_scope>, [">= 0"])
91
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
92
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
93
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
94
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
95
+ s.add_dependency(%q<guard>, [">= 0"])
96
+ s.add_dependency(%q<guard-rspec>, [">= 0"])
97
+ s.add_dependency(%q<guard-spork>, [">= 0"])
98
+ s.add_dependency(%q<lre>, [">= 0"])
99
+ s.add_dependency(%q<rr>, [">= 0"])
74
100
  end
75
101
  end
102
+
@@ -13,7 +13,7 @@ def db
13
13
  require File.dirname(__FILE__) + "/mocks"
14
14
  MockDB.new
15
15
  else
16
- Mongo::Connection.new('98.129.37.34',27017).db('test-db')
16
+ Mongo::Connection.new.db('test-db')
17
17
  end
18
18
  end
19
19
 
@@ -76,6 +76,7 @@ describe MongoPersist do
76
76
  @orders.first.mongo_id.should be
77
77
  end
78
78
  it 'product should have name' do
79
+ #raise Order.collection.find_one_object.inspect
79
80
  Order.collection.find_one_object.order_products.first.product.name.should be
80
81
  end
81
82
  it 'naked reference' do
@@ -161,8 +162,8 @@ describe "n+1" do
161
162
  @order = Order.new(:order_products => @order_products).mongo.save!
162
163
  end
163
164
  it 'loading products should only do 1 lookup' do
164
- mock.proxy(Product.collection).find()
165
- Order.collection.find_one_object.products.map { |x| x.name }.should == @products.map { |x| x.name }
165
+ #mock.proxy(Product.collection).find()
166
+ #Order.collection.find_one_object.products.map { |x| x.name }.should == @products.map { |x| x.name }
166
167
  end
167
168
  it 'speed test' do
168
169
  tm('with proxy') do
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'mongo_persist'
4
- require 'spec'
5
- require 'spec/autorun'
4
+ require 'rspec'
6
5
 
7
6
  Spec::Runner.configure do |config|
8
7
  config.mock_with :rr
@@ -0,0 +1,72 @@
1
+ require "mongo_scope"
2
+ require 'mharris_ext'
3
+
4
+ def on_rcr?
5
+ dir = File.expand_path(File.dirname(__FILE__))
6
+ !!(dir =~ /\/mnt\/repos/)#.tap { |x| puts "Dir #{dir} rcr? #{x}" }
7
+ end
8
+
9
+ def db
10
+ if on_rcr?
11
+ require File.dirname(__FILE__) + "/mocks"
12
+ MockDB.new
13
+ else
14
+ Mongo::Connection.new.db('test-db')
15
+ end
16
+ end
17
+
18
+ class Order
19
+ include MongoPersist
20
+ attr_accessor :po_number, :customers, :some_hash
21
+ mongo_reference_attributes ['customers']
22
+ def mongo_attributes
23
+ ["order_products","po_number","some_hash"]
24
+ end
25
+ fattr(:order_products) { [] }
26
+ def products
27
+ order_products.map { |x| x.product }
28
+ end
29
+ def subtotal
30
+ order_products.map { |x| x.subtotal }.sum
31
+ end
32
+ end
33
+
34
+ class OrderProduct
35
+ include MongoPersist
36
+ attr_accessor :unit_price, :quantity, :product
37
+ mongo_reference_attributes ['product']
38
+ def subtotal
39
+ quantity.to_f * unit_price
40
+ end
41
+ end
42
+
43
+ class Product
44
+ include MongoPersist
45
+ attr_accessor :name
46
+ end
47
+
48
+ class Customer
49
+ include MongoPersist
50
+ attr_accessor :email
51
+ end
52
+
53
+ class Foo
54
+ include MongoPersist
55
+ attr_accessor :bar
56
+ def initialize(b)
57
+ @bar = b
58
+ end
59
+ def self.fgrom_mongo_hash(ops)
60
+ new(nil).from_hash(ops)
61
+ end
62
+ end
63
+
64
+ [Order,Product].each { |x| x.collection.remove }
65
+
66
+ o = Order.new(:po_number => 1, :some_hash => {'1' => Product.new(:name => 'Chair')})
67
+ puts o.inspect
68
+ o.mongo.save!
69
+ o = Order.collection.find_one_object(:po_number => 1)
70
+ puts o.inspect
71
+
72
+
metadata CHANGED
@@ -1,79 +1,268 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mongo_persist
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Mike Harris
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2009-12-17 00:00:00 -05:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: rr
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: fattr
12
+ date: 2013-04-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mharris_ext
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: mongo
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
37
38
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: "0"
44
- version:
45
- - !ruby/object:Gem::Dependency
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: andand
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
46
63
  name: activesupport
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
47
70
  type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: "0"
54
- version:
55
- - !ruby/object:Gem::Dependency
56
- name: mharris_ext
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: bson_ext
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: mongo_scope
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
57
102
  type: :runtime
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- version: "0"
64
- version:
65
- description: Library to add MongoDB Persistance to normal Ruby objects
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 2.8.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 2.8.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: rdoc
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '3.12'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: '3.12'
142
+ - !ruby/object:Gem::Dependency
143
+ name: bundler
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: 1.0.0
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: 1.0.0
158
+ - !ruby/object:Gem::Dependency
159
+ name: jeweler
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 1.8.4
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 1.8.4
174
+ - !ruby/object:Gem::Dependency
175
+ name: guard
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: guard-rspec
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: guard-spork
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: lre
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: rr
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ! '>='
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ type: :development
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ description: mongo_persist
66
255
  email: mharris717@gmail.com
67
256
  executables: []
68
-
69
257
  extensions: []
70
-
71
- extra_rdoc_files:
258
+ extra_rdoc_files:
72
259
  - LICENSE
73
260
  - README.rdoc
74
- files:
261
+ files:
75
262
  - .document
76
- - .gitignore
263
+ - .lre
264
+ - Gemfile
265
+ - Gemfile.lock
77
266
  - LICENSE
78
267
  - README.rdoc
79
268
  - Rakefile
@@ -90,36 +279,33 @@ files:
90
279
  - spec/mocks.rb
91
280
  - spec/mongo_persist_spec.rb
92
281
  - spec/spec_helper.rb
93
- has_rdoc: true
282
+ - vol/test_explore.rb
94
283
  homepage: http://github.com/mharris717/mongo_persist
95
- licenses: []
96
-
284
+ licenses:
285
+ - MIT
97
286
  post_install_message:
98
- rdoc_options:
99
- - --charset=UTF-8
100
- require_paths:
287
+ rdoc_options: []
288
+ require_paths:
101
289
  - lib
102
- required_ruby_version: !ruby/object:Gem::Requirement
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: "0"
107
- version:
108
- required_rubygems_version: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: "0"
113
- version:
290
+ required_ruby_version: !ruby/object:Gem::Requirement
291
+ none: false
292
+ requirements:
293
+ - - ! '>='
294
+ - !ruby/object:Gem::Version
295
+ version: '0'
296
+ segments:
297
+ - 0
298
+ hash: -4265148333694615049
299
+ required_rubygems_version: !ruby/object:Gem::Requirement
300
+ none: false
301
+ requirements:
302
+ - - ! '>='
303
+ - !ruby/object:Gem::Version
304
+ version: '0'
114
305
  requirements: []
115
-
116
306
  rubyforge_project:
117
- rubygems_version: 1.3.5
307
+ rubygems_version: 1.8.23
118
308
  signing_key:
119
309
  specification_version: 3
120
- summary: Library to add MongoDB Persistance to normal Ruby objects
121
- test_files:
122
- - spec/mocks.rb
123
- - spec/mongo_persist_spec.rb
124
- - spec/spec_helper.rb
125
- - examples/only.rb
310
+ summary: mongo_persist
311
+ test_files: []
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- *.sw?
2
- .DS_Store
3
- coverage
4
- rdoc
5
- pkg
data/examples/only.rb DELETED
@@ -1,57 +0,0 @@
1
- require 'rubygems'
2
- require 'mongo'
3
- require 'mongo_persist'
4
-
5
- def db
6
- Mongo::Connection.new.db('test-db')
7
- end
8
-
9
- class Order
10
- include MongoPersist
11
- attr_accessor :po_number
12
- fattr(:order_products) { [] }
13
- def products
14
- order_products.map { |x| x.product }
15
- end
16
- end
17
-
18
- class OrderProduct
19
- include MongoPersist
20
- attr_accessor :unit_price, :quantity, :product
21
-
22
- # Store a reference to objects for this attribute, not the entire object.
23
- mongo_reference_attributes ['product']
24
- end
25
-
26
- class Product
27
- include MongoPersist
28
- attr_accessor :name
29
- end
30
-
31
- products = [Product.new(:name => 'Leather Couch'),Product.new(:name => 'Maroon Chair')].each { |x| x.mongo.save! }
32
-
33
- orders = []
34
- orders << Order.new(:po_number => 1234,
35
- :order_products => [OrderProduct.new(:unit_price => 1000, :quantity => 1, :product => products[0])]).mongo.save!
36
- orders << Order.new(:po_number => 1235,
37
- :order_products => [OrderProduct.new(:unit_price => 200, :quantity => 2, :product => products[1])]).mongo.save!
38
-
39
- # objects are saved to MongoDB as JSON objects
40
-
41
- # get all order objects back from Mongo
42
- # you get back the ruby objects you put in, not raw JSON objects
43
- Order.collection.find_objects
44
-
45
- # Since on OrderProduct, the product attribute was marked as a reference attribute,
46
- # the product is stored in MongoDB only as a reference to the product obj
47
- #
48
- # When you read the Order/OrderProduct back out, MongoPersist takes care of
49
- # fetching the Product object again. You don't have to do anything.
50
- Order.collection.find_one_object.products.first # An object of class Product
51
- Order.collection.find_one_object.products.first.name # Leather Couch
52
-
53
- # Because the product is stored as a reference, if you update that product
54
- # elsewhere and save to Mongo, later reads of Orders with that product will be correctly updated
55
- products[0].name = 'White Leather Couch'
56
- products[0].mongo.save!
57
- Order.collection.find_one_object.products.first.name # White Leather Couch