ar-octopus 0.3.0 → 0.3.1

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/Rakefile CHANGED
@@ -37,7 +37,7 @@ begin
37
37
  gem.add_development_dependency "jeweler", ">= 1.4"
38
38
  gem.add_development_dependency "actionpack", ">= 2.3"
39
39
  gem.add_dependency('activerecord', '>= 2.3')
40
- gem.version = "0.3.0"
40
+ gem.version = "0.3.1"
41
41
  end
42
42
  Jeweler::GemcutterTasks.new
43
43
  rescue LoadError
data/TODO.txt CHANGED
@@ -3,4 +3,6 @@
3
3
  - Automatic configuration file for shards.
4
4
  - Support specifics cases of sharding/replication.
5
5
  - Basic algorithm to do load balancing between slaves server (handling servers down)
6
- - Support replication + sharding
6
+ - Support replication + sharding
7
+ - Wiki about validation
8
+ - Show where the query is sent in the log
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ar-octopus}
8
- s.version = "0.3.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Thiago Pradi", "Mike Perham"]
12
- s.date = %q{2010-11-08}
12
+ s.date = %q{2010-12-02}
13
13
  s.description = %q{This gem allows you to use sharded databases with ActiveRecord. this also provides a interface for replication and for running migrations with multiples shards.}
