machinist-mongoid 0.0.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 117eaff98c32d0739aa64484647c3087cd099cb3
4
- data.tar.gz: 580c778ede35414aa8fb41b2d0f80a7c2d895f3f
3
+ metadata.gz: b7b118d41d219b8e5ac787858076b92fc30ba860
4
+ data.tar.gz: 54d2f7a098497791a68b7b93fcc6ab53159637d4
5
5
  SHA512:
6
- metadata.gz: 7372767b1b655ed9c0ef467a4a4aae7872f6831cd3822e7dcc1751da060a78edba6aef7affefa1bcebea3308b0ffbf2aa46d01b97c68be442ce6d30267d4b289
7
- data.tar.gz: e3be69d29bfec9e521c2dcbf6b8d45d2f4cb30bf067947a87c85822ee0d050b0be8da0f512de68ac8f20a8fddecc855bf0b1b4cb93f6f80be0c11ee0c36c69ed
6
+ metadata.gz: df504caaf2ad49fdf0a261cdd2ff204271ef5131529787e84a441b5c6f21977237923164b166b1634aef98284c27204036bad73bcbb68a0946e14bbbe7042924
7
+ data.tar.gz: 9a852bf152ebaa432f2a39d73f1c9c7d9ce20d3a0bcaae8992438649566abacd8e5d0d0d2b0efeb07aa3781db52748a102f8672d5fdd288be8a2e70ba65a0e94
data/.gitignore CHANGED
@@ -16,4 +16,5 @@ rdoc
16
16
  spec/reports
17
17
  test/tmp
18
18
  test/version_tmp
19
- tmp
19
+ tmp
20
+ gemfiles
data/Appraisals ADDED
@@ -0,0 +1,7 @@
1
+ appraise "mongoid-3x" do
2
+ gem "mongoid", "~> 3.0"
3
+ end
4
+
5
+ appraise "mongoid-4x" do
6
+ gem "mongoid", "=> 4.0"
7
+ end
data/Gemfile CHANGED
@@ -1,7 +1,12 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- group :test do
4
- gem 'mongoid', "~> 3.0"
3
+ group :development, :test do
4
+ gem "bundler", "~> 1.3"
5
+ gem "rake"
6
+ gem "appraisal"
7
+ end
8
+
9
+ group :test do
5
10
  gem 'machinist', "~> 2.0"
6
11
  gem 'rspec', "~> 2.13"
7
12
  end
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Machinist::Mongoid
2
2
 
3
- This library is intended to support machinist 2.0 factories within Mongoid 3.x
4
- codebases. It's inspired by the existing [machinist_mongo][mm] gem that doesn't
5
- support mongoid 3.x.
3
+ This library is intended to support machinist 2.0 factories within Mongoid 3.x
4
+ and 4.x versions. It's originally inspired by the existing [machinist_mongo][mm] gem.
6
5
 
7
6
  ## Installation
8
7
 
@@ -18,9 +17,16 @@ Or install it yourself as:
18
17
 
19
18
  $ gem install machinist-mongoid
20
19
 
21
- ## Usage
20
+ ## Testing
21
+
22
+ # once
23
+ bundle install
24
+ appraisal install
25
+
26
+ # each test run.
27
+ appraisal mongoid-3x rake spec
28
+ appraisal mongoid-4x rake spec
22
29
 
23
- TODO: Write usage instructions here
24
30
 
25
31
  ## Contributing
26
32
 
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
1
4
  require "bundler/gem_tasks"
5
+
6
+ require "rspec/core/rake_task"
7
+ RSpec::Core::RakeTask.new(:spec)
@@ -10,12 +10,12 @@ rescue LoadError
10
10
  end
11
11
 
12
12
  module Machinist
13
-
13
+
14
14
  module Mongoid
15
-
15
+
16
16
  module Machinable
17
17
  extend ActiveSupport::Concern
18
-
18
+
19
19
  module ClassMethods
20
20
  include Machinist::Machinable
21
21
  def blueprint_class
@@ -23,23 +23,23 @@ module Machinist
23
23
  end
24
24
  end
25
25
  end
26
-
26
+
27
27
  class Blueprint < Machinist::Blueprint
28
-
28
+
29
29
  def make!(attributes = {})
30
30
  object = make(attributes)
31
31
  object.save!
32
32
  object.reload
33
33
  end
34
-
34
+
35
35
  def lathe_class #:nodoc:
36
36
  Machinist::Mongoid::Lathe
37
37
  end
38
-
38
+
39
39
  def outside_transaction
40
40
  yield
41
41
  end
