active_model_association_adapters 0.0.2 → 0.0.3

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.
@@ -1,3 +1,3 @@
1
1
  module ActiveModelAssociationAdapters
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -49,16 +49,16 @@ module ActiveRecord
49
49
 
50
50
  module ClassMethods
51
51
 
52
- def has_one_document(name)
52
+ def has_one_document(name, options={})
53
53
  __has_one_documents.delete(name)
54
54
  __has_one_documents.push(name)
55
- add_has_one_accessors_for(name)
55
+ add_has_one_accessors_for(name, options)
56
56
  end
57
57
 
58
- def has_many_documents(name)
58
+ def has_many_documents(name, options={})
59
59
  __has_many_documents.delete(name)
60
60
  __has_many_documents.push(name)
61
- add_has_many_accessors_for(name)
61
+ add_has_many_accessors_for(name, options)
62
62
  end
63
63
 
64
64
  private
@@ -71,10 +71,10 @@ module ActiveRecord
71
71
  @__has_many_documents ||= Array.new
72
72
  end
73
73
 
74
- def add_has_many_accessors_for(name)
74
+ def add_has_many_accessors_for(name, options={})
75
75
  class_eval %Q{
76
76
  def #{name}
77
- @#{name} ||= #{name.to_s.classify}.where( (self.class.to_s.underscore + "_id").to_sym => id)
77
+ @#{name} ||= #{options[:class_name] ? options[:class_name] : name.to_s.classify}.where( (self.class.to_s.underscore + "_id").to_sym => id)
78
78
  end
79
79
 
80
80
  def #{name}=(others)
@@ -92,10 +92,10 @@ module ActiveRecord
92
92
  }
93
93
  end
94
94
 
