Class: Sportradar::Nhl::Models::Event

Inherits:
Object
  • Object
show all
Defined in:
lib/sportradar/nhl/models/event.rb

Direct Known Subclasses

Penalty, ScoringPlay

Constant Summary collapse

EVENT_TYPES =
%w(emptynetgoal endperiod endshootoutperiod evenstrength faceoff giveaway goal goaliechange hit penalty penaltygoal penaltyshotmissed penaltyshotsaved powerplay shootoutgoal shootoutshotmissed shootoutshotsaved shotmissed shotsaved startshootoutperiod stoppage takeaway teamtimeout tvtimeout)
PLAY_TYPES =
%w(emptynetgoal faceoff giveaway goal hit penalty penaltygoal penaltyshotmissed penaltyshotsaved powerplay shootoutgoal shootoutshotmissed shootoutshotsaved shotmissed shotsaved takeaway)
STOPPAGE_TYPES =
%w(stoppage teamtimeout tvtimeout endperiod)
SCORING_PLAY_TYPES =
%w(goal penaltygoal shootoutgoal)
PENALTY_TYPES =
%w(penalty)

Instance Method Summary collapse

Constructor Details

#initialize(period:, attributes:) ⇒ Event

Returns a new instance of Event.



12
13
14
15
16
# File 'lib/sportradar/nhl/models/event.rb', line 12

def initialize(period:, attributes:)
  @period = period
  @attributes = attributes
  build_statistics
end

Instance Method Details

#clockObject



67
68
69
# File 'lib/sportradar/nhl/models/event.rb', line 67

def clock
  @attributes['clock'] || '0'
end

#clock_secsObject Also known as: period_seconds



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/sportradar/nhl/models/event.rb', line 71

def clock_secs
  begin
    if clock && clock.include?(':')
      mins, secs = clock.split(':').map(&:to_i)
      Time.parse("00:#{mins}:#{secs}").
         seconds_since_midnight.to_i
    end
  rescue => e
    return 0
  end
end

#coordinate_xObject



104
105
106
# File 'lib/sportradar/nhl/models/event.rb', line 104

def coordinate_x
  coordinates['coord_x']
end

#coordinate_yObject



108
109
110
# File 'lib/sportradar/nhl/models/event.rb', line 108

def coordinate_y
  coordinates['coord_y']
end

#coordinatesObject



96
97
98
# File 'lib/sportradar/nhl/models/event.rb', line 96

def coordinates
  @attributes['location'] || {}
end

#coordinates?Boolean

Returns:

  • (Boolean)


100
101
102
# File 'lib/sportradar/nhl/models/event.rb', line 100

def coordinates?
  @attributes['location'].present?
end

#descriptionObject



88
89
90
# File 'lib/sportradar/nhl/models/event.rb', line 88

def description
  @attributes['description'] || 0
end

#event_typeObject



92
93
94
# File 'lib/sportradar/nhl/models/event.rb', line 92

def event_type
  @attributes['event_type']
end

#game_idObject



30
31
32
# File 'lib/sportradar/nhl/models/event.rb', line 30

def game_id
  period.game_id
end

#has_team?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/sportradar/nhl/models/event.rb', line 46

def has_team?
  !team_id.nil?
end

#idObject



26
27
28
# File 'lib/sportradar/nhl/models/event.rb', line 26

def id
  @attributes['id']
end

#officialObject



112
113
114
# File 'lib/sportradar/nhl/models/event.rb', line 112

def official
  @attributes['official']
end

#penalty?Boolean

Returns:

  • (Boolean)


144
145
146
# File 'lib/sportradar/nhl/models/event.rb', line 144

def penalty?
  PENALTY_TYPES.include?(event_type)
end

#periodObject



50
51
52
# File 'lib/sportradar/nhl/models/event.rb', line 50

def period
  @period
end

#period_idObject



54
55
56
# File 'lib/sportradar/nhl/models/event.rb', line 54

def period_id
  @period.id
end

#period_numberObject



58
59
60
# File 'lib/sportradar/nhl/models/event.rb', line 58

def period_number
  @period.number
end

#play?Boolean

Returns:

  • (Boolean)


148
149
150
# File 'lib/sportradar/nhl/models/event.rb', line 148

def play?
  PLAY_TYPES.include?(event_type)
end

#play_player_statsObject



136
137
138
# File 'lib/sportradar/nhl/models/event.rb', line 136

def play_player_stats
  @play_player_stats ||= []
end

#scoring_play?Boolean

Returns:

  • (Boolean)


152
153
154
# File 'lib/sportradar/nhl/models/event.rb', line 152

def scoring_play?
  SCORING_PLAY_TYPES.include?(event_type)
end

#scoring_playersObject



140
141
142
# File 'lib/sportradar/nhl/models/event.rb', line 140

def scoring_players
  @scoring_players ||= []
end

#statisticsObject



132
133
134
# File 'lib/sportradar/nhl/models/event.rb', line 132

def statistics
  @attributes['statistics'] || []
end

#stoppage?Boolean

Returns:

  • (Boolean)


156
157
158
# File 'lib/sportradar/nhl/models/event.rb', line 156

def stoppage?
  STOPPAGE_TYPES.include?(event_type)
end

#strengthObject



116
117
118
# File 'lib/sportradar/nhl/models/event.rb', line 116

def strength
  @attributes['strength']
end

#teamObject



34
35
36
# File 'lib/sportradar/nhl/models/event.rb', line 34

def team
  @attributes['attribution'] || {}
end

#team_goal_sideObject



42
43
44
# File 'lib/sportradar/nhl/models/event.rb', line 42

def team_goal_side
  team.dig('team_goal')
end

#team_idObject



38
39
40
# File 'lib/sportradar/nhl/models/event.rb', line 38

def team_id
  team.dig('id')
end

#time_codeObject



62
63
64
65
# File 'lib/sportradar/nhl/models/event.rb', line 62

def time_code
  min, sec = clock.split(':').map(&:to_i)
  "PT#{min}M#{sec}S"
end

#to_sObject



18
19
20
21
22
23
24
# File 'lib/sportradar/nhl/models/event.rb', line 18

def to_s
  if coordinates?
    "#{period_number} - #{clock} - #{event_type}: #{description} [#{coordinate_x}, #{coordinate_y}]"
  else
    "#{period_number} - #{clock} - #{event_type}: #{description}"
  end
end

#updated_atObject



128
129
130
# File 'lib/sportradar/nhl/models/event.rb', line 128

def updated_at
  @attributes['updated']
end

#wall_clockObject



120
121
122
# File 'lib/sportradar/nhl/models/event.rb', line 120

def wall_clock
  @attributes['wall_clock']
end

#zoneObject



124
125
126
# File 'lib/sportradar/nhl/models/event.rb', line 124

def zone
  @attributes['zone']
end