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