95
- def add_has_one_accessors_for(name)
95
+ def add_has_one_accessors_for(name, options={})
96
96
  class_eval %Q{
97
97
  def #{name}
98
- @#{name} ||= #{name.to_s.classify}.first(:conditions => {(self.class.to_s.underscore + "_id").to_sym => id})
98
+ @#{name} ||= #{options[:class_name] ? options[:class_name] : name.to_s.classify}.first(:conditions => {(self.class.to_s.underscore + "_id").to_sym => id})
99
99
  end
100
100
 
101
101
  def #{name}=(other)
@@ -2,132 +2,166 @@ require 'spec_helper'
2
2
 
3
3
  describe ActiveModelAssociationAdapters do
4
4
 
5
+ ActiveRecord::Base.send(:include, ActiveRecord::Adapters::Mongoid::Associations)
6
+
5
7
  describe "ActiveRecord to Mongoid adapters" do
6
8
  describe "has_one_document" do
7
- class Monkey < ActiveRecord::Base
8
- include ActiveRecord::Adapters::Mongoid::Associations
9
- has_one_document :banana
10
- end
11
-
12
- class Banana
13
- include Mongoid::Document
14
- field :monkey_id, :type => Integer
15
- end
16
-
17
- subject {Monkey.new}
9
+ context "simple cases" do
10
+ class Monkey < ActiveRecord::Base
11
+ has_one_document :banana
12
+ end
18
13
 
19
- it "should have :banana in its @__has_one_documents" do
20
- subject.class.instance_variable_get(:@__has_one_documents).should eql([:banana])
21
- end
14
+ class Banana
15
+ include Mongoid::Document
16
+ field :monkey_id, :type => Integer
17
+ end
22
18
 
23
- it "should respond_to :banana" do
24
- subject.should respond_to(:banana)
25
- end
19
+ subject {Monkey.new}
26
20
 
27
- it "should respond_to :banana=" do
28
- subject.should respond_to(:banana=)
29
- end
30
-
31
- its(:banana) {should be_nil}
21
+ it "should have :banana in its @__has_one_documents" do
22
+ subject.class.instance_variable_get(:@__has_one_documents).should eql([:banana])
23
+ end
32
24
 
33
- describe "adding a banana" do
34
- let(:banana_1) {Banana.new}
35
- let(:banana_2) {Banana.new}
25
+ it "should respond_to :banana" do
26
+ subject.should respond_to(:banana)
27
+ end
36
28
 
37
- context "when unsaved" do
38
- context "without an existing banana" do
39
- it "should get a banana" do
40
- subject.banana = banana_1
41
- subject.banana.should eql banana_1
42
- end
43
- end
29
+ it "should respond_to :banana=" do
30
+ subject.should respond_to(:banana=)
31
+ end
44
32
 
45
- context "with an existing banana" do
46
- before(:each) do
47
- subject.banana = banana_1
48
- end
33
+ its(:banana) {should be_nil}
49
34
 
50
- it "swaps out the banana" do
51
- subject.banana = banana_2
52
- subject.banana.should eql banana_2
53
- end
54
- end
55
- end
35
+ describe "adding a banana" do
36
+ let(:banana_1) {Banana.new}
37
+ let(:banana_2) {Banana.new}
56
38
 
57
- context "when saved" do
58
- subject {Monkey.create}
59
- context "without an existing banana" do
60
- it "should get a banana" do
61
- subject.banana = banana_1
62
- subject.banana.should eql banana_1
39
+ context "when unsaved" do
40
+ context "without an existing banana" do
41
+ it "should get a banana" do
42
+ subject.banana = banana_1
43
+ subject.banana.should eql banana_1
44
+ end
63
45
  end
64
- end
65
46
 
66
- context "with an existing banana" do
67
- before(:each) do
68
- subject.banana = banana_1
69
- end
70
- it "swaps out the banana" do
71
- subject.banana = banana_2
72
- subject.banana.should eql banana_2
73
- end
47
+ context "with an existing banana" do
48
+ before(:each) do
49
+ subject.banana = banana_1
50
+ end
74
51
 
75
- it "modifies the new banana's monkey_id" do
76
- subject.banana.monkey_id.should eql(subject.id)
52
+ it "swaps out the banana" do
53
+ subject.banana = banana_2
54
+ subject.banana.should eql banana_2
55
+ end
77
56
  end
78
57
  end
79
58
 
80
- describe "saving" do
81
- context "when the banana is a new record" do
82
- it "saves the banana" do
83
- subject.banana = banana_1
84
- subject.save
85
- Banana.find(banana_1.id).monkey_id.should eql(subject.id)
59
+ context "when saved" do
60
+ subject {Monkey.create}
61
+ context "without an existing banana" do
62
+ it "should get a banana" do
63
+ subject.banana = banana_1
64
+ subject.banana.should eql banana_1
86
65
  end
87
66
  end
88
67
 
89
- context "when the banana is already saved" do
68
+ context "with an existing banana" do
90
69
  before(:each) do
91
- banana_1.save
70
+ subject.banana = banana_1
71
+ end
72
+ it "swaps out the banana" do
73
+ subject.banana = banana_2
74
+ subject.banana.should eql banana_2
92
75
  end
93
76
 
94
- it "saves the banana's new foreign key" do
95
- subject.banana = banana_1
96
- subject.save
97
- Banana.find(banana_1.id).monkey_id.should eql(subject.id)
77
+ it "modifies the new banana's monkey_id" do
78
+ subject.banana.monkey_id.should eql(subject.id)
98
79
  end
99
80
  end
100
81
 
101
- context "when switching bananas" do
102
- context "when the first banana is saved and the second is a new record" do
82
+ describe "saving" do
83
+ context "when the banana is a new record" do
84
+ it "saves the banana" do
85
+ subject.banana = banana_1
86
+ subject.save
87
+ Banana.find(banana_1.id).monkey_id.should eql(subject.id)
88
+ end
89
+ end
90
+
91
+ context "when the banana is already saved" do
103
92
  before(:each) do
104
93
  banana_1.save
94
+ end
95
+
96
+ it "saves the banana's new foreign key" do
105
97
  subject.banana = banana_1
106
98
  subject.save
107
- subject.banana = banana_2
108
- subject.save
99
+ Banana.find(banana_1.id).monkey_id.should eql(subject.id)
109
100
  end
101
+ end
110
102
 
111
- it "unsets the monkey_id for the first banana" do
112
- Banana.find(banana_1.id).monkey_id.should be_nil
113
- end
103
+ context "when switching bananas" do
104
+ context "when the first banana is saved and the second is a new record" do
105
+ before(:each) do
106
+ banana_1.save
107
+ subject.banana = banana_1
108
+ subject.save
109
+ subject.banana = banana_2
110
+ subject.save
111
+ end
112
+
113
+ it "unsets the monkey_id for the first banana" do
114
+ Banana.find(banana_1.id).monkey_id.should be_nil
115
+ end
116
+ end
114
117
  end
115
118
  end
116
119
  end
117
120
  end
118
- end
119
121
 
120
- describe "builder methods" do
121
- its(:build_banana) {should be_an_instance_of(Banana)}
122
- describe "create_banana" do
123
- it "should be an instance of Banana" do
124
- banana = subject.create_banana
125
- banana.should be_an_instance_of(Banana)
126
- banana.should_not be_new_record
127
- end
122
+ describe "builder methods" do
123
+ its(:build_banana) {should be_an_instance_of(Banana)}
124
+ describe "create_banana" do
125
+ it "should be an instance of Banana" do
126
+ banana = subject.create_banana
127
+ banana.should be_an_instance_of(Banana)
128
+ banana.should_not be_new_record
129
+ end
130
+ end
128
131
  end
129
132
  end
130
-
133
+
134
+ context "options" do
135
+ class FileThingie < ActiveRecord::Base
136
+ has_one_document :metadata, :class_name => "Metadata"
137
+ has_many_documents :reads, :class_name => "Access"
138
+ end
139
+
140
+ class Metadata
141
+ include Mongoid::Document
142
+ end
143
+
144
+ class Access
145
+ include Mongoid::Document
146
+ end
147
+
148
+ describe "class_name option" do
149
+ subject {FileThingie.create}
150
+ before(:each) do
151
+ Metadata.should_receive(:find).any_number_of_times
152
+ Access.should_receive(:find).any_number_of_times
153
+ end
154
+
155
+ it "defines has_one accessors with the provided class name" do
156
+ lambda {subject.metadata}.should_not raise_error(NameError)
157
+ end
158
+
159
+ it "defines has_one accessors with the provided class name" do
160
+ lambda {subject.reads}.should_not raise_error(NameError)
161
+ end
162
+ end
163
+ end
164
+
131
165
  end
132
166
 
133
167
  describe "has_many_documents" do
@@ -12,7 +12,7 @@ ActiveRecord::Base.establish_connection(
12
12
  :adapter => "sqlite3"
13
13
  )
14
14
 
15
- ar_tables = ["monkeys"]
15
+ ar_tables = ["monkeys", "file_thingies"]
16
16
 
17
17
  ar_tables.each do |table_name|
18
18
  ActiveRecord::Base.connection.create_table table_name, :force => true do |t|
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Scott Burton