class Akane::Storages::File

Public Class Methods

new(*) click to toggle source
Calls superclass method Akane::Storages::AbstractStorage::new
# File lib/akane/storages/file.rb, line 10
def initialize(*)
  super
  @screen_name_to_id_cache = {}
  @dir = Pathname.new(@config["dir"])
  [@dir, @dir.join('names'), @dir.join('users'), @dir.join('event'), @dir.join('timeline')].each do |d|
    d.mkdir unless d.exist?
  end
end

Public Instance Methods

mark_as_deleted(account, user_id, tweet_id) click to toggle source
# File lib/akane/storages/file.rb, line 32
def mark_as_deleted(account, user_id, tweet_id)
  timeline_deletion_io.puts "#{Time.now.xmlschema},#{user_id},#{tweet_id}"
  tweets_deletion_io_for_user(user_id) do |io|
    io.puts "#{Time.now.xmlschema},#{user_id},#{tweet_id}"
  end
end
name() click to toggle source
# File lib/akane/storages/file.rb, line 19
def name
  @name ||= "#{self.class.name}:#{@config["dir"]}"
end
record_event(account, event) click to toggle source
# File lib/akane/storages/file.rb, line 39
def record_event(account, event)
  event_io.puts event.merge(:happened_on => account).to_json
end
record_message(account, message) click to toggle source
# File lib/akane/storages/file.rb, line 43
def record_message(account, message)
  messages_raw_io_for_user(message.sender.id, message.sender.screen_name) do |io|
    io.puts message.attrs.to_json
  end
  messages_io_for_user(message.sender.id, message.sender.screen_name) do |io|
    io.puts "[#{message.created_at.xmlschema}] #{message.sender.screen_name} -> #{message.recipient.screen_name}:" \
            " #{message.text} (#{message.sender.id} -> #{message.recipient.id},#{message.id})"
  end
end
record_tweet(account, tweet) click to toggle source
# File lib/akane/storages/file.rb, line 23
def record_tweet(account, tweet)
  timeline_io.puts "[#{tweet.created_at.xmlschema}][#{account}] #{tweet.user.screen_name}: " \
                   "#{tweet.text.gsub(/\r?\n/,' ')} (#{tweet.user.id},#{tweet.id})"

  tweets_io_for_user(tweet.user.id, tweet.user.screen_name) do |io|
    io.puts tweet.attrs.to_json
  end
end

Private Instance Methods

event_io() click to toggle source
# File lib/akane/storages/file.rb, line 77
def event_io
  if @event_io_date != Date.today || !@event_io
    date = @event_io_date = Date.today
    @event_io = ::File.open(@dir.join('event', date.strftime('%Y-%m-%d.txt')), 'a')
    @event_io.sync = !@config.key?("sync_io") || @config["sync_io"]
    @event_io
  else
    @event_io
  end
end
messages_io_for_user(user_id, screen_name=nil, &block) click to toggle source
# File lib/akane/storages/file.rb, line 100
def messages_io_for_user(user_id, screen_name=nil, &block)
  symlink_user_dir(user_id, screen_name)
  date = Date.today
  ::File.open(@dir.join('users', user_id.to_s, date.strftime('messages.%Y-%m.txt')), 'a', &block)
end
messages_raw_io_for_user(user_id, screen_name=nil, &block) click to toggle source
# File lib/akane/storages/file.rb, line 106
def messages_raw_io_for_user(user_id, screen_name=nil, &block)
  symlink_user_dir(user_id, screen_name)
  date = Date.today
  ::File.open(@dir.join('users', user_id.to_s, date.strftime('messages-raw.%Y-%m.txt')), 'a', &block)
end
timeline_deletion_io() click to toggle source
# File lib/akane/storages/file.rb, line 66
def timeline_deletion_io
  if @timeline_deletion_io_date != Date.today || !@timeline_deletion_io
    date = @timeline_deletion_io_date = Date.today
    @timeline_deletion_io = ::File.open(@dir.join('timeline', date.strftime('%Y-%m-%d.deleted.txt')), 'a')
    @timeline_deletion_io.sync = !@config.key?("sync_io") || @config["sync_io"]
    @timeline_deletion_io
  else
    @timeline_deletion_io
  end
end
timeline_io() click to toggle source
# File lib/akane/storages/file.rb, line 55
def timeline_io
  if @timeline_io_date != Date.today || !@timeline_io
    date = @timeline_io_date = Date.today
    @timeline_io = ::File.open(@dir.join('timeline', date.strftime('%Y-%m-%d.txt')), 'a')
    @timeline_io.sync = !@config.key?("sync_io") || @config["sync_io"]
    @timeline_io
  else
    @timeline_io
  end
end
tweets_deletion_io_for_user(user_id, screen_name=nil, &block) click to toggle source
# File lib/akane/storages/file.rb, line 94
def tweets_deletion_io_for_user(user_id, screen_name=nil, &block)
  symlink_user_dir(user_id, screen_name)
  date = Date.today
  ::File.open(@dir.join('users', user_id.to_s, date.strftime('deleted-tweets.%Y-%m.txt')), 'a', &block)
end
tweets_io_for_user(user_id, screen_name=nil, &block) click to toggle source
# File lib/akane/storages/file.rb, line 88
def tweets_io_for_user(user_id, screen_name=nil, &block)
  symlink_user_dir(user_id, screen_name)
  date = Date.today
  ::File.open(@dir.join('users', user_id.to_s, date.strftime('tweets.%Y-%m.txt')), 'a', &block)
end