machinist2_mongomapper 0.0.2

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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in machinist_mongomapper.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,46 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ machinist2_mongomapper (0.0.1)
5
+ i18n
6
+ machinist (~> 2.0.0.beta2)
7
+ mongo_mapper (~> 0.8.6)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ activesupport (3.0.3)
13
+ bson (1.1.2)
14
+ bson_ext (1.1.2)
15
+ diff-lcs (1.1.2)
16
+ i18n (0.4.2)
17
+ jnunemaker-validatable (1.8.4)
18
+ activesupport (>= 2.3.4)
19
+ machinist (2.0.0.beta2)
20
+ mongo (1.1.2)
21
+ bson (>= 1.1.1)
22
+ mongo_mapper (0.8.6)
23
+ activesupport (>= 2.3.4)
24
+ jnunemaker-validatable (~> 1.8.4)
25
+ plucky (~> 0.3.6)
26
+ plucky (0.3.6)
27
+ mongo (~> 1.1)
28
+ rspec (2.1.0)
29
+ rspec-core (~> 2.1.0)
30
+ rspec-expectations (~> 2.1.0)
31
+ rspec-mocks (~> 2.1.0)
32
+ rspec-core (2.1.0)
33
+ rspec-expectations (2.1.0)
34
+ diff-lcs (~> 1.1.2)
35
+ rspec-mocks (2.1.0)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ bson_ext (= 1.1.2)
42
+ i18n
43
+ machinist (~> 2.0.0.beta2)
44
+ machinist2_mongomapper!
45
+ mongo_mapper (~> 0.8.6)
46
+ rspec (~> 2.1.0)
data/README.textile ADDED
@@ -0,0 +1,15 @@
1
+ h1. Machinist2 MongoMapper
2
+
3
+ Machinist2 adaptor for mongo_mapper
4
+
5
+ h2. Usage
6
+
7
+ Using Machinist MongoMapper is simple. Put this in your @Gemfile@:
8
+
9
+ bc. gem 'machinist2_mongomapper'
10
+
11
+ And run:
12
+
13
+ bc. bundle install
14
+
15
+ And you're all set. Be sure read "Machinist's README":http://github.com/notahat/machinist to find out how to create your objects and get this thing running.
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.expand_path("../lib", __FILE__)
3
+
4
+ require 'bundler'
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ begin
8
+ require 'rspec/core/rake_task'
9
+
10
+ desc "Run specs"
11
+ RSpec::Core::RakeTask.new do |t|
12
+ t.rspec_opts = %w(-fs --color)
13
+ t.ruby_opts = %w(-w)
14
+ end
15
+
16
+ rescue LoadError
17
+ task :spec do
18
+ abort "Run `rake spec:deps` to be able to run the specs"
19
+ end
20
+
21
+ namespace :spec do
22
+ desc "Ensure spec dependencies are installed"
23
+ task :deps do
24
+ sh "gem list rspec | (grep 'rspec (2.0' 1> /dev/null) || gem install rspec --no-ri --no-rdoc"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ require "machinist"
2
+ require "machinist/machinable"
3
+
4
+ begin
5
+ require "mongo_mapper"
6
+ rescue LoadError
7
+ puts "mongo_mapper is not installed (gem install mongo_mapper)"
8
+ exit
9
+ end
10
+
11
+ require 'machinist/mongo_mapper/blueprint'
12
+ require 'machinist/mongo_mapper/lathe'
13
+
14
+ module Machinist::MongoMapper
15
+ module BlueprintClass
16
+ def blueprint_class
17
+ Machinist::MongoMapper::Blueprint
18
+ end
19
+ end
20
+ end
21
+
22
+ MongoMapper::Document.append_extensions(Machinist::Machinable)
23
+ MongoMapper::Document.append_extensions(Machinist::MongoMapper::BlueprintClass)
24
+ MongoMapper::EmbeddedDocument.append_extensions(Machinist::Machinable)
25
+ MongoMapper::EmbeddedDocument.append_extensions(Machinist::MongoMapper::BlueprintClass)
@@ -0,0 +1,31 @@
1
+ module Machinist::MongoMapper
2
+ class Blueprint < Machinist::Blueprint
3
+
4
+ # Make and save an object.
5
+ def make!(attributes = {})
6
+ object = make(attributes)
7
+ raise NoMethodError, "Embedded Objects cannot be make! ed" if object.class.embeddable?
8
+ object.save!
9
+ object.reload
10
+ end
11
+
12
+ # Box an object for storage in the warehouse.
13
+ def box(object)
14
+ object.id
15
+ end
16
+
17
+ # Unbox an object from the warehouse.
18
+ def unbox(id)
19
+ @klass.find(id)
20
+ end
21
+
22
+ def outside_transaction
23
+ yield
24
+ end
25
+
26
+ def lathe_class #:nodoc:
27
+ Machinist::MongoMapper::Lathe
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ module Machinist::MongoMapper
2
+
3
+ class Lathe < Machinist::Lathe
4
+
5
+ def make_one_value(attribute, args) #:nodoc:
6
+ if block_given?
7
+ raise_argument_error(attribute) unless args.empty?
8
+ yield
9
+ else
10
+ make_association(attribute, args)
11
+ end
12
+ end
13
+
14
+ def make_association(attribute, args) #:nodoc:
15
+ association = @klass.associations[attribute]
16
+ if association
17
+ association.klass.make(*args)
18
+ else
19
+ raise_argument_error(attribute)
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,2 @@
1
+ # she be blank
2
+ require "machinist/mongo_mapper"
@@ -0,0 +1,3 @@
1
+ module MachinistMongomapper
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "machinist_mongomapper/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "machinist2_mongomapper"
7
+ s.version = MachinistMongomapper::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Richard Hooker"]
10
+ s.email = ["hookercookerman@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{machinist2 compatible mongo_mapper adapter}
13
+ s.description = %q{does what the summary says}
14
+
15
+ s.rubyforge_project = "machinist2_mongomapper"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency 'mongo_mapper', '~> 0.8.6'
22
+ s.add_dependency 'machinist', '~> 2.0.0.beta2'
23
+ s.add_dependency "i18n"
24
+
25
+ # == Testing
26
+ s.add_development_dependency "rspec", "~> 2.1.0"
27
+ s.add_development_dependency "bson_ext", "1.1.2"
28
+ end
@@ -0,0 +1,130 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ describe "Machinist::MongoMapper" do
3
+
4
+ before(:each) do
5
+ Machinist::Shop.instance.reset!
6
+ User.clear_blueprints!
7
+ Post.clear_blueprints!
8
+ Comment.clear_blueprints!
9
+ end
10
+
11
+ def fake_a_test
12
+ Machinist.reset_before_test
13
+ yield
14
+ end
15
+
16
+ context "make" do
17
+ it "should return an unsaved object" do
18
+ Post.blueprint { }
19
+ post = Post.make
20
+ post.should be_a(Post)
21
+ post.should be_new_record
22
+ end
23
+ end
24
+
25
+ context "make!" do
26
+ it "should make and save objects" do
27
+ Post.blueprint { }
28
+ post = Post.make!
29
+ post.should be_a(Post)
30
+ post.should_not be_new_record
31
+
32
+ end
33
+
34
+ it "should raise an exception for an invalid object" do
35
+ User.blueprint { }
36
+ lambda {
37
+ User.make!(:username => "")
38
+ }.should raise_error(MongoMapper::DocumentNotValid)
39
+ end
40
+
41
+ it "should buy objects from the shop" do
42
+ Post.blueprint { }
43
+ post_a, post_b = nil, nil
44
+ fake_a_test { post_a = Post.make! }
45
+ fake_a_test { post_b = Post.make! }
46
+ post_a.should == post_b
47
+ end
48
+
49
+ it "should not buy objects from the shop if caching is disabled" do
50
+ Machinist.configuration.cache_objects = false
51
+ Post.blueprint { }
52
+ post_a, post_b = nil, nil
53
+ fake_a_test { post_a = Post.make! }
54
+ fake_a_test { post_b = Post.make! }
55
+ post_a.should_not == post_b
56
+ Machinist.configuration.cache_objects = true
57
+ end
58
+ end
59
+
60
+ context "associations support" do
61
+ it "should handle belongs_to associations" do
62
+ User.blueprint do
63
+ username { "user_#{sn}" }
64
+ end
65
+ Post.blueprint do
66
+ author
67
+ end
68
+ post = Post.make!
69
+ post.should be_a(Post)
70
+ post.should_not be_new_record
71
+ post.author.should be_a(User)
72
+ post.author.should_not be_new_record
73
+ end
74
+
75
+ it "should handle many associations" do
76
+ Post.blueprint do
77
+ comments(3)
78
+ end
79
+ Comment.blueprint { }
80
+ post = Post.make!
81
+ post.should be_a(Post)
82
+ post.should_not be_new_record
83
+ post.should have(3).comments
84
+ post.comments.each do |comment|
85
+ comment.should be_a(Comment)
86
+ comment.should_not be_new_record
87
+ end
88
+ end
89
+
90
+ it "should handle overriding associations" do
91
+ User.blueprint do
92
+ username { "user_#{sn}" }
93
+ end
94
+ Post.blueprint do
95
+ author { User.make!(:username => "post_author_#{sn}") }
96
+ end
97
+ post = Post.make!
98
+ post.should be_a(Post)
99
+ post.should_not be_new_record
100
+ post.author.should be_a(User)
101
+ post.author.should_not be_new_record
102
+ post.author.username.should =~ /^post_author_\d+$/
103
+ end
104
+ end
105
+
106
+ context "error handling" do
107
+ it "should raise an exception for an attribute with no value" do
108
+ User.blueprint { username }
109
+ lambda {
110
+ User.make
111
+ }.should raise_error(ArgumentError)
112
+ end
113
+ end
114
+
115
+ context "embedded documents" do
116
+ it "should make an embed object" do
117
+ Address.blueprint { }
118
+ User.blueprint do
119
+ address { Address.make }
120
+ end
121
+ User.make!(:username => "beans").address.should be_instance_of(Address)
122
+ end
123
+
124
+ it "should raise error when #make! on an embedded object" do
125
+ lambda{
126
+ Address.make!
127
+ }.should raise_error(NoMethodError)
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,19 @@
1
+ $:.unshift File.expand_path('..', __FILE__)
2
+ $:.unshift File.expand_path('../../lib', __FILE__)
3
+
4
+ require 'rubygems'
5
+ require 'bundler'
6
+ require "machinist_mongomapper"
7
+ require 'rspec'
8
+
9
+ ::MongoMapper.database = "machinist_mongomapper"
10
+
11
+ ::Machinist.configure do |config|
12
+ config.cache_objects = true
13
+ end
14
+
15
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
16
+
17
+ Rspec.configure do |config|
18
+ config.after(:all) { ::MongoMapper.database.collections.each { |c| c.remove } }
19
+ end
@@ -0,0 +1,42 @@
1
+ class Address
2
+ include MongoMapper::EmbeddedDocument
3
+
4
+ key :street, String
5
+ key :zip, String
6
+ key :country, String
7
+ end
8
+
9
+ class User
10
+ include MongoMapper::Document
11
+
12
+ key :username, String
13
+ key :password, String
14
+ key :admin, Boolean, :default => false
15
+ key :address, Address
16
+
17
+ validates_presence_of :username
18
+ validates_uniqueness_of :username
19
+ end
20
+
21
+ class Post
22
+ include MongoMapper::Document
23
+
24
+ key :title, String
25
+ key :body, String
26
+ key :author_id, ObjectId
27
+ key :published, Boolean, :default => true
28
+
29
+ belongs_to :author, :class_name => "User"
30
+ many :comments
31
+ end
32
+
33
+ class Comment
34
+ include MongoMapper::Document
35
+
36
+ key :body, String
37
+ key :post_id, ObjectId
38
+ key :author_id, String
39
+
40
+ belongs_to :post
41
+ belongs_to :author, :class_name => "User"
42
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: machinist2_mongomapper
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Richard Hooker
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-11-22 00:00:00 +00:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: mongo_mapper
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
+ - 8
31
+ - 6
32
+ version: 0.8.6
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: machinist
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 2
45
+ - 0
46
+ - 0
47
+ - beta2
48
+ version: 2.0.0.beta2
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: i18n
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ type: :runtime
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: rspec
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ segments:
73
+ - 2
74
+ - 1
75
+ - 0
76
+ version: 2.1.0
77
+ type: :development
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: bson_ext
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - "="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 1
89
+ - 1
90
+ - 2
91
+ version: 1.1.2
92
+ type: :development
93
+ version_requirements: *id005
94
+ description: does what the summary says
95
+ email:
96
+ - hookercookerman@gmail.com
97
+ executables: []
98
+
99
+ extensions: []
100
+
101
+ extra_rdoc_files: []
102
+
103
+ files:
104
+ - .gitignore
105
+ - Gemfile
106
+ - Gemfile.lock
107
+ - README.textile
108
+ - Rakefile
109
+ - lib/machinist/mongo_mapper.rb
110
+ - lib/machinist/mongo_mapper/blueprint.rb
111
+ - lib/machinist/mongo_mapper/lathe.rb
112
+ - lib/machinist_mongomapper.rb
113
+ - lib/machinist_mongomapper/version.rb
114
+ - machinist_mongomapper.gemspec
115
+ - spec/mongo_mapper_spec.rb
116
+ - spec/spec_helper.rb
117
+ - spec/support/setup.rb
118
+ has_rdoc: true
119
+ homepage: ""
120
+ licenses: []
121
+
122
+ post_install_message:
123
+ rdoc_options: []
124
+
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ segments:
141
+ - 0
142
+ version: "0"
143
+ requirements: []
144
+
145
+ rubyforge_project: machinist2_mongomapper
146
+ rubygems_version: 1.3.7
147
+ signing_key:
148
+ specification_version: 3
149
+ summary: machinist2 compatible mongo_mapper adapter
150
+ test_files:
151
+ - spec/mongo_mapper_spec.rb
152
+ - spec/spec_helper.rb
153
+ - spec/support/setup.rb