ar-octopus 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +11 -0
- data/.travis.yml +22 -0
- data/Appraisals +18 -0
- data/Gemfile +3 -12
- data/README.mkdn +63 -24
- data/Rakefile +70 -92
- data/ar-octopus.gemspec +25 -198
- data/lib/ar-octopus.rb +1 -0
- data/lib/octopus.rb +73 -25
- data/lib/octopus/association.rb +6 -5
- data/lib/octopus/association_collection.rb +58 -4
- data/lib/octopus/has_and_belongs_to_many_association.rb +4 -4
- data/lib/octopus/logger.rb +9 -4
- data/lib/octopus/migration.rb +155 -50
- data/lib/octopus/model.rb +98 -34
- data/lib/octopus/proxy.rb +124 -53
- data/lib/octopus/rails2/association.rb +46 -93
- data/lib/octopus/rails2/persistence.rb +1 -1
- data/lib/octopus/rails2/scope.rb +17 -0
- data/lib/octopus/rails3.1/singular_association.rb +34 -0
- data/lib/octopus/rails3.2/persistence.rb +12 -0
- data/lib/octopus/rails3/abstract_adapter.rb +39 -0
- data/lib/octopus/rails3/arel.rb +5 -5
- data/lib/octopus/rails3/log_subscriber.rb +22 -0
- data/lib/octopus/rails3/persistence.rb +10 -5
- data/lib/octopus/railtie.rb +13 -0
- data/lib/octopus/scope_proxy.rb +22 -16
- data/lib/octopus/version.rb +3 -0
- data/lib/tasks/octopus.rake +20 -0
- data/sample_app/Gemfile +2 -2
- data/sample_app/config/initializers/inflections.rb +1 -1
- data/sample_app/config/initializers/secret_token.rb +1 -1
- data/sample_app/db/migrate/20100720172730_create_items.rb +1 -1
- data/sample_app/db/migrate/20100720210335_create_sample_users.rb +1 -1
- data/sample_app/db/seeds.rb +1 -1
- data/sample_app/features/migrate.feature +12 -12
- data/sample_app/features/seed.feature +3 -3
- data/sample_app/features/step_definitions/web_steps.rb +5 -5
- data/sample_app/features/support/env.rb +8 -8
- data/sample_app/lib/tasks/cucumber.rake +2 -2
- data/sample_app/public/javascripts/effects.js +1 -1
- data/spec/config/shards.yml +38 -28
- data/spec/migrations/11_add_field_in_all_slaves.rb +1 -1
- data/spec/migrations/12_create_users_using_block.rb +2 -2
- data/spec/migrations/13_create_users_using_block_and_using.rb +2 -2
- data/spec/migrations/14_create_users_on_shards_of_a_group_with_versions.rb +11 -0
- data/spec/migrations/1_create_users_on_master.rb +1 -1
- data/spec/migrations/2_create_users_on_canada.rb +1 -1
- data/spec/migrations/3_create_users_on_both_shards.rb +1 -1
- data/spec/migrations/4_create_users_on_shards_of_a_group.rb +1 -1
- data/spec/migrations/5_create_users_on_multiples_groups.rb +1 -1
- data/spec/migrations/6_raise_exception_with_invalid_shard_name.rb +1 -1
- data/spec/migrations/7_raise_exception_with_invalid_multiple_shard_names.rb +1 -1
- data/spec/migrations/8_raise_exception_with_invalid_group_name.rb +1 -1
- data/spec/migrations/9_raise_exception_with_multiple_invalid_group_names.rb +1 -1
- data/spec/octopus/association_spec.rb +88 -70
- data/spec/octopus/log_subscriber_spec.rb +22 -0
- data/spec/octopus/logger_spec.rb +28 -15
- data/spec/octopus/migration_spec.rb +47 -43
- data/spec/octopus/model_spec.rb +179 -13
- data/spec/octopus/octopus_spec.rb +26 -4
- data/spec/octopus/proxy_spec.rb +61 -23
- data/spec/octopus/{replication_specs.rb → replication_spec.rb} +33 -26
- data/spec/octopus/scope_proxy_spec.rb +3 -3
- data/spec/octopus/sharded_spec.rb +9 -9
- data/spec/spec_helper.rb +10 -12
- data/spec/support/active_record/connection_adapters/modify_config_adapter.rb +17 -0
- data/spec/support/database_connection.rb +2 -0
- data/spec/{database_models.rb → support/database_models.rb} +27 -2
- data/spec/support/octopus_helper.rb +50 -0
- data/spec/tasks/octopus.rake_spec.rb +36 -0
- metadata +188 -169
- data/Gemfile.lock +0 -68
- data/lib/octopus/rails3/association.rb +0 -112
- data/spec/database_connection.rb +0 -4
- data/spec/octopus/controller_spec.rb +0 -34
- data/spec/octopus_helper.rb +0 -37
@@ -1,6 +1,6 @@
|
|
1
1
|
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
|
2
|
-
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
-
# newer version of cucumber-rails. Consider adding your own code to a new file
|
2
|
+
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
+
# newer version of cucumber-rails. Consider adding your own code to a new file
|
4
4
|
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
5
5
|
# files.
|
6
6
|
|
@@ -24,7 +24,7 @@ require 'aruba/cucumber'
|
|
24
24
|
# steps to use the XPath syntax.
|
25
25
|
Capybara.default_selector = :css
|
26
26
|
|
27
|
-
# If you set this to false, any error raised from within your app will bubble
|
27
|
+
# If you set this to false, any error raised from within your app will bubble
|
28
28
|
# up to your step definition and out to cucumber unless you catch it somewhere
|
29
29
|
# on the way. You can make Rails rescue errors and render error pages on a
|
30
30
|
# per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
|
@@ -36,15 +36,15 @@ Capybara.default_selector = :css
|
|
36
36
|
ActionController::Base.allow_rescue = false
|
37
37
|
|
38
38
|
# If you set this to true, each scenario will run in a database transaction.
|
39
|
-
# You can still turn off transactions on a per-scenario basis, simply tagging
|
39
|
+
# You can still turn off transactions on a per-scenario basis, simply tagging
|
40
40
|
# a feature or scenario with the @no-txn tag. If you are using Capybara,
|
41
41
|
# tagging with @culerity or @javascript will also turn transactions off.
|
42
42
|
#
|
43
43
|
# If you set this to false, transactions will be off for all scenarios,
|
44
44
|
# regardless of whether you use @no-txn or not.
|
45
45
|
#
|
46
|
-
# Beware that turning transactions off will leave data in your database
|
47
|
-
# after each scenario, which can lead to hard-to-debug failures in
|
46
|
+
# Beware that turning transactions off will leave data in your database
|
47
|
+
# after each scenario, which can lead to hard-to-debug failures in
|
48
48
|
# subsequent scenarios. If you do this, we recommend you create a Before
|
49
49
|
# block that will explicitly put your database in a known state.
|
50
50
|
Cucumber::Rails::World.use_transactional_fixtures = true
|
@@ -58,14 +58,14 @@ if defined?(ActiveRecord::Base)
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
After do
|
61
|
+
After do
|
62
62
|
`rm #{Rails.root.to_s}/db/america.sqlite3`
|
63
63
|
`rm #{Rails.root.to_s}/db/asia.sqlite3`
|
64
64
|
`rm #{Rails.root.to_s}/db/development.sqlite3`
|
65
65
|
`rm #{Rails.root.to_s}/db/europe.sqlite3`
|
66
66
|
end
|
67
67
|
|
68
|
-
Before do
|
68
|
+
Before do
|
69
69
|
`rm #{Rails.root.to_s}/db/america.sqlite3`
|
70
70
|
`rm #{Rails.root.to_s}/db/asia.sqlite3`
|
71
71
|
`rm #{Rails.root.to_s}/db/development.sqlite3`
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
|
2
|
-
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
-
# newer version of cucumber-rails. Consider adding your own code to a new file
|
2
|
+
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
+
# newer version of cucumber-rails. Consider adding your own code to a new file
|
4
4
|
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
5
5
|
# files.
|
6
6
|
|
@@ -150,7 +150,7 @@ var Effect = {
|
|
150
150
|
toggle: function(element, effect, options) {
|
151
151
|
element = $(element);
|
152
152
|
effect = (effect || 'appear').toLowerCase();
|
153
|
-
|
153
|
+
|
154
154
|
return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({
|
155
155
|
queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
|
156
156
|
}, options || {}));
|
data/spec/config/shards.yml
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
mysql: &mysql
|
2
|
-
adapter:
|
2
|
+
adapter: mysql
|
3
|
+
username: <%= ENV['MYSQL_USER'] || 'root' %>
|
3
4
|
host: localhost
|
4
5
|
|
5
6
|
octopus:
|
6
7
|
shards:
|
7
8
|
alone_shard:
|
8
|
-
database:
|
9
|
+
database: octopus_shard_5
|
9
10
|
<<: *mysql
|
10
11
|
|
11
12
|
postgresql_shard:
|
12
13
|
adapter: postgresql
|
13
|
-
username: <%= ENV['POSTGRES_USER'] || 'postgres'%>
|
14
|
+
username: <%= ENV['POSTGRES_USER'] || 'postgres' %>
|
14
15
|
password:
|
15
|
-
database:
|
16
|
+
database: octopus_shard_1
|
16
17
|
encoding: unicode
|
17
18
|
|
18
19
|
sqlite_shard:
|
@@ -21,37 +22,38 @@ octopus:
|
|
21
22
|
|
22
23
|
history_shards:
|
23
24
|
aug2009:
|
24
|
-
database:
|
25
|
+
database: octopus_shard_2
|
25
26
|
<<: *mysql
|
26
27
|
aug2010:
|
27
|
-
database:
|
28
|
+
database: octopus_shard_3
|
28
29
|
<<: *mysql
|
29
30
|
aug2011:
|
30
|
-
database:
|
31
|
+
database: octopus_shard_4
|
31
32
|
<<: *mysql
|
32
33
|
|
33
34
|
country_shards:
|
34
35
|
canada:
|
35
|
-
database:
|
36
|
+
database: octopus_shard_2
|
36
37
|
<<: *mysql
|
37
38
|
brazil:
|
38
|
-
database:
|
39
|
+
database: octopus_shard_3
|
39
40
|
<<: *mysql
|
40
41
|
russia:
|
41
|
-
database:
|
42
|
+
database: octopus_shard_4
|
42
43
|
<<: *mysql
|
43
44
|
|
45
|
+
protocol_shard: postgres://<%= ENV['POSTGRES_USER'] || 'postgres' %>@localhost:5432/octopus_shard_2
|
44
46
|
|
45
47
|
production_raise_error:
|
46
48
|
shards:
|
47
49
|
history_shards:
|
48
50
|
duplicated_shard_name:
|
49
|
-
database:
|
51
|
+
database: octopus_shard_5
|
50
52
|
<<: *mysql
|
51
53
|
|
52
54
|
country_shards:
|
53
55
|
duplicated_shard_name:
|
54
|
-
database:
|
56
|
+
database: octopus_shard_4
|
55
57
|
<<: *mysql
|
56
58
|
|
57
59
|
production_replicated:
|
@@ -60,16 +62,16 @@ production_replicated:
|
|
60
62
|
|
61
63
|
shards:
|
62
64
|
slave1:
|
63
|
-
database:
|
65
|
+
database: octopus_shard_2
|
64
66
|
<<: *mysql
|
65
67
|
slave2:
|
66
|
-
database:
|
68
|
+
database: octopus_shard_3
|
67
69
|
<<: *mysql
|
68
70
|
slave3:
|
69
|
-
database:
|
71
|
+
database: octopus_shard_4
|
70
72
|
<<: *mysql
|
71
73
|
slave4:
|
72
|
-
database:
|
74
|
+
database: octopus_shard_5
|
73
75
|
<<: *mysql
|
74
76
|
|
75
77
|
|
@@ -77,16 +79,16 @@ production_fully_replicated:
|
|
77
79
|
replicated: true
|
78
80
|
shards:
|
79
81
|
slave1:
|
80
|
-
database:
|
82
|
+
database: octopus_shard_2
|
81
83
|
<<: *mysql
|
82
84
|
slave2:
|
83
|
-
database:
|
85
|
+
database: octopus_shard_3
|
84
86
|
<<: *mysql
|
85
87
|
slave3:
|
86
|
-
database:
|
88
|
+
database: octopus_shard_4
|
87
89
|
<<: *mysql
|
88
90
|
slave4:
|
89
|
-
database:
|
91
|
+
database: octopus_shard_5
|
90
92
|
<<: *mysql
|
91
93
|
|
92
94
|
octopus_rails:
|
@@ -98,32 +100,40 @@ octopus_rails:
|
|
98
100
|
|
99
101
|
staging:
|
100
102
|
slave1:
|
101
|
-
database:
|
103
|
+
database: octopus_shard_2
|
102
104
|
<<: *mysql
|
103
105
|
slave2:
|
104
|
-
database:
|
106
|
+
database: octopus_shard_3
|
105
107
|
<<: *mysql
|
106
108
|
|
107
109
|
production:
|
108
110
|
slave3:
|
109
|
-
database:
|
111
|
+
database: octopus_shard_4
|
110
112
|
<<: *mysql
|
111
113
|
slave4:
|
112
|
-
database:
|
114
|
+
database: octopus_shard_5
|
113
115
|
<<: *mysql
|
114
116
|
|
115
117
|
not_entire_sharded:
|
116
118
|
entire_sharded: false
|
117
119
|
shards:
|
118
120
|
europe:
|
119
|
-
database:
|
121
|
+
database: octopus_shard_2
|
120
122
|
<<: *mysql
|
121
123
|
canada:
|
122
|
-
database:
|
124
|
+
database: octopus_shard_3
|
123
125
|
<<: *mysql
|
124
126
|
brazil:
|
125
|
-
database:
|
127
|
+
database: octopus_shard_4
|
126
128
|
<<: *mysql
|
127
129
|
russia:
|
128
|
-
database:
|
130
|
+
database: octopus_shard_5
|
129
131
|
<<: *mysql
|
132
|
+
|
133
|
+
modify_config:
|
134
|
+
replicated: true
|
135
|
+
shards:
|
136
|
+
modify_config_read:
|
137
|
+
adapter: modify_config
|
138
|
+
database: octopus_shard_1
|
139
|
+
host: localhost
|
@@ -4,7 +4,7 @@ class CreateUsersUsingBlock < ActiveRecord::Migration
|
|
4
4
|
User.create!(:name => "UsingBlock1")
|
5
5
|
User.create!(:name => "UsingBlock2")
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
Octopus.using(:canada) do
|
9
9
|
User.create!(:name => "UsingCanada")
|
10
10
|
User.create!(:name => "UsingCanada2")
|
@@ -15,7 +15,7 @@ class CreateUsersUsingBlock < ActiveRecord::Migration
|
|
15
15
|
Octopus.using(:brazil) do
|
16
16
|
User.delete_all()
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
Octopus.using(:canada) do
|
20
20
|
User.delete_all()
|
21
21
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
describe Octopus::Association do
|
3
|
+
describe Octopus::Association, :shards => [:brazil, :master, :canada] do
|
4
4
|
describe "when you have a 1 x 1 relationship" do
|
5
5
|
before(:each) do
|
6
6
|
@computer_brazil = Computer.using(:brazil).create!(:name => "Computer Brazil")
|
7
7
|
@computer_master = Computer.create!(:name => "Computer Brazil")
|
8
8
|
@keyboard_brazil = Keyboard.using(:brazil).create!(:name => "Keyboard Brazil", :computer => @computer_brazil)
|
9
9
|
@keyboard_master = Keyboard.create!(:name => "Keyboard Master", :computer => @computer_master)
|
10
|
-
end
|
10
|
+
end
|
11
11
|
|
12
12
|
it "should find the models" do
|
13
13
|
@keyboard_master.computer.should == @computer_master
|
@@ -23,7 +23,7 @@ describe Octopus::Association do
|
|
23
23
|
@keyboard_brazil.computer_id.should == new_computer_brazil.id
|
24
24
|
@keyboard_brazil.computer.should == new_computer_brazil
|
25
25
|
new_computer_brazil.save()
|
26
|
-
new_computer_brazil.reload
|
26
|
+
new_computer_brazil.reload
|
27
27
|
new_computer_brazil.keyboard.should == @keyboard_brazil
|
28
28
|
end
|
29
29
|
|
@@ -46,6 +46,17 @@ describe Octopus::Association do
|
|
46
46
|
k.computer_id.should == c.id
|
47
47
|
k.computer.should == c
|
48
48
|
end
|
49
|
+
|
50
|
+
if Octopus.rails3?
|
51
|
+
it "should include models" do
|
52
|
+
c = Computer.using(:brazil).create!(:name => "Computer Brazil")
|
53
|
+
k = c.create_keyboard(:name => "Building keyboard")
|
54
|
+
c.save()
|
55
|
+
k.save()
|
56
|
+
|
57
|
+
Computer.includes(:keyboard).find(c.id).should == c
|
58
|
+
end
|
59
|
+
end
|
49
60
|
end
|
50
61
|
|
51
62
|
describe "when you have a N x N reliationship" do
|
@@ -56,7 +67,7 @@ describe Octopus::Association do
|
|
56
67
|
@permission_master = Permission.using(:master).create!(:name => "Master Permission")
|
57
68
|
@brazil_role.permissions << @permission_brazil
|
58
69
|
@brazil_role.save()
|
59
|
-
Client.using(:master).create!(:name => "teste")
|
70
|
+
Client.using(:master).create!(:name => "teste")
|
60
71
|
end
|
61
72
|
|
62
73
|
it "should find all models in the specified shard" do
|
@@ -122,12 +133,12 @@ describe Octopus::Association do
|
|
122
133
|
|
123
134
|
it "create" do
|
124
135
|
role = @permission_brazil_2.roles.create(:name => "Builded Role")
|
125
|
-
@permission_brazil_2.roles.to_set.should == [role].to_set
|
136
|
+
@permission_brazil_2.roles.to_set.should == [role].to_set
|
126
137
|
end
|
127
138
|
|
128
139
|
it "create" do
|
129
140
|
role = @permission_brazil_2.roles.create!(:name => "Builded Role")
|
130
|
-
@permission_brazil_2.roles.to_set.should == [role].to_set
|
141
|
+
@permission_brazil_2.roles.to_set.should == [role].to_set
|
131
142
|
end
|
132
143
|
|
133
144
|
it "count" do
|
@@ -163,37 +174,37 @@ describe Octopus::Association do
|
|
163
174
|
|
164
175
|
it "delete_all" do
|
165
176
|
role = @permission_brazil_2.roles.create(:name => "Builded Role")
|
166
|
-
@permission_brazil_2.roles.empty?.should be_false
|
167
|
-
@permission_brazil_2.roles.delete_all
|
177
|
+
@permission_brazil_2.roles.empty?.should be_false
|
178
|
+
@permission_brazil_2.roles.delete_all
|
168
179
|
@permission_brazil_2.roles.empty?.should be_true
|
169
180
|
end
|
170
181
|
|
171
182
|
it "destroy_all" do
|
172
183
|
role = @permission_brazil_2.roles.create(:name => "Builded Role")
|
173
|
-
@permission_brazil_2.roles.empty?.should be_false
|
174
|
-
@permission_brazil_2.roles.destroy_all
|
184
|
+
@permission_brazil_2.roles.empty?.should be_false
|
185
|
+
@permission_brazil_2.roles.destroy_all
|
175
186
|
@permission_brazil_2.roles.empty?.should be_true
|
176
187
|
end
|
177
188
|
|
178
189
|
it "find" do
|
179
190
|
role = @permission_brazil_2.roles.create(:name => "Builded Role")
|
180
191
|
@permission_brazil_2.roles.find(:first).should == role
|
181
|
-
@permission_brazil_2.roles.destroy_all
|
192
|
+
@permission_brazil_2.roles.destroy_all
|
182
193
|
@permission_brazil_2.roles.find(:first).should be_nil
|
183
194
|
end
|
184
195
|
|
185
196
|
it "exists?" do
|
186
197
|
role = @permission_brazil_2.roles.create(:name => "Builded Role")
|
187
198
|
@permission_brazil_2.roles.exists?(role).should be_true
|
188
|
-
@permission_brazil_2.roles.destroy_all
|
189
|
-
@permission_brazil_2.roles.exists?(role).should be_false
|
199
|
+
@permission_brazil_2.roles.destroy_all
|
200
|
+
@permission_brazil_2.roles.exists?(role).should be_false
|
190
201
|
end
|
191
202
|
|
192
203
|
it "clear" do
|
193
204
|
role = @permission_brazil_2.roles.create(:name => "Builded Role")
|
194
|
-
@permission_brazil_2.roles.empty?.should be_false
|
195
|
-
@permission_brazil_2.roles.clear
|
196
|
-
@permission_brazil_2.roles.empty?.should be_true
|
205
|
+
@permission_brazil_2.roles.empty?.should be_false
|
206
|
+
@permission_brazil_2.roles.clear
|
207
|
+
@permission_brazil_2.roles.empty?.should be_true
|
197
208
|
end
|
198
209
|
|
199
210
|
it "delete" do
|
@@ -277,12 +288,12 @@ describe Octopus::Association do
|
|
277
288
|
|
278
289
|
it "create" do
|
279
290
|
role = @new_brazil_programmer.projects.create(:name => "New VB App :-/")
|
280
|
-
@new_brazil_programmer.projects.to_set.should == [role].to_set
|
291
|
+
@new_brazil_programmer.projects.to_set.should == [role].to_set
|
281
292
|
end
|
282
293
|
|
283
294
|
it "create" do
|
284
295
|
role = @new_brazil_programmer.projects.create!(:name => "New VB App :-/")
|
285
|
-
@new_brazil_programmer.projects.to_set.should == [role].to_set
|
296
|
+
@new_brazil_programmer.projects.to_set.should == [role].to_set
|
286
297
|
end
|
287
298
|
|
288
299
|
it "count" do
|
@@ -318,37 +329,37 @@ describe Octopus::Association do
|
|
318
329
|
|
319
330
|
it "delete_all" do
|
320
331
|
role = @new_brazil_programmer.projects.create(:name => "New VB App :-/")
|
321
|
-
@new_brazil_programmer.projects.empty?.should be_false
|
322
|
-
@new_brazil_programmer.projects.delete_all
|
332
|
+
@new_brazil_programmer.projects.empty?.should be_false
|
333
|
+
@new_brazil_programmer.projects.delete_all
|
323
334
|
@new_brazil_programmer.projects.empty?.should be_true
|
324
335
|
end
|
325
336
|
|
326
337
|
it "destroy_all" do
|
327
338
|
role = @new_brazil_programmer.projects.create(:name => "New VB App :-/")
|
328
|
-
@new_brazil_programmer.projects.empty?.should be_false
|
329
|
-
@new_brazil_programmer.projects.destroy_all
|
339
|
+
@new_brazil_programmer.projects.empty?.should be_false
|
340
|
+
@new_brazil_programmer.projects.destroy_all
|
330
341
|
@new_brazil_programmer.projects.empty?.should be_true
|
331
342
|
end
|
332
343
|
|
333
344
|
it "find" do
|
334
345
|
role = @new_brazil_programmer.projects.create(:name => "New VB App :-/")
|
335
346
|
@new_brazil_programmer.projects.find(:first).should == role
|
336
|
-
@new_brazil_programmer.projects.destroy_all
|
347
|
+
@new_brazil_programmer.projects.destroy_all
|
337
348
|
@new_brazil_programmer.projects.find(:first).should be_nil
|
338
349
|
end
|
339
350
|
|
340
351
|
it "exists?" do
|
341
352
|
role = @new_brazil_programmer.projects.create(:name => "New VB App :-/")
|
342
353
|
@new_brazil_programmer.projects.exists?(role).should be_true
|
343
|
-
@new_brazil_programmer.projects.destroy_all
|
344
|
-
@new_brazil_programmer.projects.exists?(role).should be_false
|
354
|
+
@new_brazil_programmer.projects.destroy_all
|
355
|
+
@new_brazil_programmer.projects.exists?(role).should be_false
|
345
356
|
end
|
346
357
|
|
347
358
|
it "clear" do
|
348
359
|
role = @new_brazil_programmer.projects.create(:name => "New VB App :-/")
|
349
|
-
@new_brazil_programmer.projects.empty?.should be_false
|
350
|
-
@new_brazil_programmer.projects.clear
|
351
|
-
@new_brazil_programmer.projects.empty?.should be_true
|
360
|
+
@new_brazil_programmer.projects.empty?.should be_false
|
361
|
+
@new_brazil_programmer.projects.clear
|
362
|
+
@new_brazil_programmer.projects.empty?.should be_true
|
352
363
|
end
|
353
364
|
|
354
365
|
it "delete" do
|
@@ -370,7 +381,7 @@ describe Octopus::Association do
|
|
370
381
|
@item_brazil = Item.using(:brazil).create!(:name => "Brazil Item", :client => @brazil_client)
|
371
382
|
@item_master = Item.create!(:name => "Master Item", :client => @master_client)
|
372
383
|
@brazil_client = Client.using(:brazil).find_by_name("Brazil Client")
|
373
|
-
Client.using(:master).create!(:name => "teste")
|
384
|
+
Client.using(:master).create!(:name => "teste")
|
374
385
|
end
|
375
386
|
|
376
387
|
it "should find all models in the specified shard" do
|
@@ -383,7 +394,7 @@ describe Octopus::Association do
|
|
383
394
|
end
|
384
395
|
|
385
396
|
it "should raise error if you try to add a record from a different shard" do
|
386
|
-
lambda do
|
397
|
+
lambda do
|
387
398
|
@brazil_client.items << Item.using(:canada).create!(:name => "New User")
|
388
399
|
end.should raise_error("Association Error: Records are from different shards")
|
389
400
|
end
|
@@ -410,7 +421,7 @@ describe Octopus::Association do
|
|
410
421
|
describe "it should works when using" do
|
411
422
|
before(:each) do
|
412
423
|
@item_brazil_2 = Item.using(:brazil).create!(:name => "Brazil Item 2")
|
413
|
-
@brazil_client.items.to_set.should == [@item_brazil].to_set
|
424
|
+
@brazil_client.items.to_set.should == [@item_brazil].to_set
|
414
425
|
end
|
415
426
|
|
416
427
|
|
@@ -439,7 +450,7 @@ describe Octopus::Association do
|
|
439
450
|
|
440
451
|
it "create" do
|
441
452
|
item = @brazil_client.items.create(:name => "Builded Item")
|
442
|
-
@brazil_client.items.to_set.should == [@item_brazil, item].to_set
|
453
|
+
@brazil_client.items.to_set.should == [@item_brazil, item].to_set
|
443
454
|
end
|
444
455
|
|
445
456
|
it "count" do
|
@@ -449,20 +460,20 @@ describe Octopus::Association do
|
|
449
460
|
end
|
450
461
|
|
451
462
|
it "size" do
|
452
|
-
@brazil_client.items.size.should == 1
|
463
|
+
@brazil_client.items.size.should == 1
|
453
464
|
item = @brazil_client.items.create(:name => "Builded Item")
|
454
|
-
@brazil_client.items.size.should == 2
|
465
|
+
@brazil_client.items.size.should == 2
|
455
466
|
end
|
456
467
|
|
457
468
|
it "create!" do
|
458
469
|
item = @brazil_client.items.create!(:name => "Builded Item")
|
459
|
-
@brazil_client.items.to_set.should == [@item_brazil, item].to_set
|
470
|
+
@brazil_client.items.to_set.should == [@item_brazil, item].to_set
|
460
471
|
end
|
461
472
|
|
462
473
|
it "length" do
|
463
|
-
@brazil_client.items.length.should == 1
|
474
|
+
@brazil_client.items.length.should == 1
|
464
475
|
item = @brazil_client.items.create(:name => "Builded Item")
|
465
|
-
@brazil_client.items.length.should == 2
|
476
|
+
@brazil_client.items.length.should == 2
|
466
477
|
end
|
467
478
|
|
468
479
|
it "empty?" do
|
@@ -482,37 +493,37 @@ describe Octopus::Association do
|
|
482
493
|
end
|
483
494
|
|
484
495
|
it "delete_all" do
|
485
|
-
@brazil_client.items.empty?.should be_false
|
486
|
-
@brazil_client.items.delete_all
|
496
|
+
@brazil_client.items.empty?.should be_false
|
497
|
+
@brazil_client.items.delete_all
|
487
498
|
@brazil_client.items.empty?.should be_true
|
488
499
|
end
|
489
500
|
|
490
501
|
it "destroy_all" do
|
491
|
-
@brazil_client.items.empty?.should be_false
|
492
|
-
@brazil_client.items.destroy_all
|
502
|
+
@brazil_client.items.empty?.should be_false
|
503
|
+
@brazil_client.items.destroy_all
|
493
504
|
@brazil_client.items.empty?.should be_true
|
494
505
|
end
|
495
506
|
|
496
507
|
it "find" do
|
497
508
|
@brazil_client.items.find(:first).should == @item_brazil
|
498
|
-
@brazil_client.items.destroy_all
|
509
|
+
@brazil_client.items.destroy_all
|
499
510
|
@brazil_client.items.find(:first).should be_nil
|
500
511
|
end
|
501
512
|
|
502
513
|
it "exists?" do
|
503
514
|
@brazil_client.items.exists?(@item_brazil).should be_true
|
504
|
-
@brazil_client.items.destroy_all
|
505
|
-
@brazil_client.items.exists?(@item_brazil).should be_false
|
515
|
+
@brazil_client.items.destroy_all
|
516
|
+
@brazil_client.items.exists?(@item_brazil).should be_false
|
506
517
|
end
|
507
518
|
|
508
519
|
it "uniq" do
|
509
|
-
@brazil_client.items.uniq.should == [@item_brazil]
|
510
|
-
end
|
520
|
+
@brazil_client.items.uniq.should == [@item_brazil]
|
521
|
+
end
|
511
522
|
|
512
523
|
it "clear" do
|
513
|
-
@brazil_client.items.empty?.should be_false
|
514
|
-
@brazil_client.items.clear
|
515
|
-
@brazil_client.items.empty?.should be_true
|
524
|
+
@brazil_client.items.empty?.should be_false
|
525
|
+
@brazil_client.items.clear
|
526
|
+
@brazil_client.items.empty?.should be_true
|
516
527
|
end
|
517
528
|
end
|
518
529
|
end
|
@@ -524,7 +535,7 @@ describe Octopus::Association do
|
|
524
535
|
@comment_brazil = Comment.using(:brazil).create!(:name => "Brazil Comment", :commentable => @brazil_client)
|
525
536
|
@comment_master = Comment.create!(:name => "Master Comment", :commentable => @master_client)
|
526
537
|
@brazil_client = Client.using(:brazil).find_by_name("Brazil Client")
|
527
|
-
Client.using(:master).create!(:name => "teste")
|
538
|
+
Client.using(:master).create!(:name => "teste")
|
528
539
|
end
|
529
540
|
|
530
541
|
it "should find all models in the specified shard" do
|
@@ -549,7 +560,7 @@ describe Octopus::Association do
|
|
549
560
|
describe "it should works when using" do
|
550
561
|
before(:each) do
|
551
562
|
@comment_brazil_2 = Comment.using(:brazil).create!(:name => "Brazil Comment 2")
|
552
|
-
@brazil_client.comments.to_set.should == [@comment_brazil].to_set
|
563
|
+
@brazil_client.comments.to_set.should == [@comment_brazil].to_set
|
553
564
|
end
|
554
565
|
|
555
566
|
it "update_attributes" do
|
@@ -577,7 +588,7 @@ describe Octopus::Association do
|
|
577
588
|
|
578
589
|
it "create" do
|
579
590
|
comment = @brazil_client.comments.create(:name => "Builded Comment")
|
580
|
-
@brazil_client.comments.to_set.should == [@comment_brazil, comment].to_set
|
591
|
+
@brazil_client.comments.to_set.should == [@comment_brazil, comment].to_set
|
581
592
|
end
|
582
593
|
|
583
594
|
it "count" do
|
@@ -587,20 +598,20 @@ describe Octopus::Association do
|
|
587
598
|
end
|
588
599
|
|
589
600
|
it "size" do
|
590
|
-
@brazil_client.comments.size.should == 1
|
601
|
+
@brazil_client.comments.size.should == 1
|
591
602
|
comment = @brazil_client.comments.create(:name => "Builded Comment")
|
592
|
-
@brazil_client.comments.size.should == 2
|
603
|
+
@brazil_client.comments.size.should == 2
|
593
604
|
end
|
594
605
|
|
595
606
|
it "create!" do
|
596
607
|
comment = @brazil_client.comments.create!(:name => "Builded Comment")
|
597
|
-
@brazil_client.comments.to_set.should == [@comment_brazil, comment].to_set
|
608
|
+
@brazil_client.comments.to_set.should == [@comment_brazil, comment].to_set
|
598
609
|
end
|
599
610
|
|
600
611
|
it "length" do
|
601
|
-
@brazil_client.comments.length.should == 1
|
612
|
+
@brazil_client.comments.length.should == 1
|
602
613
|
comment = @brazil_client.comments.create(:name => "Builded Comment")
|
603
|
-
@brazil_client.comments.length.should == 2
|
614
|
+
@brazil_client.comments.length.should == 2
|
604
615
|
end
|
605
616
|
|
606
617
|
it "empty?" do
|
@@ -620,38 +631,45 @@ describe Octopus::Association do
|
|
620
631
|
end
|
621
632
|
|
622
633
|
it "delete_all" do
|
623
|
-
@brazil_client.comments.empty?.should be_false
|
624
|
-
@brazil_client.comments.delete_all
|
634
|
+
@brazil_client.comments.empty?.should be_false
|
635
|
+
@brazil_client.comments.delete_all
|
625
636
|
@brazil_client.comments.empty?.should be_true
|
626
637
|
end
|
627
638
|
|
628
639
|
it "destroy_all" do
|
629
|
-
@brazil_client.comments.empty?.should be_false
|
630
|
-
@brazil_client.comments.destroy_all
|
640
|
+
@brazil_client.comments.empty?.should be_false
|
641
|
+
@brazil_client.comments.destroy_all
|
631
642
|
@brazil_client.comments.empty?.should be_true
|
632
643
|
end
|
633
644
|
|
634
645
|
it "find" do
|
635
646
|
@brazil_client.comments.find(:first).should == @comment_brazil
|
636
|
-
@brazil_client.comments.destroy_all
|
647
|
+
@brazil_client.comments.destroy_all
|
637
648
|
@brazil_client.comments.find(:first).should be_nil
|
638
649
|
end
|
639
650
|
|
640
651
|
it "exists?" do
|
641
652
|
@brazil_client.comments.exists?(@comment_brazil).should be_true
|
642
|
-
@brazil_client.comments.destroy_all
|
643
|
-
@brazil_client.comments.exists?(@comment_brazil).should be_false
|
653
|
+
@brazil_client.comments.destroy_all
|
654
|
+
@brazil_client.comments.exists?(@comment_brazil).should be_false
|
644
655
|
end
|
645
656
|
|
646
657
|
it "uniq" do
|
647
|
-
@brazil_client.comments.uniq.should == [@comment_brazil]
|
648
|
-
end
|
658
|
+
@brazil_client.comments.uniq.should == [@comment_brazil]
|
659
|
+
end
|
649
660
|
|
650
661
|
it "clear" do
|
651
|
-
@brazil_client.comments.empty?.should be_false
|
652
|
-
@brazil_client.comments.clear
|
653
|
-
@brazil_client.comments.empty?.should be_true
|
662
|
+
@brazil_client.comments.empty?.should be_false
|
663
|
+
@brazil_client.comments.clear
|
664
|
+
@brazil_client.comments.empty?.should be_true
|
654
665
|
end
|
655
666
|
end
|
656
667
|
end
|
668
|
+
|
669
|
+
it "block" do
|
670
|
+
@brazil_role = Role.using(:brazil).create!(:name => "Brazil Role")
|
671
|
+
@brazil_role.permissions.build(:name => "ok").name.should == "ok"
|
672
|
+
@brazil_role.permissions.create(:name => "ok").name.should == "ok"
|
673
|
+
@brazil_role.permissions.create!(:name => "ok").name.should == "ok"
|
674
|
+
end
|
657
675
|
end
|