Class: RR::ReplicationDifference
- Inherits:
-
Object
- Object
- RR::ReplicationDifference
- Defined in:
- lib/rubyrep/replication_difference.rb
Overview
Describes a (record specific) difference between both databases as identifed via change log.
Constant Summary collapse
- OTHER_SIDE =
Shortcut to calculate the “other” database.
{ :left => :right, :right => :left }
- DIFF_TYPES =
Resulting diff type based on types of left changes (outer hash) and right changes (inner hash)
{ :insert => {:insert => :conflict, :update => :conflict, :delete => :conflict, :no_change => :left}, :update => {:insert => :conflict, :update => :conflict, :delete => :conflict, :no_change => :left}, :delete => {:insert => :conflict, :update => :conflict, :delete => :no_change, :no_change => :left}, :no_change => {:insert => :right, :update => :right, :delete => :right, :no_change => :no_change} }
Instance Attribute Summary collapse
-
#loaded ⇒ Object
writeonly
Should be set to
true
if this ReplicationDifference instance was successfully loaded. -
#loaders ⇒ Object
The current LoggedChangeLoaders instance.
-
#type ⇒ Object
The type of the difference.
Instance Method Summary collapse
-
#amend ⇒ Object
Amends a difference according to new entries in the change log table.
-
#changes ⇒ Object
A hash with keys :
left
and / or :right
. -
#initialize(loaders) ⇒ ReplicationDifference
constructor
Creates a new ReplicationDifference instance.
-
#load ⇒ Object
Loads a difference.
-
#loaded? ⇒ Boolean
Returns
true
if a replication difference was loaded. -
#session ⇒ Object
The current Session.
-
#to_yaml_properties ⇒ Object
Prevents session and change loaders from going into YAML output.
Constructor Details
#initialize(loaders) ⇒ ReplicationDifference
Creates a new ReplicationDifference instance. loaders
is teh current LoggedChangeLoaders instance
30 31 32 |
# File 'lib/rubyrep/replication_difference.rb', line 30 def initialize(loaders) self.loaders = loaders end |
Instance Attribute Details
#loaded=(value) ⇒ Object (writeonly)
Should be set to true
if this ReplicationDifference instance was successfully loaded.
36 37 38 |
# File 'lib/rubyrep/replication_difference.rb', line 36 def loaded=(value) @loaded = value end |
#loaders ⇒ Object
The current LoggedChangeLoaders instance
13 14 15 |
# File 'lib/rubyrep/replication_difference.rb', line 13 def loaders @loaders end |
#type ⇒ Object
The type of the difference. Either
-
:
left
: change in left database -
:
right
: change in right database -
:
conflict
: change in both databases -
:
no_diff
: changes in both databases constitute no difference
20 21 22 |
# File 'lib/rubyrep/replication_difference.rb', line 20 def type @type end |
Instance Method Details
#amend ⇒ Object
Amends a difference according to new entries in the change log table
59 60 61 62 63 64 |
# File 'lib/rubyrep/replication_difference.rb', line 59 def amend loaders.update changes[:left].load changes[:right].load self.type = DIFF_TYPES[changes[:left].type][changes[:right].type] end |
#changes ⇒ Object
A hash with keys :left
and / or :right
. Hash values are LoggedChange instances.
24 25 26 |
# File 'lib/rubyrep/replication_difference.rb', line 24 def changes @changes ||= {} end |
#load ⇒ Object
Loads a difference
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/rubyrep/replication_difference.rb', line 67 def load change_times = {} [:left, :right].each do |database| changes[database] = LoggedChange.new loaders[database] change_times[database] = loaders[database].oldest_change_time end return if change_times[:left] == nil and change_times[:right] == nil oldest = nil [:left, :right].each do |database| oldest = OTHER_SIDE[database] if change_times[database] == nil end oldest ||= change_times[:left] <= change_times[:right] ? :left : :right changes[oldest].load_oldest changes[OTHER_SIDE[oldest]].load_specified( session.corresponding_table(oldest, changes[oldest].table), changes[oldest].key) self.type = DIFF_TYPES[changes[:left].type][changes[:right].type] self.loaded = true end |
#loaded? ⇒ Boolean
Returns true
if a replication difference was loaded
39 40 41 |
# File 'lib/rubyrep/replication_difference.rb', line 39 def loaded? @loaded end |
#session ⇒ Object
The current Session.
8 9 10 |
# File 'lib/rubyrep/replication_difference.rb', line 8 def session @session ||= loaders.session end |
#to_yaml_properties ⇒ Object
Prevents session and change loaders from going into YAML output
91 92 93 |
# File 'lib/rubyrep/replication_difference.rb', line 91 def to_yaml_properties instance_variables.sort.reject {|var_name| ['@session', '@loaders'].include? var_name} end |