stattleship-ruby 0.1.25 → 0.1.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/examples/README.md +3 -1
  4. data/examples/at_bats.rb +25 -0
  5. data/examples/baseball_games.rb +2 -1
  6. data/examples/basketball_team_game_logs.rb +13 -6
  7. data/examples/line_ups.rb +21 -0
  8. data/examples/pitches.rb +26 -0
  9. data/lib/stattleship.rb +4 -0
  10. data/lib/stattleship/at_bats.rb +81 -0
  11. data/lib/stattleship/endpoint.rb +37 -0
  12. data/lib/stattleship/line_ups.rb +61 -0
  13. data/lib/stattleship/models.rb +4 -0
  14. data/lib/stattleship/models/at_bat.rb +51 -0
  15. data/lib/stattleship/models/line_up.rb +102 -0
  16. data/lib/stattleship/models/pitch.rb +369 -0
  17. data/lib/stattleship/models/player.rb +9 -1
  18. data/lib/stattleship/params.rb +4 -0
  19. data/lib/stattleship/params/at_bats_params.rb +23 -0
  20. data/lib/stattleship/params/line_ups_params.rb +18 -0
  21. data/lib/stattleship/params/pitches_params.rb +40 -0
  22. data/lib/stattleship/pitches.rb +70 -0
  23. data/lib/stattleship/validators.rb +14 -1
  24. data/lib/stattleship/validators/hit_location_validator.rb +9 -0
  25. data/lib/stattleship/validators/hit_type_validator.rb +9 -0
  26. data/lib/stattleship/validators/hitter_id_validator.rb +6 -0
  27. data/lib/stattleship/validators/inning_validator.rb +9 -0
  28. data/lib/stattleship/validators/lower_speed_validator.rb +9 -0
  29. data/lib/stattleship/validators/pitch_outcome_type_validator.rb +9 -0
  30. data/lib/stattleship/validators/pitch_type_validator.rb +9 -0
  31. data/lib/stattleship/validators/pitcher_id_validator.rb +6 -0
  32. data/lib/stattleship/validators/speed_and_over_validator.rb +9 -0
  33. data/lib/stattleship/validators/speed_and_under_validator.rb +9 -0
  34. data/lib/stattleship/validators/speed_validator.rb +10 -0
  35. data/lib/stattleship/validators/upper_speed_validator.rb +9 -0
  36. data/lib/stattleship/version.rb +1 -1
  37. metadata +26 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 685dbf9557b8b271f793009f0c6ade2344c610a7
4
- data.tar.gz: fd1bb152c890497a2559ac18a3bc42b82fa050f0
3
+ metadata.gz: bf08d27f1671847b7e291b133334a1d5c5507214
4
+ data.tar.gz: 5974518881f4d88800e48d534962a7d83da92b92
5
5
  SHA512:
