mongo_persist 0.1.0 → 0.2.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/.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