nfl_data 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +5 -5
  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 -21
  10. data/Rakefile +5 -6
  11. data/bin/console +1 -1
  12. data/bin/setup +8 -0
  13. data/lib/nfl_data.rb +10 -18
  14. data/lib/nfl_data/api/player.rb +8 -30
  15. data/lib/nfl_data/api/schedule.rb +19 -0
  16. data/lib/nfl_data/api/statline.rb +8 -23
  17. data/lib/nfl_data/models/game.rb +5 -0
  18. data/lib/nfl_data/models/player.rb +11 -19
  19. data/lib/nfl_data/models/schedule.rb +12 -0
  20. data/lib/nfl_data/models/statline.rb +18 -28
  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 +21 -81
  26. data/lib/nfl_data/parsers/schedule_parser.rb +20 -0
  27. data/lib/nfl_data/parsers/statline_parser.rb +27 -76
  28. data/lib/nfl_data/version.rb +1 -1
  29. data/nfl_data.gemspec +23 -21
  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 +107 -45
  46. data/lib/nfl_data/api/team.rb +0 -26
  47. data/lib/nfl_data/models/team.rb +0 -39
  48. data/lib/nfl_data/parsers/parser_helper.rb +0 -6
  49. data/lib/nfl_data/parsers/team_parser.rb +0 -91
  50. data/test/nfl_data/api/player_test.rb +0 -25
  51. data/test/nfl_data/api/statline_test.rb +0 -21
  52. data/test/nfl_data/api/team_test.rb +0 -13
  53. data/test/nfl_data/models/player_test.rb +0 -75
  54. data/test/nfl_data/models/statline_test.rb +0 -126
  55. data/test/nfl_data/models/team_test.rb +0 -45
  56. data/test/nfl_data/parsers/player_parser_test.rb +0 -80
  57. data/test/nfl_data/parsers/statline_parser_test.rb +0 -35
  58. data/test/nfl_data/parsers/team_parser_test.rb +0 -41
  59. data/test/test_helper.rb +0 -12
