sportradar 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +563 -25
  3. data/lib/sportradar.rb +37 -0
  4. data/lib/sportradar/client/api_request.rb +8 -0
  5. data/lib/sportradar/client/client.rb +10 -4
  6. data/lib/sportradar/client/configuration.rb +7 -2
  7. data/lib/sportradar/feeds/league_hierarchy.rb +12 -0
  8. data/lib/sportradar/feeds/league_schedule.rb +18 -0
  9. data/lib/sportradar/mlb/league_hierarchy.rb +1 -7
  10. data/lib/sportradar/mlb/league_schedule.rb +7 -12
  11. data/lib/sportradar/mlb/models/scoring_play.rb +2 -2
  12. data/lib/sportradar/nfl/boxscore.rb +9 -0
  13. data/lib/sportradar/nfl/extended_boxscore.rb +9 -0
  14. data/lib/sportradar/nfl/game_depth_chart.rb +9 -0
  15. data/lib/sportradar/nfl/game_injuries.rb +9 -0
  16. data/lib/sportradar/nfl/game_request.rb +24 -0
  17. data/lib/sportradar/nfl/game_roster.rb +9 -0
  18. data/lib/sportradar/nfl/game_statistics.rb +9 -0
  19. data/lib/sportradar/nfl/game_summary.rb +9 -0
  20. data/lib/sportradar/nfl/league_hierarchy.rb +9 -0
  21. data/lib/sportradar/nfl/league_schedule.rb +33 -0
  22. data/lib/sportradar/nfl/parsers/boxscore_parser.rb +124 -0
  23. data/lib/sportradar/nfl/play_by_play.rb +9 -0
  24. data/lib/sportradar/nfl/play_summary.rb +27 -0
  25. data/lib/sportradar/nfl/rankings.rb +9 -0
  26. data/lib/sportradar/nfl/season_statistics.rb +28 -0
  27. data/lib/sportradar/nfl/standings.rb +9 -0
  28. data/lib/sportradar/nfl/team_depth_chart.rb +17 -0
  29. data/lib/sportradar/nfl/team_depth_charts.rb +17 -0
  30. data/lib/sportradar/nfl/team_roster.rb +17 -0
  31. data/lib/sportradar/nfl/team_rosters.rb +17 -0
  32. data/lib/sportradar/nfl/team_statistics.rb +18 -0
  33. data/lib/sportradar/nfl/teams_request.rb +39 -0
  34. data/lib/sportradar/nfl/weekly_boxscore.rb +9 -0
  35. data/lib/sportradar/nfl/weekly_extended_boxscores.rb +20 -0
  36. data/lib/sportradar/nfl/weekly_game_depth_charts.rb +20 -0
  37. data/lib/sportradar/nfl/weekly_game_statistics.rb +21 -0
  38. data/lib/sportradar/nfl/weekly_game_summary.rb +21 -0
  39. data/lib/sportradar/nfl/weekly_leaders.rb +9 -0
  40. data/lib/sportradar/nfl/weekly_play_by_play.rb +21 -0
  41. data/lib/sportradar/nfl/weekly_schedule.rb +26 -0
  42. data/lib/sportradar/version.rb +1 -1
  43. data/sample.env +7 -0
  44. data/sportradar.gemspec +1 -1
  45. metadata +36 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6fd07a092b78fc00238d29f30a170a0555eea953
4
- data.tar.gz: d653d2e7c3eb380a78209f836ad94ce5ad7c01e5
3
+ metadata.gz: 9e591077ce14b3b9fe91f220694d95d3c8cb280d
4
+ data.tar.gz: 14fdd483819317b7147600f8cb9f8d85821e6f91
5
5
  SHA512:
6
- metadata.gz: 8b8877a1d311f3ab4c318f6607783ddef5e0d16551fefe41a9d721ee68ded55237b3f7d44f5223ddedc573eaf52f1ae383631283fa7f33fabfc659526d310803
7
- data.tar.gz: a152c4ea1039c926d1518c79f7b9c73fd0ebf0acc50bc87c2efee9af0499f59620ecc0a146b5194795bcf1952c3e318281f12d33f4fde0cd60e8f8898f5b5719
6
+ metadata.gz: be241a229c81a3a6fdfbac96aa95540442ef84e92544a2df733bc17022ecb181555fd4f149c83e9e659ce8dd5b13e008f89f02458459f584efc52f32f19b9111
7
+ data.tar.gz: c61700ef6f70663299d7663010e78c060ae8f206868e12885f6ff9c5565c1f9c9adef6fc242002886c7827ff7a257373bc5e03a4a3c557236df264cba2cfa3f3
data/README.md CHANGED
@@ -2,14 +2,17 @@
2
2
 