42
-
42
+
43
43
  def box(object)
44
44
  object.id
45
45
  end
@@ -49,7 +49,7 @@ module Machinist
49
49
  @klass.find(id)
50
50
  end
51
51
  end
52
-
52
+
53
53
  class Lathe < Machinist::Lathe
54
54
  def make_one_value(attribute, args) #:nodoc:
55
55
  if block_given?
@@ -59,16 +59,16 @@ module Machinist
59
59
  make_association(attribute, args)
60
60
  end
61
61
  end
62
-
62
+
63
63
  def make_association(attribute, args) #:nodoc:
64
- association = @klass.associations[attribute.to_s]
65
- if association
66
- association.klass.make(*args)
64
+ relation = relations_for(@klass)[attribute.to_s]
65
+ if relation
66
+ relation.klass.make(*args)
67
67
  else
68
68
  raise_argument_error(attribute)
69
69
  end
70
70
  end
71
-
71
+
72
72
  def assign_attribute(key, value)
73
73
  @assigned_attributes[key.to_sym] = value
74
74
  if @object.respond_to?("#{key}=")
@@ -77,6 +77,17 @@ module Machinist
77
77
  @object[key] = value
78
78
  end
79
79
  end
80
+
81
+ private
82
+
83
+ def relations_for(obj)
84
+ if ::Mongoid::VERSION =~ /^4\./
85
+ obj.relations
86
+ else
87
+ obj.associations
88
+ end
89
+ end
90
+
80
91
  end
81
92
  end
82
93
  end
@@ -1,5 +1,5 @@
1
1
  module Machinist
2
2
  module Mongoid
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Machinist::Mongoid::VERSION
9
9
  spec.authors = ["Blake Chambers"]
10
10
  spec.email = ["chambb1@gmail.com"]
11
- spec.description = %q{Machinist for Mongoid 3.x}
12
- spec.summary = %q{Machinist for Mongoid 3.x}
11
+ spec.description = %q{Machinist for Mongoid 3 and 4}
12
+ spec.summary = %q{Machinist for Mongoid 3 and 4}
13
13
  spec.homepage = "http://github.com/blakechambers/machinist-mongoid"
14
14
  spec.license = "MIT"
15
15
 
@@ -18,6 +18,5 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
21
+ spec.add_dependency "machinist", "~> 2.0"
23
22
  end
data/spec/mongoid_spec.rb CHANGED
@@ -5,7 +5,7 @@ MachinistTestHelper.configure!
5
5
 
6
6
  class Address
7
7
  include Mongoid::Document
8
-
8
+
9
9
  field :street
10
10
  field :zip
11
11
  field :country
@@ -14,7 +14,7 @@ end
14
14
 
15
15
  class Person
16
16
  include Mongoid::Document
17
-
17
+
18
18
  field :name
19
19
  field :password
20
20
  field :admin, :type => Boolean, :default => false
@@ -24,26 +24,26 @@ end
24
24
 
25
25
  class Post
26
26
  include Mongoid::Document
27
-
27
+
28
28
  field :title
29
29
  field :body
30
30
  field :published, :type => Boolean, :default => true
31
-
31
+
32
32
  has_many :comments
33
33
  end
34
34
 
35
35
  class Comment
36
36
  include Mongoid::Document
37
-
37
+
38
38
  field :body
39
39
  field :post_id
40
40
  field :author_id
41
-
41
+
42
42
  belongs_to :post
43
43
  belongs_to :author, :class_name => "Person"
44
44
  end
45
45
 
46
- describe Machinist, "Mongoid::Document adapter" do
46
+ describe Machinist, "Mongoid::Document adapter" do
47
47
 
48
48
  before(:each) do
49
49
  Person.clear_blueprints!
@@ -57,19 +57,19 @@ describe Machinist, "Mongoid::Document adapter" do
57
57
  person = Person.make!
58
58
  person.should_not be_new_record
59
59
  end
60
-
60
+
61
61
  it "should create an object through embedded_in association" do
62
62
  Post.blueprint { }
63
63
  Comment.blueprint { post }
64
64
  Comment.make.post.should be_instance_of(Post)
65
65
  end
66
-
66
+
67
67
  it "should create an object through embedded_in association with a class_name attribute" do
68
68
  Person.blueprint { }
69
69
  Comment.blueprint { author }
70
70
  Comment.make.author.should be_instance_of(Person)
71
71
  end
72
-
72
+
73
73
  it "should create an object through embedded_in association using a named blueprint" do
74
74
  Post.blueprint { }
75
75
  Post.blueprint(:dummy) do
