nfl_data 0.0.14 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +7 -0
  3. data/.gitignore +3 -3
  4. data/.rspec +1 -0
  5. data/.standard.yml +2 -0
  6. data/.travis.yml +6 -0
  7. data/CHANGELOG.md +7 -0
  8. data/Gemfile +1 -1
  9. data/README.md +94 -22
  10. data/Rakefile +5 -6
  11. data/bin/console +1 -1
  12. data/bin/setup +8 -0
  13. data/lib/nfl_data.rb +10 -19
  14. data/lib/nfl_data/api/player.rb +8 -26
  15. data/lib/nfl_data/api/schedule.rb +19 -0
  16. data/lib/nfl_data/api/statline.rb +8 -22
  17. data/lib/nfl_data/models/game.rb +5 -0
  18. data/lib/nfl_data/models/player.rb +11 -18
  19. data/lib/nfl_data/models/schedule.rb +12 -0
  20. data/lib/nfl_data/models/statline.rb +18 -19
  21. data/lib/nfl_data/my_sports_feeds/client.rb +45 -0
  22. data/lib/nfl_data/my_sports_feeds/players_feed.rb +18 -0
  23. data/lib/nfl_data/my_sports_feeds/seasonal_games_feed.rb +22 -0
  24. data/lib/nfl_data/my_sports_feeds/weekly_player_gamelogs.rb +21 -0
  25. data/lib/nfl_data/parsers/player_parser.rb +20 -93
  26. data/lib/nfl_data/parsers/schedule_parser.rb +20 -0
  27. data/lib/nfl_data/parsers/statline_parser.rb +27 -71
  28. data/lib/nfl_data/version.rb +1 -1
  29. data/nfl_data.gemspec +23 -23
  30. data/spec/api/player_spec.rb +24 -0
  31. data/spec/api/schedule_spec.rb +20 -0
  32. data/spec/api/statline_spec.rb +31 -0
  33. data/spec/models/game_spec.rb +15 -0
  34. data/spec/models/player_spec.rb +42 -0
  35. data/spec/models/schedule_spec.rb +17 -0
  36. data/spec/models/statline_spec.rb +63 -0
  37. data/spec/my_sports_feeds/client_spec.rb +17 -0
  38. data/spec/my_sports_feeds/players_feed_spec.rb +49 -0
  39. data/spec/my_sports_feeds/seasonal_games_feed_spec.rb +41 -0
  40. data/spec/my_sports_feeds/weekly_player_gamelogs_spec.rb +144 -0
  41. data/spec/parsers/player_parser_spec.rb +63 -0
  42. data/spec/parsers/schedule_parser_spec.rb +41 -0
  43. data/spec/parsers/statline_parser_spec.rb +68 -0
  44. data/spec/spec_helper.rb +55 -0
  45. metadata +83 -52
  46. data/.codeclimate.yml +0 -5
  47. data/.rubocop.yml +0 -2
  48. data/lib/nfl_data/api/team.rb +0 -23
  49. data/lib/nfl_data/models/team.rb +0 -38
  50. data/lib/nfl_data/parsers/data/teams.rb +0 -36
  51. data/lib/nfl_data/parsers/parser_helper.rb +0 -6
  52. data/lib/nfl_data/parsers/team_parser.rb +0 -76
  53. data/test/nfl_data/api/player_test.rb +0 -25
  54. data/test/nfl_data/api/statline_test.rb +0 -21
  55. data/test/nfl_data/api/team_test.rb +0 -13
  56. data/test/nfl_data/models/player_test.rb +0 -81
  57. data/test/nfl_data/models/statline_test.rb +0 -121
  58. data/test/nfl_data/models/team_test.rb +0 -43
  59. data/test/nfl_data/parsers/player_parser_test.rb +0 -81
  60. data/test/nfl_data/parsers/statline_parser_test.rb +0 -34
  61. data/test/nfl_data/parsers/team_parser_test.rb +0 -37
  62. data/test/test_helper.rb +0 -14
