Module: Octopus::Model::InstanceMethods

Includes:
SharedMethods
Defined in:
lib/octopus/model.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SharedMethods

#clean_table_name, #using

Class Method Details

.included(base) ⇒ Object



36
37
38
39
40
41
# File 'lib/octopus/model.rb', line 36

def self.included(base)
  base.send(:alias_method, :equality_without_octopus, :==)
  base.send(:alias_method, :==, :equality_with_octopus)
  base.send(:alias_method, :eql?, :==)
  base.send(:alias_method_chain, :perform_validations, :octopus)
end

Instance Method Details

#equality_with_octopus(comparison_object) ⇒ Object



57
58
59
# File 'lib/octopus/model.rb', line 57

def equality_with_octopus(comparison_object)
  equality_without_octopus(comparison_object) && comparison_object.current_shard == current_shard
end

#perform_validations_with_octopus(*args) ⇒ Object



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

def perform_validations_with_octopus(*args)
  if Octopus.enabled? && should_set_current_shard?
    Octopus.using(current_shard) do
      perform_validations_without_octopus(*args)
    end
  else
    perform_validations_without_octopus(*args)
  end
end

#set_current_shardObject



43
44
45
46
47
48
49
50
51
# File 'lib/octopus/model.rb', line 43

def set_current_shard
  return unless Octopus.enabled?

  if new_record? || self.class.connection_proxy.block
    self.current_shard = self.class.connection_proxy.current_shard
  else
    self.current_shard = self.class.connection_proxy.last_current_shard || self.class.connection_proxy.current_shard
  end
end

#should_set_current_shard?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/octopus/model.rb', line 53

def should_set_current_shard?
  self.respond_to?(:current_shard) && !current_shard.nil?
end