class Sack::Database
Database
Class: Main Database
Access Class - provides CRUD methods (and a little more) against a given Schema
on a provided Database
Connector and Connection String.
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Database
Class
Constants
- ACTIONS
Actions: Allowed data methods
- FTYPES
Field Types: Available field types to be used when defining schemas.
- FTYPES_CLASSES
Ruby Type Conversions: Maps Field Types to Ruby Classes.
Public Class Methods
Construct: Builds a Database on top of a backend connector and connstring, set to operate on schema. @param [Object] connector Generic database backend connector @param [String] connstring Connector-specific connection string @param [Hash] schema Schema
definition - see README
# File lib/sack/database.rb, line 40 def initialize connector, connstring, schema # Set Connector & Connstring @connector = connector @connstring = connstring # Set Schema @schema = schema # Create Lock @lock = Mutex.new # Verify Schema verify_schema end
Public Instance Methods
Check Schema: Verifies the supplied schema against the actual database. @param [Data] data Data
access interface @return [Object] True if schema is valid, False otherwise
# File lib/sack/database.rb, line 84 def check_schema data @schema.keys.inject(true) { |a, table| a && (data.exec "select count(*) from #{table};" rescue nil) } end
Method Missing: Catches and routes database actions through data access interface.
# File lib/sack/database.rb, line 98 def method_missing name, *args # Check Action raise "Unknown action [#{name}]" unless ACTIONS.include? name # Open Database { Perform Action } open { |db| return db.send name, *args } end
Open: Opens a session on the database for yielding.
# File lib/sack/database.rb, line 58 def open # Lock DB @lock.synchronize do # Open Database db = @connector.open @connstring # Yield Block yield Data.new(@connector, db, @schema) if block_given? # Close Database db.close end end
Rebuild Schema: Re-creates the database according to the supplied schema. @param [Data] data Data
access interface
# File lib/sack/database.rb, line 91 def rebuild_schema data @schema.each { |table, fields| data.create_table table, fields rescue data.alter_table table, fields } raise "Rebuilding Schema Failed - Check Database & Access Permissions" unless check_schema data end
Verify Schema: Verifies the supplied schema against the actual database & re-creates it if necessary.
# File lib/sack/database.rb, line 76 def verify_schema open { |data| rebuild_schema data unless check_schema data } end