@@ -79,30 +79,33 @@ describe Machinist, "Mongoid::Document adapter" do
79
79
  Comment.make.post.title.should == 'Dummy Post'
80
80
  end
81
81
  end
82
-
82
+
83
83
  describe "plan method" do
84
- context "attribute assignment" do
84
+ context "attribute assignment" do
85
85
  it "should allow assigning a value to an attribute" do
86
86
  Post.blueprint { title {"1234"} }
87
87
  post = Post.make!
88
88
  post.title.should == "1234"
89
89
  end
90
90
 
91
- it "should allow arbitrary attributes on the base model in its blueprint" do
92
- Post.blueprint { foo {"bar"} }
93
- post = Post.make!
94
- post.foo.should == "bar"
91
+ # see: https://github.com/mongoid/mongoid/issues/3035#issuecomment-17858040
92
+ unless ::Mongoid::VERSION =~ /^4\./
93
+ it "should allow arbitrary attributes on the base model in its blueprint" do
94
+ Post.blueprint { foo {"bar"} }
95
+ post = Post.make!
96
+ post.foo.should == "bar"
97
+ end
95
98
  end
96
99
  end
97
100
  end
98
-
101
+
99
102
  describe "make_unsaved method" do
100
103
  it "should not save the constructed object" do
101
104
  Person.blueprint { }
102
105
  person = Person.make
103
106
  person.should be_new_record
104
107
  end
105
-
108
+
106
109
  it "should not save associated objects" do
107
110
  Post.blueprint { }
108
111
  Comment.blueprint { post }
@@ -110,7 +113,7 @@ describe Machinist, "Mongoid::Document adapter" do
110
113
  comment.post.should be_new_record
111
114
  end
112
115
  end
113
-
116
+
114
117
  describe "make method with embedded documents" do
115
118
  it "should construct object" do
116
119
  Address.blueprint { }
@@ -126,11 +129,14 @@ describe Machinist, "Mongoid::Document adapter" do
126
129
  Person.make.address.should be_instance_of(Address)
127
130
  end
128
131
 
129
- it "should allow arbitrary attributes on the base model in its blueprint" do
130
- Address.blueprint { foo {"bar"} }
131
- addr = Address.make
132
- addr.foo.should == "bar"
132
+ # see: https://github.com/mongoid/mongoid/issues/3035#issuecomment-17858040
133
+ unless ::Mongoid::VERSION =~ /^4\./
134
+ it "should allow arbitrary attributes on the base model in its blueprint" do
135
+ Address.blueprint { foo {"bar"} }
136
+ addr = Address.make
137
+ addr.foo.should == "bar"
138
+ end
133
139
  end
134
140
  end
135
-
141
+
136
142
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  $LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
2
2
  require "rubygems"
3
- require "rspec"
4
- #require "sham"
5
-
6
3
  require 'bundler/setup'
7
4
 
5
+ require "rspec"
6
+
8
7
  module MachinistTestHelper
9
8
  def self.configure!
10
9
  ::Mongoid.load!(File.join([File.dirname(__FILE__), "support/mongoid.yml"]), :test)
@@ -1,8 +1,6 @@
1
1
  test:
2
2
  sessions:
3
3
  default:
4
- database: mongoid
4
+ database: machinist_mongoid
5
5
  hosts:
6
- - localhost:27017
7
- options:
8
- allow_dynamic_fields: true
6
+ - localhost:27017
metadata CHANGED
@@ -1,44 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: machinist-mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Chambers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-28 00:00:00.000000000 Z
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: machinist
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
19
+ version: '2.0'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- description: Machinist for Mongoid 3.x
26
+ version: '2.0'
27
+ description: Machinist for Mongoid 3 and 4
42
28
  email:
43
29
  - chambb1@gmail.com
44
30
  executables: []
@@ -47,6 +33,7 @@ extra_rdoc_files: []
47
33
  files:
48
34
  - .gitignore
49
35
  - .rspec
36
+ - Appraisals
50
37
  - Gemfile
51
38
  - LICENSE.txt
52
39
  - README.md
@@ -77,10 +64,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
64
  version: '0'
78
65
  requirements: []
79
66
  rubyforge_project:
80
- rubygems_version: 2.0.3
67
+ rubygems_version: 2.4.5
81
68
  signing_key:
82
69
  specification_version: 4
83
- summary: Machinist for Mongoid 3.x
70
+ summary: Machinist for Mongoid 3 and 4
84
71
  test_files:
85
72
  - spec/mongoid_spec.rb
86
73
  - spec/spec_helper.rb