lib/sportdb/models.rb in sportdb-models-2.0.2 vs lib/sportdb/models.rb in sportdb-models-2.0.3
- old
+ new
@@ -1,179 +1,212 @@
-# encoding: utf-8
-
-
-# core and stlibs (note: get included via worlddb-models gem; see worlddb-models gem/lib)
-require 'worlddb/models' # NOTE: include worlddb-models gem (not cli tools gem, that is, worlddb)
-require 'persondb/models'
-
-
-# our own code
-
-require 'sportdb/models/version' # let version always go first
-
-require 'sportdb/models/formats'
-require 'sportdb/models/models/forward'
-
-require 'sportdb/models/models/world/city'
-require 'sportdb/models/models/world/country'
-require 'sportdb/models/models/world/continent'
-require 'sportdb/models/models/world/state'
-
-require 'sportdb/models/models/assoc'
-require 'sportdb/models/models/badge'
-require 'sportdb/models/models/event'
-require 'sportdb/models/models/goal'
-require 'sportdb/models/models/ground'
-require 'sportdb/models/models/group'
-require 'sportdb/models/models/league'
-require 'sportdb/models/models/lineup'
-require 'sportdb/models/models/match'
-require 'sportdb/models/models/person'
-require 'sportdb/models/models/round'
-require 'sportdb/models/models/season'
-require 'sportdb/models/models/stage'
-require 'sportdb/models/models/team'
-
-require 'sportdb/models/models/stats/alltime_standing'
-require 'sportdb/models/models/stats/event_standing'
-require 'sportdb/models/models/stats/group_standing'
-
-require 'sportdb/models/schema' # note: requires sportdb/models (include SportDB::Models)
-
-require 'sportdb/models/utils' # e.g. MatchCursor
-
-require 'sportdb/models/deleter'
-require 'sportdb/models/stats'
-
-
-module SportDb
-
- def self.create
- CreateDb.new.up
- ConfDb::Model::Prop.create!( key: 'db.schema.sport.version', value: VERSION )
- end
-
- def self.create_all
- ## build schema - convenience helper
- LogDb.create
- ConfDb.create
- TagDb.create
- WorldDb.create
- PersonDb.create
- SportDb.create
- end
-
- # delete ALL records (use with care!)
- def self.delete!
- puts '*** deleting sport table records/data...'
- Deleter.new.run
- end # method delete!
-
-
- def self.tables
- Stats.new.tables
- end
-
-
- 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
-
-
- 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 # setup_in_memory_db (using SQLite :memory:)
-
-
-end # module SportDb
-
-
-
-module SportDb
- module Model
-##################
-# add alias why? why not?
-#
-# more aliases to consider:
-# - Tournament for Event?
-# - Cup for League?
-# - Roster for Lineup?
-# - Stadium for Ground? - why? why not?
-
-
-Competition = Event
-Comp = Event
-
-LineUp = Lineup
-Squad = Lineup
-
-Game = Match ## add (old) alias - why? why not?
- end # module Model
-end # module SportDb
-
-
-
-## say hello
-puts SportDb::Module::Models.banner
-
-
+# core and stlibs (note: get included via worlddb-models gem; see worlddb-models gem/lib)
+require 'worlddb/models' # NOTE: include worlddb-models gem (not cli tools gem, that is, worlddb)
+require 'persondb/models'
+
+
+# our own code
+
+require 'sportdb/models/version' # let version always go first
+
+require 'sportdb/models/formats'
+require 'sportdb/models/models/forward'
+
+require 'sportdb/models/models/world/city'
+require 'sportdb/models/models/world/country'
+require 'sportdb/models/models/world/continent'
+require 'sportdb/models/models/world/state'
+
+require 'sportdb/models/models/assoc'
+require 'sportdb/models/models/badge'
+require 'sportdb/models/models/event'
+require 'sportdb/models/models/goal'
+require 'sportdb/models/models/ground'
+require 'sportdb/models/models/group'
+require 'sportdb/models/models/league'
+require 'sportdb/models/models/lineup'
+require 'sportdb/models/models/match'
+require 'sportdb/models/models/person'
+require 'sportdb/models/models/round'
+require 'sportdb/models/models/season'
+require 'sportdb/models/models/stage'
+require 'sportdb/models/models/team'
+
+require 'sportdb/models/models/stats/alltime_standing'
+require 'sportdb/models/models/stats/event_standing'
+require 'sportdb/models/models/stats/group_standing'
+
+require 'sportdb/models/schema' # note: requires sportdb/models (include SportDB::Models)
+
+require 'sportdb/models/utils' # e.g. MatchCursor
+
+require 'sportdb/models/deleter'
+require 'sportdb/models/stats'
+
+
+module SportDb
+
+ def self.create
+ CreateDb.new.up
+ ConfDb::Model::Prop.create!( key: 'db.schema.sport.version', value: VERSION )
+ end
+
+ def self.create_all
+ ## build schema - convenience helper
+ LogDb.create
+ ConfDb.create
+ TagDb.create
+ WorldDb.create
+ PersonDb.create
+ SportDb.create
+ end
+
+ 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 # method auto_migrate!
+
+
+ # delete ALL records (use with care!)
+ def self.delete!
+ puts '*** deleting sport table records/data...'
+ Deleter.new.run
+ end # method delete!
+
+
+ def self.tables
+ Stats.new.tables
+ end
+
+
+ def self.connect!( config={} ) # convenience shortcut w/ automigrate
+ connect( config )
+ auto_migrate!
+ end
+
+ 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
+
+
+ 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 # setup_in_memory_db (using SQLite :memory:)
+
+
+end # module SportDb
+
+
+
+module SportDb
+ module Model
+##################
+# add alias why? why not?
+#
+# more aliases to consider:
+# - Tournament for Event?
+# - Cup for League?
+# - Roster for Lineup?
+# - Stadium for Ground? - why? why not?
+
+
+Competition = Event
+Comp = Event
+
+LineUp = Lineup
+Squad = Lineup
+
+Game = Match ## add (old) alias - why? why not?
+ end # module Model
+end # module SportDb
+
+
+
+## say hello
+puts SportDb::Module::Models.banner
+
+