class Sports::Match

Attributes

comments[R]
conf1[R]
conf2[R]
country1[R]
country2[R]
date[R]
goals[RW]
group[R]
league[R]
leg[R]
round[R]
score1[R]
score1agg[R]
score1et[R]
score1i[R]
score1p[R]
score2[R]
score2agg[R]
score2et[R]
score2i[R]
score2p[R]
stage[R]
status[R]
team1[R]
team2[R]
time[R]
winner[R]

Public Class Methods

new( **kwargs ) click to toggle source
# File lib/sportdb/structs/structs/match.rb, line 29
def initialize( **kwargs )
  @score1    =  @score2    = nil  ## full time
  @score1i   =  @score2i   = nil  ## half time (first (i) part)
  @score1et  =  @score2et  = nil  ## extra time
  @score1p   =  @score2p   = nil  ## penalty
  @score1agg =  @score2agg = nil  ## full time (all legs) aggregated


  update( kwargs )  unless kwargs.empty?
end
parse_csv( txt, headers: nil, filters: nil, converters: nil, sep: nil ) click to toggle source
# File lib/sportdb/structs.rb, line 94
def self.parse_csv( txt, headers: nil, filters: nil, converters: nil, sep: nil )
   SportDb::CsvMatchParser.parse( txt,
                                    headers:    headers,
                                    filters:    filters,
                                    converters: converters,
                                    sep:        sep )
end
read_csv( path, headers: nil, filters: nil, converters: nil, sep: nil ) click to toggle source
# File lib/sportdb/structs.rb, line 86
def self.read_csv( path, headers: nil, filters: nil, converters: nil, sep: nil )
   SportDb::CsvMatchParser.read( path,
                                   headers:    headers,
                                   filters:    filters,
                                   converters: converters,
                                   sep:        sep )
end

Public Instance Methods

complete?() click to toggle source
# File lib/sportdb/structs/structs/match.rb, line 156
def complete?()  true; end
over?() click to toggle source
# File lib/sportdb/structs/structs/match.rb, line 155
def over?()      true; end
score() click to toggle source
# File lib/sportdb/structs/structs/match.rb, line 159
def score
  Score.new( @score1i,   @score2i,    ## half time (first (i) part)
             @score1,    @score2,     ## full time
             @score1et,  @score2et,   ## extra time
             @score1p,   @score2p )   ## penalty
end
update( **kwargs ) click to toggle source
# File lib/sportdb/structs/structs/match.rb, line 40
def update( **kwargs )
  ## note: check with has_key?  because value might be nil!!!
  @date     = kwargs[:date]     if kwargs.has_key? :date
  @time     = kwargs[:time]     if kwargs.has_key? :time

  ## todo/fix: use team1_name, team2_name or similar - for compat with db activerecord version? why? why not?
  @team1    = kwargs[:team1]    if kwargs.has_key? :team1
  @team2    = kwargs[:team2]    if kwargs.has_key? :team2

  @conf1    = kwargs[:conf1]    if kwargs.has_key? :conf1
  @conf2    = kwargs[:conf2]    if kwargs.has_key? :conf2
  @country1 = kwargs[:country1]  if kwargs.has_key? :country1
  @country2 = kwargs[:country2]  if kwargs.has_key? :country2

  ## note: round is a string!!!  e.g. '1', '2' for matchday or 'Final', 'Semi-final', etc.
  ##   todo: use to_s - why? why not?
  @round    = kwargs[:round]    if kwargs.has_key? :round
  @stage    = kwargs[:stage]    if kwargs.has_key? :stage
  @leg      = kwargs[:leg]      if kwargs.has_key? :leg
  @group    = kwargs[:group]    if kwargs.has_key? :group
  @status   = kwargs[:status]   if kwargs.has_key? :status
  @comments = kwargs[:comments] if kwargs.has_key? :comments

  @league   = kwargs[:league]   if kwargs.has_key? :league


  if kwargs.has_key?( :score )   ## check all-in-one score struct for convenience!!!
    score = kwargs[:score]
    if score.nil?   ## reset all score attribs to nil!!
      @score1     = nil
      @score1i    = nil
      @score1et   = nil
      @score1p    = nil
      ## @score1agg  = nil

      @score2     = nil
      @score2i    = nil
      @score2et   = nil
      @score2p    = nil
      ## @score2agg  = nil
    else
      @score1     = score.score1
      @score1i    = score.score1i
      @score1et   = score.score1et
      @score1p    = score.score1p
      ## @score1agg  = score.score1agg

      @score2     = score.score2
      @score2i    = score.score2i
      @score2et   = score.score2et
      @score2p    = score.score2p
      ## @score2agg  = score.score2agg
    end
  else
    @score1     = kwargs[:score1]      if kwargs.has_key? :score1
    @score1i    = kwargs[:score1i]     if kwargs.has_key? :score1i
    @score1et   = kwargs[:score1et]    if kwargs.has_key? :score1et
    @score1p    = kwargs[:score1p]     if kwargs.has_key? :score1p
    @score1agg  = kwargs[:score1agg]   if kwargs.has_key? :score1agg

    @score2     = kwargs[:score2]      if kwargs.has_key? :score2
    @score2i    = kwargs[:score2i]     if kwargs.has_key? :score2i
    @score2et   = kwargs[:score2et]    if kwargs.has_key? :score2et
    @score2p    = kwargs[:score2p]     if kwargs.has_key? :score2p
    @score2agg  = kwargs[:score2agg]   if kwargs.has_key? :score2agg

    ## note: (always) (auto-)convert scores to integers
    @score1     = @score1.to_i      if @score1
    @score1i    = @score1i.to_i     if @score1i
    @score1et   = @score1et.to_i    if @score1et
    @score1p    = @score1p.to_i     if @score1p
    @score1agg  = @score1agg.to_i   if @score1agg

    @score2     = @score2.to_i      if @score2
    @score2i    = @score2i.to_i     if @score2i
    @score2et   = @score2et.to_i    if @score2et
    @score2p    = @score2p.to_i     if @score2p
    @score2agg  = @score2agg.to_i   if @score2agg
  end

  ## todo/fix:
  ##  gr-greece/2014-15/G1.csv:
  ##     G1,10/05/15,Niki Volos,OFI,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
  ##

  ##  for now score1 and score2 must be present
  ## if @score1.nil? || @score2.nil?
  ##  puts "** WARN: missing scores for match:"
  ##  pp kwargs
  ##  ## exit 1
  ## end

  ## todo/fix: auto-calculate winner
  # return 1,2,0   1 => team1, 2 => team2, 0 => draw/tie
  ### calculate winner - use 1,2,0
  ##
  ##  move winner calc to score class - why? why not?
  if @score1 && @score2
     if @score1 > @score2
        @winner = 1
     elsif @score2 > @score1
        @winner = 2
     elsif @score1 == @score2
        @winner = 0
     else
     end
  else
    @winner = nil   # unknown / undefined
  end

  self   ## note - MUST return self for chaining
end