Class: SportSearch::TeamSearch

Inherits:
Object
  • Object
show all
Defined in:
lib/sportdb/search/sport.rb

Overview

add virtual team search ( clubs + national teams)

note: no record base!!!!!

Constant Summary collapse

CLUB_NAME_RE =
%r{^
  (?<name>[^()]+?)     ## non-greedy
  (?:
     \s+
     \(
       (?<code>[A-Z][A-Za-z]{2,3})    ## optional (country) code; support single code e.g. (A) - why? why not?
     \)
  )?
$}x

Instance Method Summary collapse

Constructor Details

#initialize(clubs:, national_teams:) ⇒ TeamSearch

note: “virtual” index lets you search clubs and/or national_teams (don’t care)



286
287
288
289
# File 'lib/sportdb/search/sport.rb', line 286

def initialize( clubs:, national_teams: )
  @clubs          = clubs
  @national_teams = national_teams
end

Instance Method Details

#_find_by!(name:, league:, mods: nil) ⇒ Object

note: missing teams will get

   auto-created if possible
only ambigious results (too many matches) raise expection!!!


321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
# File 'lib/sportdb/search/sport.rb', line 321

def _find_by!( name:, league:, mods: nil )
  if mods && mods[ league.key ] && mods[ league.key ][ name ]
    mods[ league.key ][ name ]
  else
    if league.clubs?
      if league.intl?    ## todo/fix: add intl? to ActiveRecord league!!!
             ###
             ##  get country code from name
             ##    e.g. Liverpool FC (ENG) or
             ##         Liverpool FC (URU) etc.

             ## check for country code
             if m=CLUB_NAME_RE.match( name )
               if m[:code]
                 @clubs.find_by!( name: m[:name],
                                        country: m[:code] )
               else
                  @clubs.find!( name )
               end
             else
               puts "!! PARSE ERROR - invalid club name; cannot match with CLUB_NAME_RE >#{team}<"
               exit 1
             end
      else  ## assume clubs in domestic/national league tournament
         ## note - search by league countries (may incl. more than one country
         ##             e.g. us incl. ca, fr incl. mc, ch incl. li, etc.
        rec = @clubs.find_by( name: name, league: league )
        if rec.nil?
            puts "auto-create (missing) club #{name}"
            ##  todo/fix: add auto flag!!!!
            ###              like in rounds!!!
            ##   to track auto-created clubs
            rec = SportDb::Import::Club.new( name: name )
            rec.country = league.country  ## fix: country kwarg not yet supported!!
            pp rec
        end
        rec
      end
    else   ## assume national teams (not clubs)
      @national_teams.find!( name )
    end
  end
end

#_find_by_v0!(name:, league:, mods: nil) ⇒ Object



366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/sportdb/search/sport.rb', line 366

def _find_by_v0!( name:, league:, mods: nil )
  if mods && mods[ league.key ] && mods[ league.key ][ name ]
    mods[ league.key ][ name ]
  else
    if league.clubs?
      if league.intl?    ## todo/fix: add intl? to ActiveRecord league!!!
        @clubs.find!( name )
      else  ## assume clubs in domestic/national league tournament
         ## note - search by league countries (may incl. more than one country
         ##             e.g. us incl. ca, fr incl. mc, ch incl. li, etc.
        @clubs.find_by!( name: name, league: league )
      end
    else   ## assume national teams (not clubs)
      @national_teams.find!( name )
    end
  end
end

#find_by!(name:, league:, mods: nil) ⇒ Object

todo/check: rename to/use map_by! for array version - why? why not?



292
293
294
295
296
297
298
299
300
301
302
# File 'lib/sportdb/search/sport.rb', line 292

def find_by!( name:, league:, mods: nil )
  if name.is_a?( Array )
    recs = []
    name.each do |q|
      recs << _find_by!( name: q, league: league, mods: mods )
    end
    recs
  else  ## assume single name
    _find_by!( name: name, league: league, mods: mods )
  end
end