active_model_association_adapters 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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