class Termtter::Storage::SQLite3

Constants

CREATE_TABLE
FIND
FIND_ID
FIND_USER
FIND_USER_ID

Public Class Methods

new(file = Termtter::CONF_DIR + '/storage.db') click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 8
def initialize(file = Termtter::CONF_DIR + '/storage.db')
  @db = ::SQLite3::Database.new(file)
  @db.type_translation = true
  create_table
end

Public Instance Methods

create_table() click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 34
def create_table
  @db.execute_batch(CREATE_TABLE)
end
find_id(id) click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 85
def find_id(id)
  result = nil
  @db.execute(FIND_ID, id) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
    result = Termtter::ActiveRubytter.new({
        :id => post_id,
        :created_at => created_at,
        :text => post_text,
        :in_reply_to_status_id => in_reply_to_status_id,
        :in_reply_to_user_id => nil,
        :user => {
          :id => user_id,
          :screen_name => screen_name
        }
      })
  end
  result
end
find_text(text = '') click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 107
def find_text(text = '')
  result = []
  @db.execute(FIND, text) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
    created_at = Time.at(created_at).to_s
    result << Termtter::ActiveRubytter.new({
        :id => post_id,
        :created_at => created_at,
        :text => post_text,
        :in_reply_to_status_id => in_reply_to_status_id,
        :in_reply_to_user_id => nil,
        :user => {
          :id => user_id,
          :screen_name => screen_name
        }
      })
  end
  result
end
find_user(user = "") click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 130
def find_user(user = "")
  result = []
  sql = FIND_USER + user.split(' ').map!{|que| que.gsub(/(\w+)/, 'screen_name like \'%\1%\'')}.join(' or ')
  @db.execute(sql) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
    created_at = Time.at(created_at).to_s
    result << Termtter::ActiveRubytter.new({
        :id => post_id,
        :created_at => created_at,
        :text => post_text,
        :in_reply_to_status_id => in_reply_to_status_id,
        :in_reply_to_user_id => nil,
        :user => {
          :id => user_id,
          :screen_name => screen_name
        }
      })
  end
  result
end
find_user_id(user_id) click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 60
def find_user_id(user_id)
  result = nil
  @db.execute(FIND_USER_ID, user_id) do |id, screen_name|
    result = { :id => id, :screen_name => screen_name}
  end
  result
end
insert(status) click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 68
def insert(status)
  return nil unless status[:text]
  @db.execute(
    "insert into post values(?,?,?,?,?,?)",
    status[:post_id],
    status[:created_at],
    status[:in_reply_to_status_id],
    status[:in_reply_to_user_id],
    status[:text],
    status[:user_id])
  update_user(status[:user_id], status[:screen_name])
end
name() click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 14
def name
  "sqlite3"
end
size() click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 150
def size
  @db.get_first_value("select count(*) from post").to_i
end
update(status) click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 38
def update(status)
  @db.transaction
  begin
    return nil if find_id(status[:post_id])
    insert(status)
  ensure
    @db.commit
  end
end
update_user(user_id, screen_name) click to toggle source
# File lib/plugins/storage/sqlite3.rb, line 48
def update_user(user_id, screen_name)
  return nil if find_user_id(user_id)
  @db.execute(
    "insert into user values(?,?)",
    status[:user_id],
    status[:screen_name])
end