Module: SportDb

Defined in:
lib/sportdb/standings.rb,
lib/sportdb/calc.rb,
lib/sportdb/lang.rb,
lib/sportdb/stats.rb,
lib/sportdb/utils.rb,
lib/sportdb/models.rb,
lib/sportdb/reader.rb,
lib/sportdb/schema.rb,
lib/sportdb/deleter.rb,
lib/sportdb/matcher.rb,
lib/sportdb/version.rb,
lib/sportdb/patterns.rb,
lib/sportdb/utils_map.rb,
lib/sportdb/csv_reader.rb,
lib/sportdb/reader_zip.rb,
lib/sportdb/utils_date.rb,
lib/sportdb/models/game.rb,
lib/sportdb/models/goal.rb,
lib/sportdb/models/team.rb,
lib/sportdb/reader_file.rb,
lib/sportdb/utils_goals.rb,
lib/sportdb/utils_group.rb,
lib/sportdb/utils_round.rb,
lib/sportdb/utils_teams.rb,
lib/sportdb/finders/date.rb,
lib/sportdb/mapper_teams.rb,
lib/sportdb/models/assoc.rb,
lib/sportdb/models/badge.rb,
lib/sportdb/models/event.rb,
lib/sportdb/models/group.rb,
lib/sportdb/models/round.rb,
lib/sportdb/models/utils.rb,
lib/sportdb/readers/game.rb,
lib/sportdb/readers/team.rb,
lib/sportdb/rsssf_reader.rb,
lib/sportdb/utils_scores.rb,
lib/sportdb/finders/goals.rb,
lib/sportdb/indexers/team.rb,
lib/sportdb/models/ground.rb,
lib/sportdb/models/league.rb,
lib/sportdb/models/roster.rb,
lib/sportdb/models/season.rb,
lib/sportdb/readers/assoc.rb,
lib/sportdb/readers/event.rb,
lib/sportdb/finders/scores.rb,
lib/sportdb/models/forward.rb,
lib/sportdb/pretty_printer.rb,
lib/sportdb/readers/ground.rb,
lib/sportdb/readers/league.rb,
lib/sportdb/readers/season.rb,
lib/sportdb/models/event_team.rb,
lib/sportdb/models/group_team.rb,
lib/sportdb/models/assoc_assoc.rb,
lib/sportdb/models/team_compat.rb,
lib/sportdb/readers/event_meta.rb,
lib/sportdb/readers/squad_club.rb,
lib/sportdb/models/event_ground.rb,
lib/sportdb/readers/event_table.rb,
lib/sportdb/models/stats/event_standing.rb,
lib/sportdb/models/stats/group_standing.rb,
lib/sportdb/readers/squad_national_team.rb,
lib/sportdb/models/stats/alltime_standing.rb,
lib/sportdb/models/stats/event_standing_entry.rb,
lib/sportdb/models/stats/group_standing_entry.rb,
lib/sportdb/models/stats/alltime_standing_entry.rb

Overview

forward references

require first to resolve circular references

Defined Under Namespace

Modules: FixtureHelpers, Matcher, Model, StandingsHelper Classes: AssocReader, ClubSquadReader, CreateDb, CsvGameReader, DateFinder, DateFinderBase, Deleter, EventMetaReader, EventReader, EventTableReader, GameReader, GoalStruct, GoalsFinder, GoalsMinuteStruct, GoalsParser, GoalsPlayerStruct, GroundReader, Lang, LeagueReader, NationalTeamSquadReader, Patcher, PrettyPrinter, Reader, ReaderBase, RsssfDateFinder, RsssfGameReader, ScoresFinder, SeasonReader, Standings, StandingsLine, Stats, TeamIndexer, TeamMapper, TeamReader, ZipReader

Constant Summary collapse

MAJOR =

todo: namespace inside version or something - why? why not??

1
MINOR =
18
PATCH =
0
VERSION =
[MAJOR,MINOR,PATCH].join('.')
TEAM_KEY_PATTERN =

about ruby regexps

try the rubular - Ruby regular expression editor and tester

-> http://rubular.com
 code -> ??  by ??

Jeff Avallone’s Regexper - Shows State-Automata Diagrams

try -> http://regexper.com
  code -> https://github.com/javallone/regexper

Regular Expressions | The Bastards Book of Ruby by Dan Nguyen

ruby.bastardsbook.com/chapters/regexes/

move to notes regex|patterns on geraldb.github.io ??

'\A[a-z]{3,}\z'
TEAM_KEY_PATTERN_MESSAGE =
"expected three or more lowercase letters a-z /#{TEAM_KEY_PATTERN}/"
TEAM_CODE_PATTERN =

must start w/ letter a-z (2 n 3 can be number or underscore _)

'\A[A-Z][A-Z0-9][A-Z0-9_]?\z'
TEAM_CODE_PATTERN_MESSAGE =
"expected two or three uppercase letters A-Z (and 0-9_; must start with A-Z) /#{TEAM_CODE_PATTERN}/"
Models =

add backwards compatible n convenience namespace

Model

Class Method Summary collapse

Class Method Details