@@ -1,5 +0,0 @@
1
- engines:
2
- rubocop:
3
- enabled: true
4
- bundler-audit:
5
- enabled: true
@@ -1,2 +0,0 @@
1
- Style/Documentation:
2
- Enabled: false
@@ -1,23 +0,0 @@
1
- module NflData
2
- module API
3
- class Team
4
- def initialize
5
- @parser = TeamParser.new
6
- end
7
-
8
- def get(year, with_schedule = false)
9
- @parser.get_by_year(year, with_schedule).to_json
10
- end
11
-
12
- class << self
13
- def get_all(year)
14
- new.get(year)
15
- end
16
-
17
- def get_all_with_schedule(year)
18
- new.get(year, true)
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,38 +0,0 @@
1
- module NflData
2
- class Team
3
- attr_accessor :name, :short_name, :schedule
4
-
5
- def to_hash
6
- {
7
- name: name,
8
- short_name: short_name,
9
- schedule: schedule.nil? ? [] : schedule.to_hash
10
- }
11
- end
12
-
13
- class Schedule
14
- attr_accessor :games
15
-
16
- def initialize
17
- @games = []
18
- end
19
-
20
- def to_hash
21
- @games.map(&:to_hash)
22
- end
23
-
24
- class Game
25
- attr_accessor :week, :opponent, :date, :home_game
26
-
27
- def to_hash
28
- {
29
- week: week,
30
- opponent: opponent,
31
- date: date,
32
- home_game: home_game
33
- }
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,36 +0,0 @@
1
- module Teams
2
- TEAMS = {
3
- 'ARI' => 'Arizona Cardinals',
4
- 'ATL' => 'Atlanta Falcons',
5
- 'BAL' => 'Baltimore Ravens',
6
- 'BUF' => 'Buffalo Bills',
7
- 'CAR' => 'Carolina Panthers',
8
- 'CHI' => 'Chicago Bears',
9
- 'CIN' => 'Cincinnati Bengals',
10
- 'CLE' => 'Cleveland Browns',
11
- 'DAL' => 'Dallas Cowboys',
12
- 'DEN' => 'Denver Broncos',
13
- 'DET' => 'Detroit Lions',
14
- 'GB' => 'Green Bay Packers',
15
- 'HOU' => 'Houston Texans',
16
- 'IND' => 'Indianapolis Colts',
17
- 'JAX' => 'Jacksonville Jaguars',
18
- 'KC' => 'Kansas City Chiefs',
19
- 'LA' => 'Los Angeles Rams',
20
- 'LAC' => 'Los Angeles Chargers',
21
- 'MIA' => 'Miami Dolphins',
22
- 'MIN' => 'Minnesota Vikings',
23
- 'NE' => 'New England Patriots',
24
- 'NO' => 'New Orleans Saints',
25
- 'NYG' => 'New York Giants',
26
- 'NYJ' => 'New York Jets',
27
- 'OAK' => 'Oakland Raiders',
28
- 'PHI' => 'Philadelphia Eagles',
29
- 'PIT' => 'Pittsburgh Steelers',
30
- 'SEA' => 'Seattle Seahawks',
31
- 'SF' => 'San Francisco 49ers',
32
- 'TB' => 'Tampa Bay Buccaneers',
33
- 'TEN' => 'Tennessee Titans',
34
- 'WAS' => 'Washington Redskins'
35
- }
36
- end
@@ -1,6 +0,0 @@
1
- module ParserHelper
2
- def make_jacksonville_abbreviation_consistent(team_name)
3
- # Use JAX because schedule pages use JAX and it's easier to fix it here
4
- team_name == 'JAC' ? 'JAX' : team_name
5
- end
6
- end
@@ -1,76 +0,0 @@
1
- module NflData
2
- class TeamParser
3
- include Teams
4
-
5
- attr_reader :base_url
6
-
7
- def initialize
8
- end
9
-
10
- def get_by_year(year, with_schedule)
11
- get(year, with_schedule)
12
- end
13
-
14
- private
15
-
16
- def get(year, with_schedule)
17
- TEAMS.map do |short_name, team_name|
18
- team = Team.new
19
- team.name = team_name
20
- team.short_name = short_name
21
- team.schedule = get_schedule(team, year) if with_schedule
22
-
23
- team.to_hash
24
- end
25
- end
26
-
27
- def get_schedule(team, year)
28
- url = 'http://www.nfl.com/teams/schedule?seasonType=REG&' \
29
- "team=#{team.short_name}&season=#{year}"
30
-
31
- schedule = Team::Schedule.new
32
-
33
- doc = open(url) { |f| Nokogiri(f) }
34
-
35
- tables = doc.search('table.data-table1')
36
-
37
- tables.each do |table|
38
- # Skip any empty tables. They put these in between post season
39
- # and regular seasons game tables
40
- next if table.children.count <= 1
41
- title = table.search('tr.thd1 td')
42
-
43
- # Need to check for the Regular Season table and a table with no title
44
- # because during the season the NFl splits the games between 2 tables
45
- next unless ['Regular Season', ''].include?(title.inner_text.strip)
46
- weeks = table.search('tr.tbdy1')
47
-
48
- weeks.each do |week|
49
- game = Team::Schedule::Game.new
50
- elements = week.search('td')
51
- game.week = elements[0].inner_text.strip
52
- game.date = elements[1].inner_text.strip
53
- participants = elements[2].search('a')
54
- game.opponent = get_opponent(team, participants)
55
- game.home_game = home_game?(team, participants)
56
- schedule.games << game
57
- end
58
- end
59
-
60
- schedule
61
- end
62
-
63
- def get_opponent(team, participants)
64
- return nil if participants[0].nil?
65
- p1 = participants[0].inner_text.strip
66
- return participants[1].inner_text.strip if team.short_name == p1
67
- p1
68
- end
69
-
70
- def home_game?(team, participants)
71
- return nil if participants[0].nil?
72
- home_team = participants[1].inner_text.strip
73
- home_team == team.short_name
74
- end
75
- end
76
- end
@@ -1,25 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe API::Player do
4
- subject { API::Player }
5
-
6
- it 'should respond to get_all' do
7
- subject.must_respond_to :get_all
8
- end
9
-
10
- it 'should respond to get_quarterbacks' do
11
- subject.must_respond_to :get_quarterbacks
12
- end
13
-
14
- it 'should respond to get_runningbacks' do
15
- subject.must_respond_to :get_runningbacks
16
- end
17
-
18
- it 'should respond to get_wide_receivers' do
19
- subject.must_respond_to :get_wide_receivers
20
- end
21
-
22
- it 'should respond to get_tight_ends' do
23
- subject.must_respond_to :get_tight_ends
24
- end
25
- end
@@ -1,21 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe API::Statline do
4
- subject { API::Statline }
5
-
6
- it 'should respond to get_all_by_week_and_year' do
7
- subject.must_respond_to :get_all
8
- end
9
-
10
- it 'should respond to get_passing_by_week_and_year' do
11
- subject.must_respond_to :get_passing
12
- end
13
-
14
- it 'should respond to get_rushing_by_week_and_year' do
15
- subject.must_respond_to :get_rushing
16
- end
17
-
18
- it 'should respond to get_receiving_by_week_and_year' do
19
- subject.must_respond_to :get_receiving
20
- end
21
- end
@@ -1,13 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe API::Team do
4
- subject { API::Team }
5
-
6
- it 'should respond to get_all' do
7
- subject.must_respond_to :get_all
8
- end
9
-
10
- it 'should response to get_all_with_schedule' do
11
- subject.must_respond_to :get_all_with_schedule
12
- end
13
- end
@@ -1,81 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Player do
4
- before do
5
- @player = Player.new
6
- end
7
-
8
- after do
9
- @player = nil
10
- end
11
-
12
- it 'has a first name' do
13
- @player.must_respond_to :first_name
14
- end
15
-
16
- it 'has a last name' do
17
- @player.must_respond_to :last_name
18
- end
19
-
20
- it 'has a full name' do
21
- @player.must_respond_to :full_name
22
- end
23
-
24
- it 'has a position' do
25
- @player.must_respond_to :position
26
- end
27
-
28
- it 'has a number' do
29
- @player.must_respond_to :number
30
- end
31
-
32
- it 'has a status' do
33
- @player.must_respond_to :status
34
- end
35
-
36
- it 'has a team' do
37
- @player.must_respond_to :team
38
- end
39
-
40
- it 'has an NFL player ID' do
41
- @player.must_respond_to :nfl_player_id
42
- end
43
-
44
- it 'has a picture_link' do
45
- @player.must_respond_to :picture_link
46
- end
47
-
48
- describe 'to_hash' do
49
- before do
50
- @player.first_name = 'John'
51
- @player.last_name = 'Elway'
52
- @player.position = 'QB'
53
- @player.full_name = 'John Elway'
54
- @player.number = 7
55
- @player.status = 'Retired'
56
- @player.team = 'Broncos'
57
- @player.nfl_player_id = '123'
58
- @player.picture_link = 'google.com'
59
- @player.profile_link = 'espn.com'
60
- end
61
-
62
- def valid_player_hash
63
- {
64
- first_name: 'John',
65
- last_name: 'Elway',
66
- full_name: 'John Elway',
67
- position: 'QB',
68
- number: 7,
69
- status: 'Retired',
70
- team: 'Broncos',
71
- nfl_player_id: '123',
72
- picture_link: 'google.com',
73
- profile_link: 'espn.com'
74
- }
75
- end
76
-
77
- it 'can return itself as hash' do
78
- @player.to_hash.must_equal valid_player_hash
79
- end
80
- end
81
- end
@@ -1,121 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Statline do
4
- before do
5
- @statline = Statline.new
6
- end
7
-
8
- after do
9
- @statline = nil
10
- end
11
-
12
- it 'has a week' do
13
- @statline.must_respond_to :week
14
- end
15
-
16
- it 'has a year' do
17
- @statline.must_respond_to :year
18
- end
19
-
20
- it 'has rush attempts' do
21
- @statline.must_respond_to :rush_atts
22
- end
23
-
24
- it 'has rush yards' do
25
- @statline.must_respond_to :rush_yards
26
- end
27
-
28
- it 'has rush touchdowns' do
29
- @statline.must_respond_to :rush_tds
30
- end
31
-
32
- it 'has fumbles' do
33
- @statline.must_respond_to :fumbles
34
- end
35
-
36
- it 'has pass completions' do
37
- @statline.must_respond_to :pass_comp
38
- end
39
-
40
- it 'has pass attempts' do
41
- @statline.must_respond_to :pass_att
42
- end
43
-
44
- it 'has pass yards' do
45
- @statline.must_respond_to :pass_yards
46
- end
47
-
48
- it 'has pass touchdowns' do
49
- @statline.must_respond_to :pass_tds
50
- end
51
-
52
- it 'has interceptions' do
53
- @statline.must_respond_to :ints
54
- end
55
-
56
- it 'has QB rating' do
57
- @statline.must_respond_to :qb_rating
58
- end
59
-
60
- it 'has receptions' do
61
- @statline.must_respond_to :receptions
62
- end
63
-
64
- it 'has receiving yards' do
65
- @statline.must_respond_to :rec_yards
66
- end
67
-
68
- it 'has receiving touchdowns' do
69
- @statline.must_respond_to :rec_tds
70
- end
71
-
72
- it 'has an NFL player id' do
73
- @statline.must_respond_to :nfl_player_id
74
- end
75
-
76
- describe 'to_hash' do
77
- before do
78
- @statline.nfl_player_id = '123'
79
- @statline.week = 1
80
- @statline.year = 2014
81
- @statline.rush_atts = 1
82
- @statline.rush_yards = 25
83
- @statline.rush_tds = 1
84
- @statline.fumbles = 0
85
- @statline.pass_comp = 1
86
- @statline.pass_att = 2
87
- @statline.pass_yards = 100
88
- @statline.pass_tds = 1
89
- @statline.ints = 1
90
- @statline.qb_rating = '46.8'
91
- @statline.receptions = 2
92
- @statline.rec_yards = 25
93
- @statline.rec_tds = 1
94
- end
95
-
96
- def valid_statline_hash
97
- {
98
- nfl_player_id: '123',
99
- week: 1,
100
- year: 2014,
101
- rush_atts: 1,
102
- rush_yards: 25,
103
- rush_tds: 1,
104
- fumbles: 0,
105
- pass_comp: 1,
106
- pass_att: 2,
107
- pass_yards: 100,
108
- pass_tds: 1,
109
- ints: 1,
110
- qb_rating: '46.8',
111
- receptions: 2,
112
- rec_yards: 25,
113
- rec_tds: 1
114
- }
115
- end
116
-
117
- it 'can return itself as hash' do
118
- @statline.to_hash.must_equal valid_statline_hash
119
- end
120
- end
121
- end