@@ -1,26 +0,0 @@
1
- module NflData
2
- module API
3
- class Team
4
-
5
- def initialize
6
- @parser = TeamParser.new
7
- end
8
-
9
- def get(year, with_schedule = false)
10
- @parser.get_by_year(year, with_schedule).to_json
11
- end
12
-
13
- class << self
14
-
15
- def get_all(year)
16
- self.new.get(year)
17
- end
18
-
19
- def get_all_with_schedule(year)
20
- self.new.get(year, true)
21
- end
22
-
23
- end
24
- end
25
- end
26
- end
@@ -1,39 +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 { |game| game.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
-
37
- end
38
- end
39
- 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,91 +0,0 @@
1
- module NflData
2
- class TeamParser
3
- include ParserHelper
4
-
5
- attr_reader :base_url
6
-
7
- def initialize
8
- @base_url = "http://www.nfl.com/standings?category=league&split=Overall&season="
9
- end
10
-
11
- def get_by_year(year, with_schedule)
12
- get(year, with_schedule)
13
- end
14
-
15
- private
16
-
17
- def get(year, with_schedule)
18
- url = @base_url + "#{year}-REG"
19
-
20
- doc = open(url) { |f| Nokogiri(f) }
21
-
22
- all_links = doc.search('a').to_a
23
-
24
- team_links = all_links.reject do |link|
25
- href = link.attribute('href')
26
-
27
- if href.nil?
28
- true
29
- else
30
- !href.value.start_with?("/teams/profile?team=")
31
- end
32
- end
33
-
34
- team_links.map do |link|
35
- team = Team.new
36
- team.name = link.inner_text.strip
37
- team.short_name = make_jacksonville_abbreviation_consistent(link.attribute('href').value.scan(/=(.*)/).flatten.first)
38
- team.schedule = get_schedule(team, year) if with_schedule
39
-
40
- team.to_hash
41
- end
42
- end
43
-
44
- def get_schedule(team, year)
45
- url = "http://www.nfl.com/teams/schedule?seasonType=REG&team=#{team.short_name}&season=#{year}"
46
- schedule = Team::Schedule.new
47
-
48
- doc = open(url) { |f| Nokogiri(f) }
49
-
50
- tables = doc.search('table.data-table1')
51
-
52
- tables.each do |table|
53
- # Skip any empty tables. They put these in between post season and regular seasons game tables
54
- next if table.children.count <= 1
55
- title = table.search('tr.thd1 td')
56
-
57
- # Need to check for the Regular Season table and a table with no title
58
- # because during the season the NFl splits the games between 2 tables
59
- if ['Regular Season', ''].include?(title.inner_text.strip)
60
- weeks = table.search('tr.tbdy1')
61
-
62
- weeks.each do |week|
63
- game = Team::Schedule::Game.new
64
- elements = week.search('td')
65
- game.week = elements[0].inner_text.strip
66
- game.date = elements[1].inner_text.strip
67
- participants = elements[2].search('a')
68
- game.opponent = get_opponent(team, participants)
69
- game.home_game = home_game?(team, participants)
70
- schedule.games << game
71
- end
72
- end
73
- end
74
-
75
- schedule
76
- end
77
-
78
- def get_opponent(team, participants)
79
- return nil if participants[0].nil?
80
- p1 = participants[0].inner_text.strip
81
- return participants[1].inner_text.strip if team.short_name == p1
82
- p1
83
- end
84
-
85
- def home_game?(team, participants)
86
- return nil if participants[0].nil?
87
- home_team = participants[1].inner_text.strip
88
- home_team == team.short_name
89
- end
90
- end
91
- 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,75 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Player do
4
-
5
- before do
6
- @player = Player.new
7
- end
8
-
9
- after do
10
- @player = nil
11
- end
12
-
13
- it 'has a first name' do
14
- @player.must_respond_to :first_name
15
- end
16
-
17
- it 'has a last name' do
18
- @player.must_respond_to :last_name
19
- end
20
-
21
- it 'has a full name' do
22
- @player.must_respond_to :full_name
23
- end
24
-
25
- it 'has a position' do
26
- @player.must_respond_to :position
27
- end
28
-
29
- it 'has a number' do
30
- @player.must_respond_to :number
31
- end
32
-
33
- it 'has a status' do
34
- @player.must_respond_to :status
35
- end
36
-
37
- it 'has a team' do
38
- @player.must_respond_to :team
39
- end
40
-
41
- it 'has an NFL player ID' do
42
- @player.must_respond_to :nfl_player_id
43
- end
44
-
45
- describe 'to_hash' do
46
- before do
47
- @player.first_name = 'John'
48
- @player.last_name = 'Elway'
49
- @player.position = 'QB'
50
- @player.full_name = 'John Elway'
51
- @player.number = 7
52
- @player.status = 'Retired'
53
- @player.team = 'Broncos'
54
- @player.nfl_player_id = '123'
55
- end
56
-
57
- def valid_player_hash
58
- {
59
- first_name: 'John',
60
- last_name: 'Elway',
61
- full_name: 'John Elway',
62
- position: 'QB',
63
- number: 7,
64
- status: 'Retired',
65
- team: 'Broncos',
66
- nfl_player_id: '123'
67
- }
68
- end
69
-
70
- it 'can return itself as hash' do
71
- @player.to_hash.must_equal valid_player_hash
72
- end
73
-
74
- end
75
- end
@@ -1,126 +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
- it 'has sacks' do
77
- @statline.must_respond_to :sacks
78
- end
79
-
80
- describe 'to_hash' do
81
- before do
82
- @statline.nfl_player_id = '123'
83
- @statline.week = 1
84
- @statline.year = 2014
85
- @statline.rush_atts = 1
86
- @statline.rush_yards = 25
87
- @statline.rush_tds = 1
88
- @statline.fumbles = 0
89
- @statline.pass_comp = 1
90
- @statline.pass_att = 2
91
- @statline.pass_yards = 100
92
- @statline.pass_tds = 1
93
- @statline.ints = 1
94
- @statline.qb_rating = "46.8"
95
- @statline.receptions = 2
96
- @statline.rec_yards = 25
97
- @statline.rec_tds = 1
98
- end
99
-
100
- def valid_statline_hash
101
- {
102
- nfl_player_id: '123',
103
- week: 1,
104
- year: 2014,
105
- rush_atts: 1,
106
- rush_yards: 25,
107
- rush_tds: 1,
108
- fumbles: 0,
109
- pass_comp: 1,
110
- pass_att: 2,
111
- pass_yards: 100,
112
- pass_tds: 1,
113
- ints: 1,
114
- qb_rating: "46.8",
115
- receptions: 2,
116
- rec_yards: 25,
117
- rec_tds: 1
118
- }
119
- end
120
-
121
- it 'can return itself as hash' do
122
- @statline.to_hash.must_equal valid_statline_hash
123
- end
124
-
125
- end
126
- end
@@ -1,45 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Team do
4
-
5
- before do
6
- @team = Team.new
7
- end
8
-
9
- after do
10
- @team = nil
11
- end
12
-
13
- it 'has a name' do
14
- @team.must_respond_to :name
15
- end
16
-
17
- it 'has a short name' do
18
- @team.must_respond_to :short_name
19
- end
20
-
21
- it 'has a schedule' do
22
- @team.must_respond_to :schedule
23
- end
24
-
25
- describe 'to_hash' do
26
- before do
27
- @team.name = 'Denver Broncos'
28
- @team.short_name = 'DEN'
29
- @team.schedule = Team::Schedule.new
30
- end
31
-
32
- def valid_player_hash
33
- {
34
- name: 'Denver Broncos',
35
- short_name: 'DEN',
36
- schedule: []
37
- }
38
- end
39
-
40
- it 'can return itself as hash' do
41
- @team.to_hash.must_equal valid_player_hash
42
- end
43
-
44
- end
45
- end