14
14
  s.email = %q{tchandy@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -13,8 +13,8 @@ module Octopus
13
13
  def self.config()
14
14
  @config ||= HashWithIndifferentAccess.new(YAML.load(ERB.new(File.open(Octopus.directory() + "/config/shards.yml").read()).result))[Octopus.env()]
15
15
 
16
- if @config && @config['enviroments']
17
- self.enviroments = @config['enviroments']
16
+ if @config && @config['environments']
17
+ self.environments = @config['environments']
18
18
  end
19
19
 
20
20
  @config
@@ -33,12 +33,12 @@ module Octopus
33
33
  yield self
34
34
  end
35
35
 
36
- def self.enviroments=(enviroments)
37
- @enviroments = enviroments.map { |element| element.to_s }
36
+ def self.environments=(environments)
37
+ @environments = environments.map { |element| element.to_s }
38
38
  end
39
39
 
40
- def self.enviroments
41
- @enviroments || ['production']
40
+ def self.environments
41
+ @environments || ['production']
42
42
  end
43
43
 
44
44
  def self.rails3?
@@ -11,7 +11,7 @@ module Octopus::Model
11
11
  end
12
12
 
13
13
  def using(shard)
14
- return self if defined?(::Rails) && !Octopus.enviroments.include?(Rails.env.to_s)
14
+ return self if defined?(::Rails) && !Octopus.environments.include?(Rails.env.to_s)
15
15
 
16
16
  clean_table_name()
17
17
  hijack_initializer()
@@ -43,7 +43,7 @@ module Octopus::Model
43
43
 
44
44
  def hijack_connection()
45
45
  def self.should_use_normal_connection?
46
- (defined?(Rails) && Octopus.config() && !Octopus.enviroments.include?(Rails.env.to_s)) || self.read_inheritable_attribute(:establish_connection)
46
+ (defined?(Rails) && Octopus.config() && !Octopus.environments.include?(Rails.env.to_s)) || self.read_inheritable_attribute(:establish_connection)
47
47
  end
48
48
 
49
49
  def self.connection_proxy
@@ -92,7 +92,7 @@ production_fully_replicated:
92
92
  octopus_rails:
93
93
  replicated: true
94
94
  verify_connection: true
95
- enviroments:
95
+ environments:
96
96
  - staging
97
97
  - production
98
98
 
@@ -35,6 +35,7 @@ class Part < ActiveRecord::Base
35
35
  end
36
36
 
37
37
  class Keyboard < ActiveRecord::Base
38
+ replicated_model
38
39
  validates_uniqueness_of :name
39
40
  belongs_to :computer
40
41
  end
@@ -76,7 +76,7 @@ describe Octopus::Migration do
76
76
 
77
77
  describe "when using replication" do
78
78
  it "should run writes on master when you use replication" do
79
- using_enviroment :production_replicated do
79
+ using_environment :production_replicated do
80
80
  migrating_to_version 10 do
81
81
  Cat.find_by_name("Replication").should be_nil
82
82
  end
@@ -84,7 +84,7 @@ describe Octopus::Migration do
84
84
  end
85
85
 
86
86
  it "should run in all shards, master or another shards" do
87
- using_enviroment :production_replicated do
87
+ using_environment :production_replicated do
88
88
  migrating_to_version 11 do
89
89
  [:slave4, :slave1, :slave2, :slave3].each do |sym|
90
90
  Cat.find_by_name("Slaves").should_not be_nil
@@ -350,13 +350,13 @@ describe Octopus::Model do
350
350
 
351
351
  describe "#replicated_model method" do
352
352
  it "should be replicated" do
353
- using_enviroment :production_replicated do
353
+ using_environment :production_replicated do
354
354
  ActiveRecord::Base.connection_proxy.instance_variable_get(:@replicated).should be_true
355
355
  end
356
356
  end
357
357
 
358
358
  it "should mark the Cat model as replicated" do
359
- using_enviroment :production_replicated do
359
+ using_environment :production_replicated do
360
360
  User.read_inheritable_attribute(:replicated).should be_false
361
361
  Cat.read_inheritable_attribute(:replicated).should be_true
362
362
  end
@@ -20,19 +20,19 @@ describe Octopus do
20
20
  end
21
21
 
22
22
  describe "#setup method" do
23
- it "should have the default octopus enviroment as production" do
24
- Octopus.enviroments.should == ["production"]
23
+ it "should have the default octopus environment as production" do
24
+ Octopus.environments.should == ["production"]
25
25
  end
26
26
 
27
- it "should allow the user to configure the octopus enviroments" do
27
+ it "should allow the user to configure the octopus environments" do
28
28
  Octopus.setup do |config|
29
- config.enviroments = [:production, :staging]
29
+ config.environments = [:production, :staging]
30
30
  end
31
31
 
32
- Octopus.enviroments.should == ['production', 'staging']
32
+ Octopus.environments.should == ['production', 'staging']
33
33
 
34
34
  Octopus.setup do |config|
35
- config.enviroments = [:production]
35
+ config.environments = [:production]
36
36
  end
37
37
  end
38
38
  end
@@ -37,7 +37,7 @@ describe Octopus::Proxy do
37
37
 
38
38
  describe "should initialize just the master when you don't have a shards.yml file" do
39
39
  before(:each) do
40
- set_octopus_env("crazy_enviroment")
40
+ set_octopus_env("crazy_environment")
41
41
  end
42
42
 
43
43
  it "should initialize just the master shard" do
@@ -54,7 +54,7 @@ describe Octopus::Proxy do
54
54
  end
55
55
  end
56
56
 
57
- describe "when you have a replicated enviroment" do
57
+ describe "when you have a replicated environment" do
58
58
  before(:each) do
59
59
  set_octopus_env("production_replicated")
60
60
  end
@@ -74,23 +74,23 @@ describe Octopus::Proxy do
74
74
  set_octopus_env("octopus_rails")
75
75
  end
76
76
 
77
- it "should initialize correctly octopus common variables for the enviroments" do
77
+ it "should initialize correctly octopus common variables for the environments" do
78
78
  Rails.stub!(:env).and_return('staging')
79
79
  Octopus.instance_variable_set(:@rails_env, nil)
80
80
  Octopus.config()
81
81
 
82
82
  proxy.instance_variable_get(:@replicated).should be_true
83
83
  proxy.instance_variable_get(:@verify_connection).should be_true
84
- Octopus.enviroments.should == ["staging", "production"]
84
+ Octopus.environments.should == ["staging", "production"]
85
85
  end
86
86
 
87
- it "should initialize correctly the shards for the staging enviroment" do
87
+ it "should initialize correctly the shards for the staging environment" do
88
88
  Rails.stub!(:env).and_return('staging')
89
89
 
90
90
  proxy.instance_variable_get(:@shards).keys.to_set.should == Set.new([:slave1, :slave2, :master])
91
91
  end
92
92
 
93
- it "should initialize correctly the shards for the production enviroment" do
93
+ it "should initialize correctly the shards for the production environment" do
94
94
  Rails.stub!(:env).and_return('production')
95
95
 
96
96
  proxy.instance_variable_get(:@shards).keys.to_set.should == Set.new([:slave3, :slave4, :master])
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe "when the database is replicated" do
4
4
  it "should send all writes/reads queries to master when you have a non replicated model" do
5
- using_enviroment :production_replicated do
5
+ using_environment :production_replicated do
6
6
  u = User.create!(:name => "Replicated")
7
7
  User.count.should == 1
8
8
  User.find(u.id).should == u
@@ -10,7 +10,7 @@ describe "when the database is replicated" do
10
10
  end
11
11
 
12
12
  it "should send all writes queries to master" do
13
- using_enviroment :production_replicated do
13
+ using_environment :production_replicated do
14
14
  Cat.create!(:name => "Slave Cat")
15
15
  Cat.find_by_name("Slave Cat").should be_nil
16
16
  Client.create!(:name => "Slave Client")
@@ -19,7 +19,7 @@ describe "when the database is replicated" do
19
19
  end
20
20
 
21
21
  it "should allow to create multiple models on the master" do
22
- using_enviroment :production_replicated do
22
+ using_environment :production_replicated do
23
23
  Cat.create!([{:name => "Slave Cat 1"}, {:name => "Slave Cat 2"}])
24
24
  Cat.find_by_name("Slave Cat 1").should be_nil
25
25
  Cat.find_by_name("Slave Cat 2").should be_nil
@@ -29,14 +29,14 @@ describe "when the database is replicated" do
29
29
  it "should allow #using syntax to send queries to master" do
30
30
  Cat.create!(:name => "Master Cat")
31
31
 
32
- using_enviroment :production_fully_replicated do
32
+ using_environment :production_fully_replicated do
33
33
  Cat.using(:master).find_by_name("Master Cat").should_not be_nil
34
34
  end
35
35
  end
36
36
 
37
37
  it "should send the count query to a slave" do
38
38
  pending()
39
- # using_enviroment :production_replicated do
39
+ # using_environment :production_replicated do
40
40
  # Cat.create!(:name => "Slave Cat")
41
41
  # Cat.count.should == 0
42
42
  # end
@@ -51,12 +51,22 @@ describe "when the database is replicated and the entire application is replicat
51
51
  end
52
52
 
53
53
  it "should send all writes queries to master" do
54
- using_enviroment :production_fully_replicated do
54
+ using_environment :production_fully_replicated do
55
55
  Cat.create!(:name => "Slave Cat")
56
56
  Cat.find_by_name("Slave Cat").should be_nil
57
57
  Client.create!(:name => "Slave Client")
58
58
  Client.find_by_name("Slave Client").should be_nil
59
59
  end
60
60
  end
61
+
62
+ it "should work with validate_uniquess_of" do
63
+ Keyboard.create!(:name => "thiago")
64
+
65
+ using_environment :production_fully_replicated do
66
+ k = Keyboard.new(:name => "thiago")
67
+ k.save.should be_false
68
+ k.errors.should == {:name=>["has already been taken"]}
69
+ end
70
+ end
61
71
  end
62
72
 
@@ -10,7 +10,7 @@ describe "when the database is not entire sharded" do
10
10
  pending()
11
11
  # User.create!(:name => "Thiago")
12
12
  #
13
- # using_enviroment :not_entire_sharded do
13
+ # using_environment :not_entire_sharded do
14
14
  # Octopus.using(:russia) do
15
15
  # User.create!(:name => "Thiago")
16
16
  # end
@@ -22,7 +22,7 @@ describe "when the database is not entire sharded" do
22
22
  it "should pick the shard based on current_shard when you have a sharded model" do
23
23
  Cat.create!(:name => "Thiago")
24
24
 
25
- using_enviroment :not_entire_sharded do
25
+ using_environment :not_entire_sharded do
26
26
  Octopus.using(:russia) do
27
27
  Cat.create!(:name => "Thiago")
28
28
  end
@@ -19,9 +19,9 @@ def migrating_to_version(version, &block)
19
19
  end
20
20
  end
21
21
 
22
- def using_enviroment(enviroment, &block)
22
+ def using_environment(environment, &block)
23
23
  begin
24
- set_octopus_env(enviroment.to_s)
24
+ set_octopus_env(environment.to_s)
25
25
  clean_connection_proxy()
26
26
  yield
27
27
  ensure
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-octopus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Thiago Pradi
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-11-08 00:00:00 -02:00
19
+ date: 2010-12-02 00:00:00 -02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency