module SportDb

forward references

require first to resolve circular references

Constants

Models

add backwards compatible n convenience namespace

TEAM_CODE_MESSAGE
TEAM_CODE_RE

must start w/ letter A-Z (2nd,3rd,4th or 5th can be number)

TEAM_KEY_MESSAGE
TEAM_KEY_RE

todo: add a patterns.md page to github ??

  • add regexper pics??

VERSION

add convenience shortcuts

Public Class Methods

auto_migrate!() click to toggle source
# File lib/sportdb/models.rb, line 62
def self.auto_migrate!
  ### todo/fix:
  ##    check props table and versions!!!!!

  # first time? - auto-run db migratation, that is, create db tables
  unless LogDb::Model::Log.table_exists?
    LogDb.create     # add logs table
  end

  unless ConfDb::Model::Prop.table_exists?
    ConfDb.create    # add props table
  end


  unless TagDb::Model::Tag.table_exists?
    TagDb.create    # add tags & taggings tables
  end

  unless WorldDb::Model::Place.table_exists?
    WorldDb.create   # add places, & co. tables
  end

  unless PersonDb::Model::Person.table_exists?
    PersonDb.create  # add persons table
  end

  unless SportDb::Model::League.table_exists?
    SportDb.create
  end
end
connect( config={} ) click to toggle source
# File lib/sportdb/models.rb, line 111
def self.connect( config={} )
  if config.empty?
    puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"

    ### change default to ./sport.db ?? why? why not?
    db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///sport.db' )

    config =  if db.scheme == 'postgres'
                  { adapter: 'postgresql',
                    host:     db.host,
                    port:     db.port,
                    username: db.user,
                    password: db.password,
                    database: db.path[1..-1],
                    encoding: 'utf8'
                  }
                else # assume sqlite3
                  { adapter:  db.scheme,       # sqlite3
                    database: db.path[1..-1]   # sport.db (NB: cut off leading /, thus 1..-1)
                  }
                end
  else
    ## note: for compatibility lets you also pass-in/use string keys
    ##   e.g. YAML.load uses/returns always string keys - always auto-convert to symbols
    config = config.symbolize_keys
  end


  ## todo/check/fix: move jruby "hack" to attic - why? why not?
  ## todo/check: use if defined?( JRUBY_VERSION ) instead ??
  ## if RUBY_PLATFORM =~ /java/ && config[:adapter] == 'sqlite3'
    # quick hack for JRuby sqlite3 support via jdbc
  ##  puts "jruby quick hack - adding jdbc libs for jruby sqlite3 database support"
  ##  require 'jdbc/sqlite3'
  ##  require 'active_record/connection_adapters/jdbc_adapter'
  ##  require 'active_record/connection_adapters/jdbcsqlite3_adapter'
  ## end

  puts "Connecting to db using settings: "
  pp config
  ActiveRecord::Base.establish_connection( config )
  # ActiveRecord::Base.logger = Logger.new( STDOUT )

  ## if sqlite3 add (use) some pragmas for speedups
  if config[:adapter]  == 'sqlite3'  &&
     config[:database] != ':memory:'
    ## note: if in memory database e.g. ':memory:' no pragma needed!!
    ## try to speed up sqlite
    ##   see http://www.sqlite.org/pragma.html
    con = ActiveRecord::Base.connection
    con.execute( 'PRAGMA synchronous=OFF;' )
    con.execute( 'PRAGMA journal_mode=OFF;' )
    con.execute( 'PRAGMA temp_store=MEMORY;' )
  end
end
connect!( config={} ) click to toggle source
# File lib/sportdb/models.rb, line 106
def self.connect!( config={} )  # convenience shortcut w/ automigrate
  connect( config )
  auto_migrate!
end
create() click to toggle source
# File lib/sportdb/models.rb, line 47
def self.create
  CreateDb.new.up
  ConfDb::Model::Prop.create!( key: 'db.schema.sport.version', value: VERSION )
end
create_all() click to toggle source
# File lib/sportdb/models.rb, line 52
def self.create_all
  ## build schema - convenience helper
  LogDb.create
  ConfDb.create
  TagDb.create
  WorldDb.create
  PersonDb.create
  SportDb.create
end
delete!() click to toggle source

delete ALL records (use with care!)

# File lib/sportdb/models.rb, line 95
def self.delete!
  puts '*** deleting sport table records/data...'
  Deleter.new.run
end
setup_in_memory_db() click to toggle source
# File lib/sportdb/models.rb, line 168
def self.setup_in_memory_db
  # Database Setup & Config
  ActiveRecord::Base.logger = Logger.new( STDOUT )
  ## ActiveRecord::Base.colorize_logging = false  - no longer exists - check new api/config setting?

  connect( adapter:  'sqlite3',
           database: ':memory:' )

  ## build schema
  create_all
end
tables() click to toggle source
# File lib/sportdb/models.rb, line 101
def self.tables
  Stats.new.tables
end