class Tango::DatabaseLocker
Database locker in form of .lock file
@author Mckomo
Attributes
lock_path[R]
Public Class Methods
new( candidates = [], lock_path = "./tmp/database.lock" )
click to toggle source
Constructor of DatabaseLocker
@param candidates [Array] List of databases to be blocked @param lock_path
[String] @return [Tango::DatabaseLocker]
# File lib/tango/database_locker.rb, line 15 def initialize( candidates = [], lock_path = "./tmp/database.lock" ) @candidates = candidates @lock_path = lock_path end
Public Instance Methods
lock( database )
click to toggle source
Lock given database @example
unlocked = database_locker.unlocked # Find unlocked database connect_to_db( unlocked ) # Connect to unlocked database edit_db_data() # Change database data database_locker.lock( unlocked ) # Lock database to be sure that any changes wont be made
@param database [String] @return [Tango::DatabaseLocker]
# File lib/tango/database_locker.rb, line 36 def lock( database ) @unlocked = nil File.open( lock_path, "w" ) do |f| f.write( database ) end self end
unlocked()
click to toggle source
Return name of unlocked database
return [String]
# File lib/tango/database_locker.rb, line 23 def unlocked @unlocked ||= find_unlocked end
Private Instance Methods
find_unlocked()
click to toggle source
Find unlocked database (with .lock file on mind)
@return [String]
# File lib/tango/database_locker.rb, line 53 def find_unlocked lock = File.open( lock_path, 'a+' ) { |f| f.read.strip.gsub(/\s+/, ' ') } # If some database was locked use next one unless lock.empty? or ! @candidates.include?( lock ) @candidates.at( @candidates.index( lock ).next % @candidates.length ) # Otherwise return first one else @candidates.first end end