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

new(connector, connstring, schema) click to toggle source

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(data) click to toggle source

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(name, *args) click to toggle source

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() { |data| ... } click to toggle source

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(data) click to toggle source

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() click to toggle source

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