Module: Shackles

Defined in:
lib/shackles.rb,
lib/shackles/railtie.rb,
lib/shackles/version.rb,
lib/shackles/connection_handler.rb,
lib/shackles/connection_specification.rb

Defined Under Namespace

Modules: ConnectionHandler, ConnectionSpecification Classes: Railtie

Constant Summary collapse

VERSION =
"1.0.2"

Class Method Summary collapse

Class Method Details

.activate(environment) ⇒ Object

switch environment for the duration of the block will keep the old connections around



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/shackles.rb', line 49

def activate(environment)
  environment ||= :master
  return yield if environment == self.environment
  begin
    old_environment = activate!(environment)
    yield
  ensure
    @environment = old_environment
    ActiveRecord::Base.connection_handler = ensure_handler unless Rails.env.test?
  end
end

.activate!(environment) ⇒ Object

for use from script/console ONLY



62
63
64
65
66
67
68
69
# File 'lib/shackles.rb', line 62

def activate!(environment)
  environment ||= :master
  save_handler
  old_environment = self.environment
  @environment = environment
  ActiveRecord::Base.connection_handler = ensure_handler unless Rails.env.test?
  old_environment
end

.apply_config!(hash) ⇒ Object

for altering other pieces of config (i.e. username) will force a disconnect



32
33
34
35
# File 'lib/shackles.rb', line 32

def apply_config!(hash)
  global_config.merge!(hash)
  bump_sequence
end

.bump_sequenceObject



24
25
26
27
28
# File 'lib/shackles.rb', line 24

def bump_sequence
  @global_config_sequence ||= 1
  @global_config_sequence += 1
  ActiveRecord::Base::connection_handler.clear_all_connections!
end

.connection_handlersObject



42
43
44
45
# File 'lib/shackles.rb', line 42

def connection_handlers
  save_handler
  @connection_handlers
end

.environmentObject



3
4
5
# File 'lib/shackles.rb', line 3

def environment
  @environment ||= :master
end

.global_configObject



7
8
9
# File 'lib/shackles.rb', line 7

def global_config
  @global_config ||= {}
end

.global_config_sequenceObject



20
21
22
# File 'lib/shackles.rb', line 20

def global_config_sequence
  @global_config_sequence ||= 1
end

.initialize!Object

semi-private



12
13
14
15
16
17
18
# File 'lib/shackles.rb', line 12

def initialize!
  require 'shackles/connection_handler'
  require 'shackles/connection_specification'

  ActiveRecord::ConnectionAdapters::ConnectionHandler.send(:include, Shackles::ConnectionHandler)
  ActiveRecord::Base::ConnectionSpecification.send(:include, Shackles::ConnectionSpecification)
end

.remove_config!(key) ⇒ Object



37
38
39
40
# File 'lib/shackles.rb', line 37

def remove_config!(key)
  global_config.delete(key)
  bump_sequence
end