module RailsSync::ActiveRecord

Public Instance Methods

acts_as_sync(options = {}) click to toggle source

source source_client dest_table

# File lib/rails_sync/active_record.rb, line 9
def acts_as_sync(options = {})
  @syncs ||= []

  options[:dest_table] ||= self.table_name
  _mappings = Array(options.delete(:mapping)).to_h
  if options[:only]
    _filter_columns = self.column_names & Array(options.delete(:only))
  else
    _filter_columns = self.column_names - Array(options.delete(:except))
  end
  options[:primary_key] = Array(options[:primary_key] || self.primary_key).map { |i| i.to_s }
  options[:dest_primary_key] = Array(options[:dest_primary_key] || options[:primary_key]).map { |i| i.to_s }
  options[:dest_conditions] = options[:dest_conditions]
  options[:full_mappings] = _filter_columns.map { |column_name|
    next if options[:primary_key].include?(column_name)
    if _mappings.key?(column_name)
      [column_name, _mappings[column_name]]
    else
      [column_name, column_name]
    end
  }.compact

  options[:server_id] = self.server_id
  options[:analyzer] = RailsSync::Analyzer.new(record: self, **options)

  RailsSync.synchro_types << self.name
  @syncs << options
end
analyze_diffs(type = 'update') click to toggle source
# File lib/rails_sync/active_record.rb, line 52
def analyze_diffs(type = 'update')
  @syncs.flat_map do |options|
    next if !options[:primary_key].include?(self.primary_key) && type == 'delete'
    options[:analyzer].analyze_diffs(type)
  end
end
cache_all_diffs(*types) click to toggle source
# File lib/rails_sync/active_record.rb, line 66
def cache_all_diffs(*types)
  types = ['update', 'insert', 'delete'] if types.blank?
  types.each do |type|
    cache_diffs(type)
  end
end
cache_diffs(type = 'update') click to toggle source
# File lib/rails_sync/active_record.rb, line 59
def cache_diffs(type = 'update')
  @syncs.flat_map do |options|
    next if !options[:primary_key].include?(self.primary_key) && type == 'delete'
    options[:analyzer].cache_diffs(type)
  end
end
id_insert?() click to toggle source
# File lib/rails_sync/active_record.rb, line 73
def id_insert?
  @syncs.find { |i| i[:primary_key] == ['id'] }.present?
end
prepare_sync() click to toggle source
# File lib/rails_sync/active_record.rb, line 77
def prepare_sync
  @syncs.flat_map do |options|
    options[:analyzer].reset_temp_table unless options[:analyzer].same_server?
  end
end
server_id() click to toggle source
# File lib/rails_sync/active_record.rb, line 38
def server_id
  begin
    result = connection.query('select @@server_uuid')
  rescue
    result = connection.query('select @@server_id')
  end
  _id = result.to_a.flatten.first
  if _id.is_a?(Hash)
    _id.values.first
  else
    _id
  end
end