class TDP::DAO
Data access object that encapsulates all operations with the database.
Attributes
db[R]
Sequel::Database object
Public Class Methods
new(db)
click to toggle source
Creates a new DAO
object.
- db
-
must be either of:
-
instance of Sequel::Database class
-
database URL that can be passed to Sequel.connect()
# File lib/tdp.rb, line 216 def initialize(db) case db when Sequel::Database @db = db when String @db = Sequel.connect(db) else raise ArgumentError, "Invalid argument #{db} of class #{db.class}" end end
Public Instance Methods
applied_patches()
click to toggle source
Fetches the information about applied patches and returns it as { name => signature } hash.
# File lib/tdp.rb, line 245 def applied_patches result = {} @db[:tdp_patch].select(:name, :signature).each do |row| result[row[:name]] = row[:signature] end result end
applied_patches_inverse()
click to toggle source
Fetches the information about applied patches and returns it as { signature => name } hash.
# File lib/tdp.rb, line 257 def applied_patches_inverse result = {} applied_patches.each do |name, sig| raise DuplicateError, [result[sig], name] if result.key?(sig) result[sig] = name end result end
apply(patch)
click to toggle source
Applies a patch (a Patch
object).
# File lib/tdp.rb, line 277 def apply(patch) @db << patch.content register(patch) rescue Sequel::Error => ex raise Sequel::Error, "Failed to apply patch #{patch.full_filename}: #{ex}" end
bootstrap()
click to toggle source
Initializes database tables for keeping track of applied patches.
# File lib/tdp.rb, line 231 def bootstrap return if @db.table_exists?(:tdp_patch) @db << %{ CREATE TABLE tdp_patch( name VARCHAR PRIMARY KEY , signature VARCHAR NOT NULL ) } end
erase()
click to toggle source
Erases all data about applied patches.
# File lib/tdp.rb, line 303 def erase @db[:tdp_patch].delete end
patch_signature(name)
click to toggle source
Looks up a signature of a patch by its name.
# File lib/tdp.rb, line 269 def patch_signature(name) row = @db[:tdp_patch].select(:signature).where(name: name).first row.nil? ? nil : row[:signature] end
register(patch)
click to toggle source
Registers a patch (a Patch
object) as applied.
# File lib/tdp.rb, line 288 def register(patch) q = @db[:tdp_patch].where(name: patch.name) if q.empty? @db[:tdp_patch].insert( name: patch.name, signature: patch.signature ) else q.update(signature: patch.signature) end end
rename(old_name, new_name)
click to toggle source
Renames a patch.
# File lib/tdp.rb, line 310 def rename(old_name, new_name) @db[:tdp_patch].where(name: old_name).update(name: new_name) end