class Akane::Storages::Imkayac

Constants

DEFAULT_ENDPOINT
DEFAULT_MESSAGE
VERSION

Public Class Methods

new(config: raise(ArgumentError, 'missing config'), logger: Logger.new($stdout)) click to toggle source
Calls superclass method
# File lib/akane/storages/imkayac.rb, line 19
def initialize(config: raise(ArgumentError, 'missing config'), logger: Logger.new($stdout))
  super

  @config["keywords"] ||= []
  @config["screen_names"] ||= []
  @config["excludes"] ||= []
  @config["message"]  ||= DEFAULT_MESSAGE
  @config["endpoint"] ||= DEFAULT_ENDPOINT


  unless @config["user"]
    raise ArgumentError, "config `user` is required"
  end
  unless @config["keywords"].kind_of?(Enumerable)
    raise ArgumentError, "config `keywords` should be Enumerable"
  end
  unless @config["excludes"].kind_of?(Enumerable)
    raise ArgumentError, "config `excludes` should be Enumerable"
  end

  @endpoint = URI.parse("#{@config["endpoint"].gsub(%r{/\z}, '')}/#{@config["user"]}")
end

Public Instance Methods

mark_as_deleted(*) click to toggle source
# File lib/akane/storages/imkayac.rb, line 69
def mark_as_deleted(*)
end
record_event(*) click to toggle source
# File lib/akane/storages/imkayac.rb, line 72
def record_event(*)
end
record_message(*) click to toggle source
# File lib/akane/storages/imkayac.rb, line 75
def record_message(*)
end
record_tweet(account, tweet) click to toggle source
# File lib/akane/storages/imkayac.rb, line 42
def record_tweet(account, tweet)
  return unless match_rule?(tweet)

  payload = { message: ERB.new(@config["message"]).result(binding), }

  payload[:password] = @config["password"] if @config["password"]

  if @config["secret"]
    payload[:sig] = Digest::SHA1.hexdigest("#{payload[:message]}#{@config["secret"]}")
  end

  if @config["handler"]
    payload[:handler] = ERB.new(@config["handler"]).result(binding)
  end

  @logger.debug("im.kayac: sending #{payload[:message].inspect} to #{@config["user"].inspect}")
  response = Net::HTTP.post_form(@endpoint, payload)
  json = JSON.parse(response.body || '')
  @logger.info("im.kayac: sent #{payload[:message].inspect} to #{@config["user"].inspect} -- #{json.inspect}")

  raise RequestError, json["error"] if json["error"] && !json["error"].empty?

rescue JSON::ParserError => e
  r.value
  raise e
end

Private Instance Methods

match_rule?(tweet) click to toggle source
# File lib/akane/storages/imkayac.rb, line 80
def match_rule?(tweet)
  tweet.text &&
  !tweet.retweet? &&
  @config["excludes"].all? { |_| ! tweet.text.include?(_.to_s) } &&
  (
    @config["keywords"].any? { |_| tweet.text.include?(_.to_s) } ||
    @config["screen_names"].include?(tweet.user.screen_name)
  )
end