class TDiary::IO::Rdb
Public Class Methods
db(conf)
click to toggle source
# File lib/tdiary/io/rdb.rb, line 93 def db(conf) @@_db ||= Sequel.connect(conf.database_url || ENV['DATABASE_URL']).tap{|db| db.extension(:connection_validator) db.pool.connection_validation_timeout = -1 } @@_db.test_connection @@_db.create_table :conf do String :body, text: true end unless @@_db.table_exists?(:conf) @@_db.create_table :diaries do String :diary_id, size: 8, primary_key: true String :year, size: 4 String :month, size: 2 String :day, size: 2 String :title, text: true String :body, text: true String :style, text: true Fixnum :last_modified TrueClass :visible end unless @@_db.table_exists?(:diaries) @@_db.create_table :comments do String :diary_id, size: 8 Fixnum :no String :name, text: true String :mail, text: true String :comment, text: true Fixnum :last_modified TrueClass :visible primary_key [:diary_id, :no] end unless @@_db.table_exists?(:comments) @@_db end
load_cgi_conf(conf)
click to toggle source
# File lib/tdiary/io/rdb.rb, line 77 def load_cgi_conf(conf) if cgi_conf = db(conf)[:conf].select(:body).first cgi_conf[:body] else "" end end
save_cgi_conf(conf, result)
click to toggle source
# File lib/tdiary/io/rdb.rb, line 85 def save_cgi_conf(conf, result) if db(conf)[:conf].count > 0 db(conf)[:conf].update(:body => result) else db(conf)[:conf].insert(:body => result) end end
Public Instance Methods
cache_dir()
click to toggle source
# File lib/tdiary/io/rdb.rb, line 161 def cache_dir @tdiary.conf.cache_path || "#{Dir.tmpdir}/cache" end
calendar()
click to toggle source
# File lib/tdiary/io/rdb.rb, line 153 def calendar calendar = Hash.new{|hash, key| hash[key] = []} db[:diaries].select(:year, :month).group_by(:year, :month).order_by(:year, :month).each do |row| calendar[row[:year]] << row[:month] end calendar end
transaction(date) { |diaries| ... }
click to toggle source
block must be return boolean which dirty diaries.
# File lib/tdiary/io/rdb.rb, line 135 def transaction(date) diaries = {} if cache = restore_parser_cache(date) diaries.update(cache) else restore(date.strftime("%Y%m%d"), diaries) restore_comment(diaries) end dirty = yield(diaries) if iterator? store(diaries) if (dirty & TDiary::TDiaryBase::DIRTY_DIARY) != 0 store_comment(diaries) if (dirty & TDiary::TDiaryBase::DIRTY_COMMENT) != 0 store_parser_cache(date, diaries) if dirty || !cache end
Private Instance Methods
db()
click to toggle source
# File lib/tdiary/io/rdb.rb, line 213 def db self.class.db(@tdiary.conf) end
restore(date, diaries, month = true)
click to toggle source
# File lib/tdiary/io/rdb.rb, line 167 def restore(date, diaries, month = true) query = db[:diaries].select(:diary_id, :title, :last_modified, :visible, :body, :style) query = if month && /(\d\d\d\d)(\d\d)(\d\d)/ =~ date query.filter(:year => $1, month: $2) else query.filter(:diary_id => date) end query.each do |row| style = if row[:style].nil? || row[:style].empty? 'wiki' else row[:style].downcase end diary = eval("#{style(style)}::new(row[:diary_id], row[:title], row[:body], Time::at(row[:last_modified].to_i))") diary.show(row[:visible]) diaries[row[:diary_id]] = diary end end
store(diaries)
click to toggle source
# File lib/tdiary/io/rdb.rb, line 186 def store(diaries) diaries.each do |diary_id, diary| date = if /(\d\d\d\d)(\d\d)(\d\d)/ =~ diary_id { year: $1, month: $2, day: $3, diary_id: diary_id } end body = { title: diary.title, last_modified: diary.last_modified.to_i, style: diary.style, visible: diary.visible?, body: diary.to_src } entry = db[:diaries].filter(date) if entry.count > 0 entry.update(body) else db[:diaries].insert(date.merge(body)) end end end