class MessengerPigeon::Pigeon

Check and apply data matches

Public Class Methods

new(source, target, pigeon_config) click to toggle source
# File lib/messenger_pigeon/pigeon.rb, line 5
def initialize(source, target, pigeon_config)
  @source = source
  @target = target
  @filters = pigeon_config[:filters]
  @transforms = pigeon_config[:transforms]
  @generators = pigeon_config[:generators]
  @logger = pigeon_config[:logger]
end

Public Instance Methods

fly() click to toggle source
# File lib/messenger_pigeon/pigeon.rb, line 14
def fly
  @source.read.each do |d|
    transforms :pre_filter, d
    generators d
    if filter d
      d = transforms :post_filter, d
      @target.update d
      @logger.call d if @logger
    end
  end
  self
end

Private Instance Methods

filter(data) click to toggle source
# File lib/messenger_pigeon/pigeon.rb, line 29
def filter(data)
  return if @filters.nil?
  @filters.each do |k, v|
    case v
    when Regexp
      return false unless data[k] =~ v
    when String
      return false unless data[k] == v
    when Proc
      return false unless v.call data[k]
    end
  end
  true
end
generators(data) click to toggle source
# File lib/messenger_pigeon/pigeon.rb, line 52
def generators(data)
  return data if @generators.nil?
  @generators.each do |k, v|
    data[k] = v.call data
  end
  data
end
transforms(type, data) click to toggle source
# File lib/messenger_pigeon/pigeon.rb, line 44
def transforms(type, data)
  return data if @transforms.nil? || @transforms[type].nil?
  @transforms[type].each do |k, v|
    data[k] = v.call data[k]
  end
  data
end