14
15
16
# File 'lib/sportdb/version.rb', line 14

def self.banner
  "sportdb-models/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
end

.config_pathObject



105
106
107
# File 'lib/sportdb/models.rb', line 105

def self.config_path
  "#{root}/config"
end

.connect(config = {}) ⇒ Object



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# File 'lib/sportdb/models.rb', line 197

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' )

    if db.scheme == 'postgres'
      config = {
        adapter: 'postgresql',
        host: db.host,
        port: db.port,
        username: db.user,
        password: db.password,
        database: db.path[1..-1],
        encoding: 'utf8'
      }
    else # assume sqlite3
     config = {
       adapter: db.scheme, # sqlite3
       database: db.path[1..-1] # sport.db (NB: cut off leading /, thus 1..-1)
    }
    end
  end

  ## 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'
    ## check/todo: if in memory e.g. ':memory:' no pragma needed!!
    con = ActiveRecord::Base.connection
    con.execute( 'PRAGMA synchronous=OFF;' )
    con.execute( 'PRAGMA journal_mode=OFF;' )
    con.execute( 'PRAGMA temp_store=MEMORY;' )
  end
end

.createObject



130
131
132
133
# File 'lib/sportdb/models.rb', line 130

def self.create
  CreateDb.new.up
  ConfDb::Model::Prop.create!( key: 'db.schema.sport.version', value: VERSION )
end

.create_allObject



135
136
137
138
139
140
141
142
143
# File 'lib/sportdb/models.rb', line 135

def self.create_all
  ## build schema - convenience helper
  LogDb.create
  ConfDb.create
  TagDb.create
  WorldDb.create
  PersonDb.create
  SportDb.create
end

.data_pathObject



109
110
111
# File 'lib/sportdb/models.rb', line 109

def self.data_path
  "#{root}/data"
end

.delete!Object

delete ALL records (use with care!)



181
182
183
184
# File 'lib/sportdb/models.rb', line 181

def self.delete!
  puts '*** deleting sport table records/data...'
  Deleter.new.run
end

.langObject



118
119
120
121
122
123
124
125
126
127
# File 'lib/sportdb/models.rb', line 118

def self.lang
  # todo/fix: find a better way for single instance ??
  #  will get us ruby warning:  instance variable @lang not initialized   => find a better way!!!
  #   just use @lang w/o .nil?  e.g.
  #  @lang =|| Lang.new   why? why not??  or better use @@lang =|| Lang.new  for class variable!!!
   if @lang.nil?
     @lang = Lang.new
   end
   @lang
end

.read(ary, include_path) ⇒ Object

load built-in (that is, bundled within the gem) named plain text seeds

  • pass in an array of pairs of event/seed names e.g. [[‘at.2012/13’, ‘at/2012_13/bl’],

    ['cl.2012/13', 'cl/2012_13/cl']] etc.
    


171
172
173
174
175
176
177
# File 'lib/sportdb/models.rb', line 171

def self.read( ary, include_path )
  reader = Reader.new( include_path )
  ## todo: check kind_of?( Array ) or kind_of?(String) to support array or string
  ary.each do |name|
    reader.load( name )
  end
end

.read_all(include_path) ⇒ Object

convenience helper



157
158
159
# File 'lib/sportdb/models.rb', line 157

def self.read_all( include_path )   # convenience helper
  read_setup( 'setups/all', include_path )
end

.read_builtinObject



161
162
163
# File 'lib/sportdb/models.rb', line 161

def self.read_builtin
  read_setup( 'setups/all', data_path )
end

.read_setup(setup, include_path) ⇒ Object



146
147
148
149
# File 'lib/sportdb/models.rb', line 146

def self.read_setup( setup, include_path )
  reader = Reader.new( include_path )
  reader.load_setup( setup )
end

.read_setup_from_zip(zip_name, setup, include_path, opts = {}) ⇒ Object

todo/check - use a better (shorter) name ??



151
152
153
154
155
# File 'lib/sportdb/models.rb', line 151

def self.read_setup_from_zip( zip_name, setup, include_path, opts={} ) ## todo/check - use a better (shorter) name ??
  reader = ZipReader.new( zip_name, include_path, opts )
  reader.load_setup( setup )
  reader.close
end

.rootObject



18
19
20
# File 'lib/sportdb/version.rb', line 18

def self.root
  "#{File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )}"
end

.setup_in_memory_dbObject



248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/sportdb/models.rb', line 248

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?

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

  ## build schema
  SportDb.create_all

  ## read builtins - why? why not?
  SportDb.read_builtin
end

.tablesObject



192
193
194
# File 'lib/sportdb/models.rb', line 192

def self.tables
  Stats.new.tables
end

.test_data_pathObject



113
114
115
# File 'lib/sportdb/models.rb', line 113

def self.test_data_path
  "#{root}/test/data"
end

.update!Object

method delete!



186
187
188
189
# File 'lib/sportdb/models.rb', line 186

def self.update!
  puts '*** update event fixtures...'
  Updater.new.run
end

.versionObject



10
11
12
# File 'lib/sportdb/version.rb', line 10

def self.version
  VERSION
end