Module: Octopus::Model::ClassMethods
Class Method Summary
collapse
Instance Method Summary
collapse
#clean_table_name, #using
Class Method Details
.extended(base) ⇒ Object
85
86
87
88
89
90
|
# File 'lib/octopus/model.rb', line 85
def self.extended(base)
base.class_attribute(:replicated)
base.class_attribute(:sharded)
base.class_attribute(:allowed_shards)
base.hijack_methods
end
|
Instance Method Details
#allow_shard(*shards) ⇒ Object
100
101
102
103
|
# File 'lib/octopus/model.rb', line 100
def allow_shard(*shards)
self.allowed_shards ||= []
self.allowed_shards += shards
end
|
#allowed_shard?(shard) ⇒ Boolean
143
144
145
146
147
148
149
|
# File 'lib/octopus/model.rb', line 143
def allowed_shard?(shard)
if custom_octopus_connection
allowed_shards && shard && allowed_shards.include?(shard)
else
true
end
end
|
#clear_active_connections_with_octopus! ⇒ Object
168
169
170
171
172
173
174
|
# File 'lib/octopus/model.rb', line 168
def clear_active_connections_with_octopus!
if should_use_normal_connection?
clear_active_connections_without_octopus!
else
connection_proxy.clear_active_connections!
end
end
|
#clear_all_connections_with_octopus! ⇒ Object
176
177
178
179
180
181
182
|
# File 'lib/octopus/model.rb', line 176
def clear_all_connections_with_octopus!
if should_use_normal_connection?
clear_all_connections_without_octopus!
else
connection_proxy.clear_all_connections!
end
end
|
#connected_with_octopus? ⇒ Boolean
184
185
186
187
188
189
190
|
# File 'lib/octopus/model.rb', line 184
def connected_with_octopus?
if should_use_normal_connection?
connected_without_octopus?
else
connection_proxy.connected?
end
end
|
#connection_pool_with_octopus ⇒ Object
160
161
162
163
164
165
166
|
# File 'lib/octopus/model.rb', line 160
def connection_pool_with_octopus
if should_use_normal_connection?
connection_pool_without_octopus
else
connection_proxy.connection_pool
end
end
|
#connection_proxy ⇒ Object
129
130
131
132
133
|
# File 'lib/octopus/model.rb', line 129
def connection_proxy
ActiveRecord::Base.class_variable_defined?(:@@connection_proxy) &&
ActiveRecord::Base.class_variable_get(:@@connection_proxy) ||
ActiveRecord::Base.class_variable_set(:@@connection_proxy, Octopus::Proxy.new)
end
|
#connection_with_octopus ⇒ Object
151
152
153
154
155
156
157
158
|
# File 'lib/octopus/model.rb', line 151
def connection_with_octopus
if should_use_normal_connection?
connection_without_octopus
else
connection_proxy.current_model = self
connection_proxy
end
end
|
#hijack_methods ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/octopus/model.rb', line 105
def hijack_methods
around_save :run_on_shard, :unless => lambda { self.class.custom_octopus_connection }
after_initialize :set_current_shard
class_attribute :custom_octopus_connection
class << self
attr_accessor :custom_octopus_table_name
alias_method_chain :connection, :octopus
alias_method_chain :connection_pool, :octopus
alias_method_chain :clear_all_connections!, :octopus
alias_method_chain :clear_active_connections!, :octopus
alias_method_chain :connected?, :octopus
alias_method_chain(:set_table_name, :octopus) if Octopus.rails3?
def table_name=(value = nil)
self.custom_octopus_table_name = true
super
end
end
end
|
#octopus_establish_connection(spec = ) ⇒ Object
197
198
199
200
|
# File 'lib/octopus/model.rb', line 197
def octopus_establish_connection(spec = ENV['DATABASE_URL'])
self.custom_octopus_connection = true if spec
establish_connection(spec)
end
|
#octopus_set_table_name(value = nil) ⇒ Object
202
203
204
205
|
# File 'lib/octopus/model.rb', line 202
def octopus_set_table_name(value = nil)
ActiveSupport::Deprecation.warn 'Calling `octopus_set_table_name` is deprecated and will be removed in Octopus 1.0.', caller
set_table_name(value)
end
|
#replicated_model ⇒ Object
92
93
94
|
# File 'lib/octopus/model.rb', line 92
def replicated_model
self.replicated = true
end
|
#set_table_name_with_octopus(value = nil, &block) ⇒ Object
192
193
194
195
|
# File 'lib/octopus/model.rb', line 192
def set_table_name_with_octopus(value = nil, &block)
self.custom_octopus_table_name = true
set_table_name_without_octopus(value, &block)
end
|
#sharded_model ⇒ Object
96
97
98
|
# File 'lib/octopus/model.rb', line 96
def sharded_model
self.sharded = true
end
|
#should_use_normal_connection? ⇒ Boolean
135
136
137
138
139
140
141
|
# File 'lib/octopus/model.rb', line 135
def should_use_normal_connection?
if !Octopus.enabled?
true
elsif custom_octopus_connection
!connection_proxy.block || !allowed_shard?(connection_proxy.current_shard)
end
end
|