3
3
  Simple API client for [Sportradar API](http://developer.sportradar.us/).
4
4
 
5
- Currently supports [Major League Baseball API](http://developer.sportradar.us/docs/MLB_API) endpoints.
5
+ Currently supports
6
+
7
+ * a subset of [Major League Baseball API](http://developer.sportradar.us/docs/MLB_API) endpoints
8
+ * complete set of [NFL Classic Feed API](http://developer.sportradar.us/docs/read/NFL_Classic) endpoints
6
9
 
7
10
  ## Installation
8
11
 
9
12
  Add this line to your application's Gemfile:
10
13
 
11
14
  ```ruby
12
- gem 'sportradar'
15
+ gem 'sportradar', '>= 0.0.4'
13
16
  ```
14
17
 
15
18
  And then execute:
@@ -27,15 +30,26 @@ Or install it yourself as:
27
30
  In your `.env`:
28
31
 
29
32
  ```
30
- SPORTRADAR_ACCESS_LEVEL=t
33
+ SPORTRADAR_ACCESS_LEVEL_MLB=t
31
34
  SPORTRADAR_API_KEY_MLB=YOUR_API_KEY
35
+
36
+ SPORTRADAR_ACCESS_LEVEL_NBA=t
32
37
  SPORTRADAR_API_KEY_NBA=YOUR_API_KEY
38
+
39
+ SPORTRADAR_ACCESS_LEVEL_NFL=t
33
40
  SPORTRADAR_API_KEY_NFL=YOUR_API_KEY
41
+
42
+ SPORTRADAR_ACCESS_LEVEL_NHL=t
34
43
  SPORTRADAR_API_KEY_NHL=YOUR_API_KEY
44
+
35
45
  SPORTRADAR_FILE_PATH=/path/to/save/responses
36
46
  ```
37
47
 
38
- `SPORTRADAR_ACCESS_LEVEL` is `t` or 'p'
48
+ `SPORTRADAR_ACCESS_LEVEL` is `t` or 'p' (or 'rt')
49
+
50
+ Note: Currently only MLB and NFL support.
51
+
52
+ Important: This is a breaking change from version 0.0.3 that had a global access level.
39
53
 
40
54
  ### Console
41
55
 
@@ -65,34 +79,74 @@ Defaults to and supports API version 5 only.
65
79
  * `Sportradar::Mlb::TeamRosters.new().fetch`
66
80
  * `Sportradar::Mlb::Venues.new().fetch`
67
81
 
68
- Note: `.save` vs `.fetch` will store in the path specified in `SPORTRADAR_FILE_PATH`. However, you need to have a directory created for each request within that path.
82
+ Note: `.save` vs `.fetch` will store in the path specified in `SPORTRADAR_FILE_PATH`.
69
83
 
70
- For example:
84
+ #### Bulk Saves
85
+
86
+ Some helpers will call .save for each response as separate items.
87
+
88
+ * `Sportradar::Mlb::DailyGameSummary.new(date: Date.today).perform`
89
+ * `Sportradar::Mlb::DailyPlayByPlay.new(date: Date.today).perform`
90
+
91
+ ### Football/NFL
92
+
93
+ Defaults to and supports NFL Classic API feed version 1 only (not Official).
94
+
95
+ #### API Requests
71
96
 
72
- * `boxscore`
73
- * `daily_boxscore`
74
- * `daily_game_summary`
75
- * `daily_play_by_play`
76
- * `daily_schedule`
77
- * `daily_summary`
78
- * `game_summary`
79
- * `glossary`
80
- * `injuries`
81
- * `league_hierarchy`
82
- * `league_schedule`
83
- * `play_by_play`
84
- * `player_profile`
85
- * `team_active_rosters`
86
- * `team_profile`
87
- * `team_rosters`
88
- * `venues`
97
+ * `Sportradar::Nfl::LeagueHierarchy.new().fetch`
98
+ * `Sportradar::Nfl::WeeklySchedule.new(year: '2016', interval_type: <reg|pre|pst>, week: <0..17>).fetch`
99
+ * `Sportradar::Nfl::LeagueSchedule.new(year: '2016', interval_type: <reg|pre|pst>).fetch`
100
+ * `Sportradar::Nfl::GameStatistics.new(week: 1,
101
+ year: 2015,
102
+ interval_type: 'reg',
103
+ away_team_abbreviation: 'PIT',
104
+ home_team_abbreviation: 'NE').fetch`
105
+ * `Sportradar::Nfl::GameSummary.new(week: 1,
106
+ year: 2015,
107
+ interval_type: 'reg',
108
+ away_team_abbreviation: 'PIT',
109
+ home_team_abbreviation: 'NE').fetch`
110
+ * `Sportradar::Nfl::PlayByPlay.new(week: 1,
111
+ year: 2015,
112
+ interval_type: 'reg',
113
+ away_team_abbreviation: 'PIT',
114
+ home_team_abbreviation: 'NE').fetch`
115
+ * `Sportradar::Nfl::PlaySummary.new(week: 1,
116
+ year: 2015,
117
+ interval_type: 'reg',
118
+ away_team_abbreviation: 'PIT',
119
+ home_team_abbreviation: 'NE',
120
+ play_id: '4788eac3-c59e-4f82-94ef-d449ac6d6fca').fetch`
121
+ * `Sportradar::Nfl::Boxscore.new(week: 1,
122
+ year: 2015,
123
+ away_team_abbreviation: 'PIT',
124
+ home_team_abbreviation: 'NE').fetch`
125
+ * `Sportradar::Nfl::ExtendedBoxscore.new(week: 1,
126
+ year: 2015,
127
+ away_team_abbreviation: 'PIT',
128
+ home_team_abbreviation: 'NE').fetch`
129
+ * `Sportradar::Nfl::WeeklyBoxscore.new(week: 1, year: 2015).fetch`
130
+ * `Sportradar::Nfl::TeamRoster.new(team_abbreviation: 'NE').fetch`
131
+ * `Sportradar::Nfl::GameDepthChart.new(week: 1, year: 2015, away_team_abbreviation: 'PIT', home_team_abbreviation: 'NE').fetch`
132
+ * `Sportradar::Nfl::TeamDepthChart.new(team_abbreviation: 'NE').fetch`
133
+ * `Sportradar::Nfl::WeeklyLeaders.new(week: 1, year: 2015).fetch`
134
+ * `Sportradar::Nfl::Standings.new(year: 2015, interval_type: <reg|pre|pst>).fetch`
135
+ * `Sportradar::Nfl::Rankings.new(year: 2015).fetch`
136
+ * `Sportradar::Nfl::TeamStatistics.new(year: 2015, interval_type: 'reg', team_abbreviation: 'NE').fetch`
89
137
 
90
138
  #### Bulk Saves
91
139
 
92
140
  Some helpers will call `.save` for each response as separate items.
93
141
 
94
- * `Sportradar::Mlb::DailyGameSummary.new(date: Date.today).perform`
95
- * `Sportradar::Mlb::DailyPlayByPlay.new(date: Date.today).perform`
142
+ * `Sportradar::Nfl::TeamRosters.perform`
143
+ * `Sportradar::Nfl::TeamDepthCharts.perform`
144
+ * `Sportradar::Nfl::WeeklyExtendedBoxscores.perform(year: 2015, interval_type: 'reg', week: 1)`
145
+ * `Sportradar::Nfl::WeeklyGameDepthCharts.perform(year: 2015, interval_type: 'reg', week: 1)`
146
+ * `Sportradar::Nfl::WeeklyGameStatistics.perform(year: 2015, interval_type: 'reg', week: 2)`
147
+ * `Sportradar::Nfl::WeeklyGameSummary.perform(year: 2015, interval_type: 'reg', week: 2)`
148
+ * `Sportradar::Nfl::WeeklyPlayByPlay.perform(year: 2015, interval_type: 'reg', week: 1)`
149
+ * `Sportradar::Nfl::SeasonStatistics.perform(year: 2015, interval_type: 'reg')`
96
150
 
97
151
  ### Model Helpers
98
152
 
@@ -152,6 +206,490 @@ sp.home_team_runner_ids
152
206
  "8ec56596-5b8b-41f8-88a7-384f20b8b6a7"]
153
207
  ```
154
208
 
209
+ #### Play by Play, At Bats and Pitches
210
+
211
+ The `Sportradar::Mlb::Parsers::PlayByPlayParser.new(game_play_by_play: g.game_play_by_play)` takes thes play-by-play json and can return
212
+
213
+ * `.at_bats`
214
+ * `.at_bat_summary`
215
+ * `.pitches`
216
+ * `.pitch_summary`
217
+
218
+ Both the `at_bats` and `pitch` are models with each attribute, like `pitch_speed` or `hitter_id`.
219
+
220
+ The summary convenience methods list each at bat or pitch as text.
221
+
222
+ #### At Bat Summary
223
+
224
+ Given the play-by-play json, `Sportradar::Mlb::Parsers::PlayByPlayParser.new(game_play_by_play: g.game_play_by_play).at_bat_summary` returns:
225
+
226
+ ```
227
+ T of 1: Ruben Tejada strikes out swinging.
228
+ T of 1: Grant Green singles to shallow center field.
229
+ T of 1: Brandon Belt walks. Grant Green to second.
230
+ T of 1: Buster Posey singles to shallow right field. Brandon Belt to second. Grant Green to third.
231
+ T of 1: Brandon Crawford strikes out swinging.
232
+ T of 1: Mac Williamson grounds out to third base, Jake Lamb to Paul Goldschmidt.
233
+ B of 1: Jean Segura flies out to shallow right field to Mac Williamson.
234
+ B of 1: Michael Bourn singles to shallow infield.
235
+ B of 1: Paul Goldschmidt reaches on a fielder's choice to second base. Michael Bourn out at second.
236
+ B of 1: Jake Lamb strikes out swinging.
237
+ T of 2: Trevor Brown grounds out to third base, Jake Lamb to Paul Goldschmidt.
238
+ T of 2: Jarrett Parker grounds out to second base, Philip Gosselin to Paul Goldschmidt.
239
+ T of 2: Albert Suarez strikes out swinging.
240
+ B of 2: Yasmany Tomas grounds out to shortstop, Brandon Crawford to Buster Posey.
241
+ B of 2: Philip Gosselin doubles to deep left center field.
242
+ B of 2: Brandon Drury doubles to deep left center field. Philip Gosselin scores.
243
+ B of 2: Tuffy Gosewisch singles to shallow left field. Brandon Drury to third.
244
+ B of 2: Robbie Ray out on a sacrifice bunt to shallow infield, Buster Posey to Grant Green. Tuffy Gosewisch to second.
245
+ B of 2: Jean Segura flies out to center field to Jarrett Parker.
246
+ T of 3: Ruben Tejada lines out to left center field to Brandon Drury.
247
+ T of 3: Grant Green singles to center field.
248
+ T of 3: Brandon Belt singles to right field. Grant Green to second.
249
+ T of 3: Buster Posey lines out to center field to Michael Bourn.
250
+ T of 3: Brandon Crawford hit by pitch. Brandon Belt to second. Grant Green to third.
251
+ T of 3: Mac Williamson singles to shallow center field. Brandon Crawford to third. Brandon Belt scores. Grant Green scores.
252
+ T of 3: Trevor Brown called out on strikes.
253
+ B of 3: Michael Bourn grounds out to shortstop, Ruben Tejada to Buster Posey.
254
+ B of 3: Paul Goldschmidt grounds out to shortstop, Brandon Crawford to Buster Posey.
255
+ B of 3: Jake Lamb strikes out swinging.
256
+ T of 4: Jarrett Parker lines out to left field to Brandon Drury.
257
+ T of 4: Albert Suarez singles to shallow center field.
258
+ T of 4: Ruben Tejada doubles to deep center field. Albert Suarez to third.
259
+ T of 4: Grant Green flies out to left field to Brandon Drury.
260
+ T of 4: Brandon Belt doubles to left field. Ruben Tejada scores. Albert Suarez scores.
261
+ T of 4: Buster Posey walks.
262
+ T of 4: Brandon Crawford strikes out swinging.
263
+ B of 4: Yasmany Tomas strikes out swinging.
264
+ B of 4: Philip Gosselin grounds out to first base, Buster Posey to Albert Suarez.
265
+ B of 4: Brandon Drury grounds out to shortstop, Brandon Crawford to Buster Posey.
266
+ T of 5: Mac Williamson grounds out to third base, Jake Lamb to Paul Goldschmidt.
267
+ T of 5: Trevor Brown grounds out to third base, Jake Lamb to Paul Goldschmidt.
268
+ T of 5: Jarrett Parker called out on strikes.
269
+ B of 5: Tuffy Gosewisch grounds out to third base, Ruben Tejada to Brandon Crawford to Buster Posey.
270
+ B of 5: Robbie Ray grounds out to second base, Grant Green to Buster Posey.
271
+ B of 5: Jean Segura doubles to deep right field.
272
+ B of 5: Michael Bourn strikes out swinging.
273
+ T of 6: Albert Suarez strikes out swinging.
274
+ T of 6: Ruben Tejada grounds out to third base, Jake Lamb to Paul Goldschmidt.
275
+ T of 6: Grant Green strikes out swinging.
276
+ B of 6: Paul Goldschmidt homers to center field.
277
+ B of 6: Jake Lamb lines out to deep center field to Jarrett Parker.
278
+ B of 6: Yasmany Tomas grounds out to second base, Grant Green to Buster Posey.
279
+ B of 6: Philip Gosselin called out on strikes.
280
+ T of 7: Brandon Belt strikes out swinging.
281
+ T of 7: Buster Posey walks.
282
+ T of 7: Brandon Crawford strikes out on a foul tip.
283
+ T of 7: Mac Williamson lines out to deep left field to Brandon Drury.
284
+ B of 7: Brandon Drury flies out to deep left field to Brandon Belt.
285
+ B of 7: Tuffy Gosewisch singles to left field.
286
+ B of 7: Chris Herrmann strikes out swinging.
287
+ B of 7: Jean Segura grounds out to shallow infield, George Kontos to Buster Posey.
288
+ T of 8: Trevor Brown flies out to right center field to Yasmany Tomas.
289
+ T of 8: Jarrett Parker strikes out swinging.
290
+ T of 8: Conor Gillaspie grounds out to second base, Philip Gosselin to Paul Goldschmidt.
291
+ B of 8: Michael Bourn grounds out to first base to Buster Posey.
292
+ B of 8: Paul Goldschmidt reaches on error. Fielding error by Gerald Posey.
293
+ B of 8: Jake Lamb homers to right field. Paul Goldschmidt scores.
294
+ B of 8: Yasmany Tomas grounds out to first base, Buster Posey to Cory Gearrin.
295
+ B of 8: Philip Gosselin walks.
296
+ B of 8: Brandon Drury flies out to center field to Jarrett Parker.
297
+ T of 9: Ruben Tejada called out on strikes.
298
+ T of 9: Grant Green grounds out to shortstop, Jean Segura to Paul Goldschmidt.
299
+ T of 9: Brandon Belt walks.
300
+ T of 9: Buster Posey lines out to deep left field to Brandon Drury.
301
+ B of 9: Tuffy Gosewisch strikes out swinging.
302
+ B of 9: Rickie Weeks walks.
303
+ B of 9: Jean Segura lines out to shallow infield to Hunter Strickland. Rickie Weeks doubled off first.
304
+ T of 10: Brandon Crawford flies out to deep right center field to Yasmany Tomas.
305
+ T of 10: Mac Williamson strikes out on a foul tip.
306
+ T of 10: Trevor Brown called out on strikes.
307
+ B of 10: Michael Bourn grounds out to second base, Grant Green to Buster Posey.
308
+ B of 10: Paul Goldschmidt grounds out to shortstop, Brandon Crawford to Buster Posey.
309
+ B of 10: Jake Lamb strikes out swinging.
310
+ T of 11: Jarrett Parker walks.
311
+ T of 11: Ramiro Pena doubles to deep right field. Jarrett Parker scores.
312
+ T of 11: Ruben Tejada out on a sacrifice bunt to shallow infield, Enrique Burgos to Paul Goldschmidt. Ramiro Pena to third.
313
+ T of 11: Angel Pagan strikes out swinging.
314
+ T of 11: Brandon Belt pops out to shallow left field to Jake Lamb.
315
+ B of 11: Yasmany Tomas singles to shallow left field.
316
+ B of 11: Philip Gosselin out on a sacrifice bunt to shallow infield, Ruben Tejada to Ramiro Pena. Yasmany Tomas to second.
317
+ B of 11: Brandon Drury grounds out to third base, Ruben Tejada to Buster Posey.
318
+ B of 11: Welington Castillo walks.
319
+ B of 11: Peter O'Brien strikes out swinging.
320
+ ```
321
+
322
+ #### Pitch Summary
323
+
324
+ Given the play-by-play json, `Sportradar::Mlb::Parsers::PlayByPlayParser.new(game_play_by_play: g.game_play_by_play).pitch_summary` returns the type and result of each pitch:
325
+
326
+ ```
327
+ Fastball = Strike Looking
328
+ Fastball = Foul Ball
329
+ Fastball = Ball
330
+ Fastball = Foul Ball
331
+ Slider = Strike Swinging
332
+ Fastball = Strike Looking
333
+ Fastball = Foul Ball
334
+ Fastball = Single
335
+ Slider = Ball
336
+ Slider = Ball
337
+ Fastball = Ball
338
+ Fastball = Ball
339
+ Fastball = Foul Tip
340
+ Fastball = Single
341
+ Slider = Strike Swinging
342
+ Slider = Dirt Ball
343
+ Fastball = Strike Looking
344
+ Fastball = Ball
345
+ Fastball = Ball
346
+ Slider = Foul Ball
347
+ Fastball = Strike Swinging
348
+ Fastball = Strike Looking
349
+ Fastball = Ball
350
+ Fastball = Foul Ball
351
+ Slider = Ball
352
+ Fastball = Ground Out
353
+ Sinker = Ball
354
+ Fastball = Strike Looking
355
+ Sinker = Ball
356
+ Slider = Fly Out
357
+ Sinker = Ball
358
+ Fastball = Single
359
+ Slider = Strike Looking
360
+ Sinker = Dirt Ball
361
+ Sinker = Strike Swinging
362
+ Sinker = Foul Ball
363
+ Fastball = Ball
364
+ Slider = Fielders Choice
365
+ Fastball = Ball
366
+ Changeup = Foul Ball
367
+ Sinker = Ball
368
+ Fastball = Foul Ball
369
+ Curveball = Foul Ball
370
+ Curveball = Strike Swinging
371
+ Changeup = Ball
372
+ Fastball = Ground Out
373
+ Fastball = Strike Looking
374
+ Fastball = Foul Ball
375
+ Fastball = Ground Out
376
+ Fastball = Strike Looking
377
+ Fastball = Ball
378
+ Fastball = Ball
379
+ Fastball = Strike Swinging
380
+ Fastball = Strike Swinging
381
+ Sinker = Strike Looking
382
+ Slider = Foul Ball
383
+ Slider = Ground Out
384
+ Fastball = Strike Looking
385
+ Fastball = Ball
386
+ Changeup = Foul Ball
387
+ Sinker = Ball
388
+ Sinker = Ball
389
+ Slider = Double
390
+ Sinker = Double
391
+ Slider = Ball
392
+ Fastball = Strike Looking
393
+ Sinker = Strike Swinging
394
+ Curveball = Dirt Ball
395
+ Slider = Ball
396
+ Sinker = Single
397
+ Sinker = Foul Ball
398
+ Slider = Ball
399
+ Sinker = Sacrifice Bunt
400
+ Curveball = Ball
401
+ Fastball = Ball
402
+ Slider = Strike Looking
403
+ Slider = Fly Out
404
+ Fastball = Strike Looking
405
+ Curveball = Ball
406
+ Fastball = Line Out
407
+ Slider = Ball
408
+ Fastball = Single
409
+ Fastball = Strike Looking
410
+ Fastball = Foul Ball
411
+ Slider = Foul Ball
412
+ Fastball = Ball
413
+ Fastball = Foul Ball
414
+ Slider = Single
415
+ Fastball = Foul Ball
416
+ Slider = Line Out
417
+ Fastball = Strike Looking
418
+ Fastball = Hit By Pitch
419
+ Fastball = Single
420
+ Fastball = Strike Looking
421
+ Fastball = Strike Swinging
422
+ Fastball = Strike Looking
423
+ Sinker = Strike Looking
424
+ Curveball = Foul Ball
425
+ Sinker = Foul Ball
426
+ Fastball = Ground Out
427
+ Sinker = Ball
428
+ Slider = Ball
429
+ Fastball = Strike Looking
430
+ Slider = Strike Looking
431
+ Slider = Ball
432
+ Fastball = Foul Ball
433
+ Slider = Ground Out
434
+ Curveball = Ball
435
+ Changeup = Strike Looking
436
+ Curveball = Ball
437
+ Sinker = Foul Ball
438
+ Sinker = Foul Ball
439
+ Sinker = Foul Ball
440
+ Sinker = Ball
441
+ Curveball = Strike Swinging
442
+ Fastball = Line Out
443
+ Fastball = Strike Looking
444
+ Fastball = Ball
445
+ Fastball = Single
446
+ Fastball = Ball
447
+ Fastball = Foul Ball
448
+ Slider = Ball
449
+ Slider = Ball
450
+ Fastball = Double
451
+ Fastball = Ball
452
+ Fastball = Fly Out
453
+ Slider = Strike Swinging
454
+ Fastball = Strike Swinging
455
+ Fastball = Foul Ball
456
+ Fastball = Double
457
+ Intentional Ball = iBall
458
+ Intentional Ball = iBall
459
+ Intentional Ball = iBall
460
+ Intentional Ball = iBall
461
+ Slider = Strike Swinging
462
+ Fastball = Ball
463
+ Slider = Strike Swinging
464
+ Slider = Foul Ball
465
+ Fastball = Ball
466
+ Slider = Strike Swinging
467
+ Slider = Strike Swinging
468
+ Fastball = Ball
469
+ Slider = Foul Ball
470
+ Slider = Foul Ball
471
+ Fastball = Ball
472
+ Slider = Ball
473
+ Sinker = Strike Swinging
474
+ Slider = Ball
475
+ Fastball = Strike Looking
476
+ Sinker = Ground Out
477
+ Slider = Ball
478
+ Slider = Ball
479
+ Slider = Strike Looking
480
+ Fastball = Ground Out
481
+ Fastball = Strike Looking
482
+ Slider = Strike Looking
483
+ Slider = Foul Ball
484
+ Fastball = Foul Ball
485
+ Slider = Ball
486
+ Fastball = Ground Out
487
+ Slider = Ground Out
488
+ Slider = Ball
489
+ Slider = Strike Swinging
490
+ Slider = Strike Swinging
491
+ Fastball = Ball
492
+ Slider = Strike Looking
493
+ Sinker = Ground Out
494
+ Sinker = Strike Looking
495
+ Sinker = Foul Ball
496
+ Curveball = Ball
497
+ Curveball = Foul Ball
498
+ Fastball = Ground Out
499
+ Sinker = Foul Ball
500
+ Fastball = Double
501
+ Curveball = Strike Looking
502
+ Slider = Dirt Ball
503
+ Fastball = Foul Ball
504
+ Sinker = Strike Swinging
505
+ Fastball = Foul Ball
506
+ Slider = Foul Ball
507
+ Fastball = Foul Ball
508
+ Slider = Strike Swinging
509
+ Slider = Strike Looking
510
+ Slider = Ground Out
511
+ Slider = Strike Swinging
512
+ Fastball = Foul Ball
513
+ Slider = Strike Swinging
514
+ Slider = Ball
515
+ Slider = Foul Ball
516
+ Slider = Strike Swinging
517
+ Fastball = Ball
518
+ Curveball = Homerun
519
+ Changeup = Ball
520
+ Sinker = Line Out
521
+ Fastball = Ball
522
+ Fastball = Ball
523
+ Sinker = Ball
524
+ Sinker = Strike Looking
525
+ Sinker = Ground Out
526
+ Fastball = Foul Ball
527
+ Sinker = Ball
528
+ Sinker = Foul Ball
529
+ Sinker = Foul Ball
530
+ Sinker = Strike Looking
531
+ Slider = Ball
532
+ Sinker = Foul Ball
533
+ Sinker = Foul Ball
534
+ Sinker = Ball
535
+ Slider = Strike Swinging
536
+ Fastball = Ball
537
+ Slider = Ball
538
+ Changeup = Ball
539
+ Sinker = Foul Ball
540
+ Sinker = Ball
541
+ Sinker = Strike Swinging
542
+ Fastball = Ball
543
+ Slider = Foul Ball
544
+ Sinker = Ball
545
+ Fastball = Foul Tip
546
+ Fastball = Ball
547
+ Slider = Strike Looking
548
+ Fastball = Line Out
549
+ Slider = Fly Out
550
+ Cutter = Strike Looking
551
+ Cutter = Single
552
+ Fastball = Strike Swinging
553
+ Fastball = Foul Ball
554
+ Fastball = Ball
555
+ Fastball = Ball
556
+ Fastball = Ball
557
+ Fastball = Strike Swinging
558
+ Fastball = Ground Out
559
+ Slider = Ball
560
+ Fastball = Foul Ball
561
+ Slider = Fly Out
562
+ Fastball = Ball
563
+ Changeup = Foul Ball
564
+ Fastball = Ball
565
+ Fastball = Foul Ball
566
+ Fastball = Ball
567
+ Fastball = Strike Swinging
568
+ Fastball = Strike Looking
569
+ Fastball = Ground Out
570
+ Sinker = Ground Out
571
+ Sinker = Ball
572
+ Sinker = Foul Ball
573
+ Slider = Reached On Error
574
+ Sinker = Ball
575
+ Slider = Strike Swinging
576
+ Sinker = Foul Ball
577
+ Changeup = Ball
578
+ Changeup = Ball
579
+ Slider = Homerun
580
+ Sinker = Ball
581
+ Sinker = Ball
582
+ Sinker = Ground Out
583
+ Sinker = Ball
584
+ Slider = Ball
585
+ Sinker = Ball
586
+ Sinker = Ball
587
+ Fastball = Foul Ball
588
+ Slider = Ball
589
+ Sinker = Ball
590
+ Slider = Strike Looking
591
+ Slider = Fly Out
592
+ Sinker = Ball
593
+ Sinker = Strike Looking
594
+ Sinker = Ball
595
+ Sinker = Foul Ball
596
+ Sinker = Ball
597
+ Sinker = Foul Ball
598
+ Sinker = Strike Looking
599
+ Sinker = Foul Ball
600
+ Changeup = Strike Swinging
601
+ Curveball = Ball
602
+ Curveball = Ball
603
+ Sinker = Foul Ball
604
+ Sinker = Foul Ball
605
+ Changeup = Foul Ball
606
+ Changeup = Ground Out
607
+ Changeup = Ball
608
+ Sinker = Ball
609
+ Sinker = Ball
610
+ Sinker = Strike Looking
611
+ Sinker = Ball
612
+ Sinker = Line Out
613
+ Curveball = Ball
614
+ Fastball = Strike Swinging
615
+ Fastball = Strike Looking
616
+ Fastball = Foul Ball
617
+ Fastball = Strike Swinging
618
+ Fastball = Strike Swinging
619
+ Fastball = Ball
620
+ Curveball = Ball
621
+ Fastball = Foul Ball
622
+ Curveball = Ball
623
+ Fastball = Foul Ball
624
+ Fastball = Ball
625
+ Curveball = Foul Ball
626
+ Curveball = Line Out
627
+ Changeup = Fly Out
628
+ Fastball = Strike Looking
629
+ Curveball = Ball
630
+ Changeup = Strike Looking
631
+ Splitter = Foul Tip
632
+ Fastball = Ball
633
+ Fastball = Ball
634
+ Changeup = Ball
635
+ Fastball = Strike Looking
636
+ Changeup = Strike Swinging
637
+ Changeup = Foul Ball
638
+ Changeup = Foul Ball
639
+ Fastball = Foul Ball
640
+ Fastball = Strike Looking
641
+ Fastball = Strike Looking
642
+ Cutter = Strike Looking
643
+ Fastball = Ball
644
+ Fastball = Ground Out
645
+ Fastball = Foul Ball
646
+ Changeup = Ball
647
+ Changeup = Ball
648
+ Fastball = Ground Out
649
+ Changeup = Ball
650
+ Fastball = Strike Swinging
651
+ Fastball = Strike Looking
652
+ Fastball = Strike Swinging
653
+ Slider = Ball
654
+ Fastball = Strike Swinging
655
+ Fastball = Ball
656
+ Slider = Ball
657
+ Slider = Foul Ball
658
+ Fastball = Foul Ball
659
+ Fastball = Ball
660
+ Fastball = Ball
661
+ Slider = Double
662
+ Slider = Foul Ball
663
+ Fastball = Sacrifice Bunt
664
+ Slider = Strike Looking
665
+ Fastball = Strike Looking
666
+ Fastball = Strike Swinging
667
+ Slider = Ball
668
+ Slider = Strike Looking
669
+ Fastball = Ball
670
+ Fastball = Strike Swinging
671
+ Fastball = Ball
672
+ Slider = Pop Out
673
+ Fastball = Foul Ball
674
+ Fastball = Single
675
+ Fastball = Ball
676
+ Fastball = Sacrifice Bunt
677
+ Fastball = Ball
678
+ Curveball = Strike Looking
679
+ Slider = Ball
680
+ Curveball = Ball
681
+ Curveball = Ground Out
682
+ Fastball = Ball
683
+ Fastball = Ball
684
+ Fastball = Ball
685
+ Fastball = Ball
686
+ Fastball = Strike Swinging
687
+ Curveball = Ball
688
+ Fastball = Foul Ball
689
+ Fastball = Ball
690
+ Curveball = Strike Swinging
691
+ ```
692
+
155
693
  ## Development
156
694
 
157
695
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.