6
- metadata.gz: ca3affac64edb274799e2bdbf245a5e7e3ec3496221f6dae29c6f9dc418c26555f15df606668aadbf1f4bf7a36bf06ae1c009082325621c5552a4363f3bbc615
7
- data.tar.gz: ff7713955d8c90986b2aef8eb05c65a70f65a6227b8534bcad35cad6ae8b8909618d9b80662803fcf7981fa59177d4e82ac03f889f03112e2e86f5ec8902861f
6
+ metadata.gz: 6fb0d73cb513109c77d66cc2403f7f657d73873b82069a01d8961dde5f6b52833e9c5acd2bec64a78e745e367fe2d818065ac4767e56c95db93a4953d8f09891
7
+ data.tar.gz: f515e94d71525cee607b59f0b1be0147dceb34fa0c5b723572947bc16849c49f38d132871854e759fe5a84a47b424ecc7a4c427f598775a476ef5e62df086412
data/README.md CHANGED
@@ -9,7 +9,7 @@ Check out the [Stattleship API](https://api.stattleship.com) - The Sports Data A
9
9
 
10
10
  Meaningful. Developer-Friendly.
11
11
 
12
- :football: :basketball: and :black_circle: :ice_hockey_stick_and_puck: :snowflake: and :baseball: !
12
+ :football: :basketball: and :black_circle: :black_circle: :snowflake: and :baseball: !
13
13
 
14
14
  We're gonna need a bigger :boat:!
15
15
 
@@ -22,7 +22,7 @@ gem install stattleship-ruby
22
22
  ## Usage
23
23
 
24
24
  ```
25
- gem 'stattleship-ruby', '~> 0.1.24'
25
+ gem 'stattleship-ruby', '~> 0.1.25'
26
26
  ```
27
27
 
28
28
  ### Build
@@ -33,8 +33,8 @@ gem build stattleship-ruby.gemspec
33
33
 
34
34
  ### Install
35
35
 
36
- ```
37
- gem install stattleship-ruby-0.1.24.gem
36
+ ```rb
37
+ gem install stattleship-ruby-0.1.25.gem
38
38
  ```
39
39
  ## Prerequisites
40
40
 
@@ -46,7 +46,7 @@ You'll need
46
46
 
47
47
  There are two ways to configure the gem.
48
48
 
49
- ```
49
+ ```rb
50
50
  Stattleship.configure do |config|
51
51
  config.api_token = YOUR_TOKEN
52
52
  end
@@ -74,7 +74,7 @@ It's dead simple.
74
74
 
75
75
  The pattern is pretty much as follows:
76
76
 
77
- ```
77
+ ```rb
78
78
  query_params = Stattleship::Params::BasketballGameLogsParams.new
79
79
  query_params.player_id = 'nba-stephen-curry'
80
80
  query_params.since = '1 week ago'
data/examples/README.md CHANGED
@@ -30,6 +30,8 @@ You'll need
30
30
 
31
31
  * Stattleship API Access Token from https://www.stattleship.com
32
32
  * Set that in your `.env` file as `STATTLESHIP_ACCESS_TOKEN=your_token`
33
+ * To build the gem: `gem build stattleship-ruby.gemspec`
34
+ * To install the gem (with the current version of the gem file): `gem install stattleship-ruby-0.1.xx.gem`
33
35
  * To run examples, that .env file should be in the `/examples` dir.
34
36
  * Copy the `sample.env` file, insert your token and save as `examples/.env`
35
37
  * The `cd` to the `/examples` directory and `ruby <example>.rb` such that the .env loads
@@ -64,7 +66,7 @@ You'll need
64
66
 
65
67
  * [Football Players](football_players.rb)
66
68
  * Uses `FootballPlayersParams` and makes a `FootballPlayers` request
67
- * Uses `team_id` and `level_up` parameters to return Denver Broncos players
69
+ * Uses `team_id` parameters to return Denver Broncos players
68
70
  * Demonstrates ability to filter and sort on a numeric `salary` to get list of players making more than $5M and where they went to `school`
69
71
 
70
72
  * [Hockey Scoring Plays](hockey_scoring_plays.rb)
@@ -0,0 +1,25 @@
1
+ # Set your STATTLESHIP_ACCESS_TOKEN from https://www.stattleship.com in the examples/.env file
2
+
3
+ require 'dotenv'
4
+ Dotenv.load
5
+
6
+ dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ require File.join(dir, 'stattleship')
8
+ require 'pp'
9
+
10
+ # Construct params for the fetch
11
+ query_params = Stattleship::Params::AtBatsParams.new
12
+
13
+ query_params.season_id = 'mlb-2016'
14
+ query_params.interval_type = 'regularseason'
15
+ query_params.hitter_id = 'mlb-mike-trout'
16
+ query_params.hit_type = 'GB'
17
+
18
+ # fetch will automatically traverse the paginated response links
19
+ at_bats = Stattleship::AtBats.fetch(params: query_params)
20
+
21
+ pp at_bats.map(&:to_sentence)
22
+
23
+ at_bats.each do |at_bat|
24
+ pp at_bat.pitches.map(&:to_sentence)
25
+ end
@@ -16,6 +16,7 @@ query_params.team_id = 'mlb-bos'
16
16
  # may need to adjust this depending on time of year
17
17
  query_params.season_id = 'mlb-2016'
18
18
  query_params.status = 'upcoming'
19
+ query_params.on = 'today'
19
20
 
20
21
  # fetch will automatically traverse the paginated response links
21
22
  games = Stattleship::BaseballGames.fetch(params: query_params)
@@ -28,5 +29,5 @@ pp games.first.started_at.strftime('%b %e, %l:%M %p')
28
29
 
29
30
  # or, individual attributes
30
31
  games.each do |game|
31
- pp game.scoreline
32
+ pp game.label
32
33
  end
@@ -11,26 +11,33 @@ require 'pp'
11
11
  query_params = Stattleship::Params::BasketballTeamGameLogsParams.new
12
12
 
13
13
  # use a slug, typically 'league-team_abbreviation'
14
+ query_params.season_id = 'nba-2016-2017'
15
+ query_params.interval_type = 'regularseason'
14
16
  query_params.team_id = 'nba-cle'
15
17
 
16
18
  # may need to adjust this depending on time of year/NBA season
17
- query_params.since = '1 week ago'
19
+ # query_params.since = '1 month ago'
18
20
 
19
21
  # fetch will automatically traverse the paginated response links
20
22
  game_logs = Stattleship::BasketballTeamGameLogs.fetch(params: query_params)
21
23
 
22
24
  # the populated object
23
- pp game_logs.first
25
+ # pp game_logs.first
24
26
 
25
27
  # can access friendly helpers
26
- pp game_logs.first.to_sentence
28
+ # pp game_logs.first.to_sentence
27
29
 
28
30
  # "Cleveland 42 FGM, 50.6 FG%, 115 PTS, 33 DRB, 14 ORB, 47 REB (Clippers vs Cavaliers January 21, 2016 at 8:00pm)"
29
31
 
30
32
  # or, individual attributes
31
- game_logs.each do |game_log|
32
- pp game_log.three_pointers_made
33
- end
33
+
34
+ scores = game_logs.map(&:team_score)
35
+
36
+ pp scores
37
+
38
+ # game_logs.each do |game_log|
39
+ # pp game_log.to_sentence
40
+ # end
34
41
 
35
42
  # 13
36
43
  # 11
@@ -0,0 +1,21 @@
1
+ # Set your STATTLESHIP_ACCESS_TOKEN from https://www.stattleship.com in the examples/.env file
2
+
3
+ require 'dotenv'
4
+ Dotenv.load
5
+
6
+ dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ require File.join(dir, 'stattleship')
8
+ require 'pp'
9
+
10
+ # Construct params for the fetch
11
+ query_params = Stattleship::Params::LineUpsParams.new
12
+
13
+ query_params.season_id = 'mlb-2017'
14
+ query_params.interval_type = 'preseason'
15
+ query_params.since = '1 week ago'
16
+ query_params.team_id = 'mlb-bos'
17
+
18
+ # fetch will automatically traverse the paginated response links
19
+ line_ups = Stattleship::LineUps.fetch(params: query_params)
20
+
21
+ pp line_ups.map(&:to_sentence)
@@ -0,0 +1,26 @@
1
+ # Set your STATTLESHIP_ACCESS_TOKEN from https://www.stattleship.com in the examples/.env file
2
+
3
+ require 'dotenv'
4
+ Dotenv.load
5
+
6
+ dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ require File.join(dir, 'stattleship')
8
+ require 'pp'
9
+
10
+ # Construct params for the fetch
11
+ query_params = Stattleship::Params::PitchesParams.new
12
+
13
+ query_params.season_id = 'mlb-2017'
14
+ query_params.interval_type = 'preseason'
15
+ query_params.game_id = 'mlb-2017-cin-kc-2017-03-20-1605'
16
+
17
+
18
+ # query_params.pitch_outcome_type = 'aHR'
19
+ # query_params.inning = 9
20
+ # query_params.speed_and_over = 103
21
+ # query_params.pitcher_id = 'mlb-aroldis-chapman'
22
+
23
+ # fetch will automatically traverse the paginated response links
24
+ pitches = Stattleship::Pitches.fetch(params: query_params)
25
+
26
+ pp pitches.map(&:to_sentence)
data/lib/stattleship.rb CHANGED
@@ -114,4 +114,8 @@ require 'stattleship/football_top_stats'
114
114
  require 'stattleship/hockey_top_stats'
115
115
  require 'stattleship/baseball_top_stats'
116
116
 
117
+ require 'stattleship/at_bats'
118
+ require 'stattleship/line_ups'
119
+ require 'stattleship/pitches'
120
+
117
121
  Dotenv.load
@@ -0,0 +1,81 @@
1
+ module Stattleship
2
+ class AtBats < Stattleship::Endpoint
3
+ AT_BATS = 'baseball/mlb/at_bats'.freeze
4
+
5
+ def self.fetch(params:)
6
+ super(path: AT_BATS,
7
+ params: params)
8
+ end
9
+
10
+ def populate
11
+ at_bats.each do |model|
12
+ populate_games(model)
13
+
14
+ games.each do |game|
15
+ populate_game(game)
16
+ end
17
+
18
+ populate_hitters(model)
19
+ populate_hitter_teams(model)
20
+
21
+ (baseball_pitches || []).each do |pitch|
22
+ populate_pitchers(pitch)
23
+ populate_hitters(pitch)
24
+ populate_teams(pitch)
25
+ populate_hitter_teams(pitch)
26
+ end
27
+
28
+ populate_baseball_pitches(model)
29
+
30
+ end
31
+ end
32
+ end
33
+
34
+ module AtBatsRepresenter
35
+ include Roar::JSON
36
+ include Stattleship::Models
37
+
38
+ collection :away_teams, extend: TeamRepresenter,
39
+ class: Team
40
+
41
+ collection :hitters, extend: PlayerRepresenter,
42
+ class: Player
43
+
44
+ collection :hitter_teams, extend: TeamRepresenter,
45
+ class: Team
46
+
47
+ collection :pitchers, extend: PlayerRepresenter,
48
+ class: Player
49
+
50
+ collection :home_teams, extend: TeamRepresenter,
51
+ class: Team
52
+
53
+ collection :winning_teams, extend: TeamRepresenter,
54
+ class: Team
55
+
56
+ collection :games, extend: GameRepresenter,
57
+ class: Game
58
+
59
+ collection :leagues, extend: LeagueRepresenter,
60
+ class: League
61
+
62
+ collection :officials, extend: OfficialRepresenter,
63
+ class: Official
64
+
65
+ collection :seasons, extend: SeasonRepresenter,
66
+ class: Season
67
+
68
+ collection :venues, extend: VenueRepresenter,
69
+ class: Venue
70
+
71
+
72
+ collection :teams, extend: TeamRepresenter,
73
+ class: Team
74
+
75
+ collection :baseball_pitches, extend: PitchRepresenter,
76
+ class: Pitch
77
+
78
+ collection :at_bats, extend: AtBatRepresenter,
79
+ class: AtBat
80
+ end
81
+ end
@@ -16,6 +16,19 @@ module Stattleship
16
16
 
17
17
  private
18
18
 
19
+ def populate_baseball_pitches(model)
20
+ model.pitches = []
21
+
22
+ return if model.baseball_pitch_ids.nil?
23
+ return if baseball_pitches.nil?
24
+
25
+ model.baseball_pitch_ids.each do |baseball_pitch_id|
26
+ model.pitches << baseball_pitches.detect do |baseball_pitch|
27
+ baseball_pitch.id == baseball_pitch_id
28
+ end
29
+ end
30
+ end
31
+
19
32
  def populate_officials(model)
20
33
  model.officials = []
21
34
 
@@ -37,6 +50,22 @@ module Stattleship
37
50
  end
38
51
  end
39
52
 
53
+ def populate_pitchers(model)
54
+ return if pitchers.nil?
55
+
56
+ model.pitcher = pitchers.detect do |pitcher|
57
+ pitcher.id == model.pitcher_id
58
+ end
59
+ end
60
+
61
+ def populate_hitters(model)
62
+ return if hitters.nil?
63
+
64
+ model.hitter = hitters.detect do |hitter|
65
+ hitter.id == model.hitter_id
66
+ end
67
+ end
68
+
40
69
  def populate_players(model)
41
70
  return if players.nil?
42
71
 
@@ -179,6 +208,14 @@ module Stattleship
179
208
  end
180
209
  end
181
210
 
211
+ def populate_hitter_teams(model)
212
+ return if hitter_teams.nil?
213
+
214
+ model.hitter_team = hitter_teams.detect do |hitter_team|
215
+ hitter_team.id == model.hitter_team_id
216
+ end
217
+ end
218
+
182
219
  def populate_venue(model)
183
220
  return if venues.nil?
184
221
 
@@ -0,0 +1,61 @@
1
+ module Stattleship
2
+ class LineUps < Stattleship::Endpoint
3
+ LINE_UPS = 'baseball/mlb/lineups'.freeze
4
+
5
+ def self.fetch(params:)
6
+ super(path: LINE_UPS,
7
+ params: params)
8
+ end
9
+
10
+ def populate
11
+ lineups.each do |model|
12
+ populate_games(model)
13
+
14
+ games.each do |game|
15
+ populate_game(game)
16
+ end
17
+
18
+ populate_players(model)
19
+ populate_teams(model)
20
+ end
21
+ end
22
+ end
23
+
24
+ module LineUpsRepresenter
25
+ include Roar::JSON
26
+ include Stattleship::Models
27
+
28
+ collection :away_teams, extend: TeamRepresenter,
29
+ class: Team
30
+
31
+ collection :home_teams, extend: TeamRepresenter,
32
+ class: Team
33
+
34
+ collection :winning_teams, extend: TeamRepresenter,
35
+ class: Team
36
+
37
+ collection :games, extend: GameRepresenter,
38
+ class: Game
39
+
40
+ collection :leagues, extend: LeagueRepresenter,
41
+ class: League
42
+
43
+ collection :officials, extend: OfficialRepresenter,
44
+ class: Official
45
+
46
+ collection :seasons, extend: SeasonRepresenter,
47
+ class: Season
48
+
49
+ collection :venues, extend: VenueRepresenter,
50
+ class: Venue
51
+
52
+ collection :teams, extend: TeamRepresenter,
53
+ class: Team
54
+
55
+ collection :players, extend: PlayerRepresenter,
56
+ class: Player
57
+
58
+ collection :lineups, extend: LineUpRepresenter,
59
+ class: LineUp
60
+ end
61
+ end
@@ -13,6 +13,10 @@ require 'stattleship/models/team_outcome_streak'
13
13
  require 'stattleship/models/venue'
14
14
  require 'stattleship/models/ranking'
15
15
 
16
+ require 'stattleship/models/at_bat'
17
+ require 'stattleship/models/line_up'
18
+ require 'stattleship/models/pitch'
19
+
16
20
  module Stattleship
17
21
  module Models
18
22
  end
@@ -0,0 +1,51 @@
1
+ module Stattleship
2
+ module Models
3
+ class AtBat < OpenStruct
4
+ def to_sentence
5
+ description
6
+ end
7
+
8
+ def dump
9
+ {
10
+ id: id,
11
+ description: description,
12
+ inning: inning,
13
+ inning_label: inning_label,
14
+ half: half,
15
+ baseball_pitch_ids: baseball_pitch_ids,
16
+ }
17
+ end
18
+ end
19
+
20
+ module AtBatRepresenter
21
+ include Roar::JSON
22
+ include Roar::Coercion
23
+ include Virtus.model
24
+
25
+ [
26
+ :id,
27
+ :description,
28
+ :inning_label,
29
+ :half,
30
+ ].each do |attribute|
31
+ property attribute
32
+ end
33
+
34
+ [
35
+ :inning,
36
+ ].each do |attribute|
37
+ property attribute, type: Integer
38
+ end
39
+
40
+ [
41
+ :game_id,
42
+ :hitter_id,
43
+ :hitter_team_id,
44
+ ].each do |relationship|
45
+ property relationship
46
+ end
47
+
48
+ collection :baseball_pitch_ids
49
+ end
50
+ end
51
+ end