leaderbrag 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f1f08cd9b911549a210572d128a7468a81ffc96e
4
- data.tar.gz: 45530a9599ccdf9fb6254eba5aad905582e984fb
3
+ metadata.gz: 7579c259982dedf4121354fd0cdcdd697e2c76ff
4
+ data.tar.gz: 6c98eebdb490302afcde4ef45289516ad51421e4
5
5
  SHA512:
6
- metadata.gz: 35747ec43c7fd29058e812f22f8774f5239f9e952ab9b89b07503800c7cc88e29347a8762b3c72a0b2c50a445f2099dbbc6c1291b1a0d96f6722ae9a2c52bada
7
- data.tar.gz: d203f5e93b3f093ce69958097f70d431157c4603c12824bf3e06e45407581df0c0034ef0342c95c455751af59da3b4f54bd1ef73247b72dc87060d71e6e4caae
6
+ metadata.gz: 6d7b685b826f17d073c2c923e3790ef1f1ab66c552f50ee928ae1c4c43feec0377ea734063c80395b9b594b2a163d774c50ca7b8711b1f1cf4d7bcda0909daa9
7
+ data.tar.gz: b30eacd0ffd35c3540d24dd41e7702055405ab06c4c88c1e2ea83cecb860bee89445c5ebdaca81baba3d41a7adf7bdf377e65fb1d02f7c413f1db90e9c7a74dc
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2019-06-18 21:39:23 -0500 using RuboCop version 0.71.0.
3
+ # on 2019-06-21 22:32:50 -0500 using RuboCop version 0.71.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -14,7 +14,7 @@ Lint/HandleExceptions:
14
14
 
15
15
  # Offense count: 2
16
16
  Metrics/AbcSize:
17
- Max: 36
17
+ Max: 44
18
18
 
19
19
  # Offense count: 1
20
20
  Metrics/CyclomaticComplexity:
@@ -23,7 +23,7 @@ Metrics/CyclomaticComplexity:
23
23
  # Offense count: 1
24
24
  # Configuration parameters: CountComments, ExcludedMethods.
25
25
  Metrics/MethodLength:
26
- Max: 30
26
+ Max: 38
27
27
 
28
28
  # Offense count: 1
29
29
  Metrics/PerceivedComplexity:
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem update --system
4
+ - gem install bundler
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # Leaderbrag
1
+ # Leaderbrag [![Build Status](https://travis-ci.org/schlazor/leaderbrag.svg?branch=master)](https://travis-ci.org/schlazor/leaderbrag)
2
2
 
3
- Leaderbrag is a small gem that uses [xmlstats](https://erikberg.com/api) to find the leading team in baseball or determine if a given team is the best in baseball.
3
+ Leaderbrag is a small gem that uses [xmlstats](https://erikberg.com/api) via [xmlstats-ruby](https://github.com/alexmchale/xmlstats-ruby) to find the leading team in baseball or determine if a given team is the best in baseball.
4
4
 
5
- It includes the CLI executable `leader` which should be suitable for most scripting desires and also serves as a useful example for using the underlying library.
5
+ It includes the CLI executable `leader` which should be suitable for most scripting desires.
6
6
 
7
7
  ## Installation
8
8
 
@@ -23,6 +23,17 @@ Or install it yourself as:
23
23
  ## Usage
24
24
 
25
25
  First, ensure you have $GEM_HOME/bin in your path.
26
+ You'll need to set some environment variables to match your [xmlstats API key](https://erikberg.com/api#):
27
+ ```
28
+ $ export XMLSTATS_API_KEY="xxxxx-xxxx-xxxx"
29
+ $ export XMLSTATS_CONTACT_INFO="you@example.com"
30
+ ```
31
+ To cut down on API calls, you can turn on caching by setting these environment variables:
32
+ ```
33
+ export XMLSTATS_CACHER='redis'
34
+ export XMLSTATS_REDIS_HOST='127.0.0.1'
35
+ ```
36
+ where XMLSTATS_REDIS_HOST is the IP of a server running [redis](https://redis.io/) that you have access to. Most probably this is `127.0.0.1` and in fact if you don't specify this environment variable that value will be used.
26
37
 
27
38
  Using the CLI is pretty straightforward.
28
39
 
@@ -35,41 +46,43 @@ The Minnesota Twins are the leaders of the AL.
35
46
  The Minnesota Twins are the best team in baseball.
36
47
  ```
37
48
 
38
- To query about a specific team, you'll need that team's ID. Get the list with the `list` task:
49
+ To query about a specific team, you'll need that team's ID. Get the full leaderboard with the `board` task, which includes each team's ID:
39
50
  ```
40
- $ leader list
41
- Minnesota Twins: minnesota-twins
42
- Cleveland Indians: cleveland-indians
43
- Chicago White Sox: chicago-white-sox
44
- Detroit Tigers: detroit-tigers
45
- Kansas City Royals: kansas-city-royals
46
- New York Yankees: new-york-yankees
47
- Tampa Bay Rays: tampa-bay-rays
48
- Boston Red Sox: boston-red-sox
49
- Toronto Blue Jays: toronto-blue-jays
50
- Baltimore Orioles: baltimore-orioles
51
- Houston Astros: houston-astros
52
- Texas Rangers: texas-rangers
53
- Oakland Athletics: oakland-athletics
54
- Los Angeles Angels: los-angeles-angels
55
- Seattle Mariners: seattle-mariners
56
- Milwaukee Brewers: milwaukee-brewers
57
- Chicago Cubs: chicago-cubs
58
- St. Louis Cardinals: st-louis-cardinals
59
- Cincinnati Reds: cincinnati-reds
60
- Pittsburgh Pirates: pittsburgh-pirates
61
- Atlanta Braves: atlanta-braves
62
- Philadelphia Phillies: philadelphia-phillies
63
- New York Mets: new-york-mets
64
- Washington Nationals: washington-nationals
65
- Miami Marlins: miami-marlins
66
- Los Angeles Dodgers: los-angeles-dodgers
67
- Colorado Rockies: colorado-rockies
68
- Arizona Diamondbacks: arizona-diamondbacks
69
- San Diego Padres: san-diego-padres
70
- San Francisco Giants: san-francisco-giants
51
+ $ leader board
52
+ Team Name Team ID Rank Win% League Div
53
+ --------------------------------------------------------------------
54
+ Los Angeles Dodgers: los-angeles-dodgers 1 .671 NL W
55
+ Minnesota Twins: minnesota-twins 2 .649 AL C
56
+ New York Yankees: new-york-yankees 3 .635 AL E
57
+ Houston Astros: houston-astros 4 .632 AL W
58
+ Atlanta Braves: atlanta-braves 5 .587 NL E
59
+ Tampa Bay Rays: tampa-bay-rays 6 .573 AL E
60
+ Chicago Cubs: chicago-cubs 7 .547 NL C
61
+ Colorado Rockies: colorado-rockies 8 .541 NL W
62
+ Boston Red Sox: boston-red-sox 9 .539 AL E
63
+ Texas Rangers: texas-rangers 10 .533 AL W
64
+ Milwaukee Brewers: milwaukee-brewers 11 .533 NL C
65
+ Cleveland Indians: cleveland-indians 12 .527 AL C
66
+ Philadelphia Phillies: philadelphia-phillies 13 .527 NL E
67
+ Oakland Athletics: oakland-athletics 14 .526 AL W
68
+ St. Louis Cardinals: st-louis-cardinals 15 .514 NL C
69
+ San Diego Padres: san-diego-padres 16 .507 NL W
70
+ Arizona Diamondbacks: arizona-diamondbacks 17 .500 NL W
71
+ Los Angeles Angels: los-angeles-angels 18 .500 AL W
72
+ Chicago White Sox: chicago-white-sox 19 .486 AL C
73
+ Washington Nationals: washington-nationals 20 .486 NL E
74
+ Cincinnati Reds: cincinnati-reds 21 .479 NL C
75
+ New York Mets: new-york-mets 22 .474 NL E
76
+ Pittsburgh Pirates: pittsburgh-pirates 23 .452 NL C
77
+ San Francisco Giants: san-francisco-giants 24 .425 NL W
78
+ Seattle Mariners: seattle-mariners 25 .418 AL W
79
+ Detroit Tigers: detroit-tigers 26 .371 AL C
80
+ Miami Marlins: miami-marlins 27 .370 NL E
81
+ Toronto Blue Jays: toronto-blue-jays 28 .360 AL E
82
+ Kansas City Royals: kansas-city-royals 29 .347 AL C
83
+ Baltimore Orioles: baltimore-orioles 30 .280 AL E
71
84
  ```
72
- When asking about a team, the exit code indicates whether the requested team is the best team in baseball - 0 of so, otherwise it is the rank of that team in their division.
85
+ When asking about a team, the exit code is 0 when the requested team is the best team in baseball, otherwise it is the rank of that team in their division.
73
86
  ```
74
87
  $ leader is minnesota-twins
75
88
  The Minnesota Twins are the leaders of the AL C division.
@@ -77,51 +90,53 @@ The Minnesota Twins are the leaders of the AL.
77
90
  The Minnesota Twins are the best team in baseball.
78
91
  $ echo $?
79
92
  0
80
-
81
93
  $ leader is new-york-yankees
82
94
  The New York Yankees are the leaders of the AL E division.
83
- The New York Yankees are not the leaders of the AL.
84
- The New York Yankees are not the best team in baseball.
95
+ The New York Yankees are not the leaders of the AL. They are #2.
96
+ The New York Yankees are not the best team in baseball. They are #3.
85
97
  $ echo $?
86
98
  1
87
-
88
99
  $ leader is seattle-mariners
89
- The Seattle Mariners are not the leaders of the AL W division.
90
- The Seattle Mariners are not the leaders of the AL.
91
- The Seattle Mariners are not the best team in baseball.
100
+ The Seattle Mariners are not the leaders of the AL W division. They are 5th.
101
+ The Seattle Mariners are not the leaders of the AL. They are #11.
102
+ The Seattle Mariners are not the best team in baseball. They are #25.
92
103
  $ echo $?
93
104
  5
94
105
  ```
95
- You can also get some extra stats about the team in the `is` and `find` tasks:
106
+ You can also get some extra stats about the team in the `is` and `find` tasks with the `-s` option:
96
107
  ```
97
- $ leader is new-york-yankees -s
98
- Rank: 1
99
- Won: 44
100
- Lost: 27
101
- Streak: W3
102
- Games back: 0.0
103
- Points for: 382
104
- Points against: 307
105
- Home won: 23
106
- Home lost: 13
107
- Away won: 21
108
- Away lost: 14
109
- Conference won: 38
110
- Conference lost: 23
111
- Division won: 20
112
- Division lost: 7
113
- Last five: 3-2
114
- Last ten: 5-5
115
- Conference: AL
116
- Division: E
117
- Points scored per game: 5.4
118
- Points allowed per game: 4.3
119
- Win percentage: .620
120
- Point differential: 75
121
- Point differential per game: 1.1
122
- Streak type: win
123
- Streak total: 3
124
- Games played: 71
108
+ $ leader is chicago-cubs -s
109
+ The Chicago Cubs are the leaders of the NL C division.
110
+ The Chicago Cubs are not the leaders of the NL. They are #3.
111
+ The Chicago Cubs are not the best team in baseball. They are #7.
112
+ Rank: 1
113
+ Won: 41
114
+ Lost: 34
115
+ Streak: L1
116
+ Games back: 0.0
117
+ Points for: 382
118
+ Points against: 317
119
+ Home won: 26
120
+ Home lost: 13
121
+ Away won: 15
122
+ Away lost: 21
123
+ Conference won: 34
124
+ Conference lost: 28
125
+ Division won: 13
126
+ Division lost: 11
127
+ Last five: 2-3
128
+ Last ten: 4-6
129
+ Conference: NL
130
+ Division: C
131
+ Points scored per game: 5.1
132
+ Points allowed per game: 4.2
133
+ Win percentage: .547
134
+ Point differential: 65
135
+ Point differential per game: 0.9
136
+ Streak type: loss
137
+ Streak total: 1
138
+ Games played: 75
139
+ Date: 2019-06-21
125
140
  ```
126
141
 
127
142
  ## Development
data/Rakefile CHANGED
@@ -2,11 +2,9 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  begin
5
- require 'rspec/core/rake_task'
6
5
  require 'rubocop/rake_task'
7
6
  require 'cucumber'
8
7
  require 'cucumber/rake/task'
9
- RSpec::Core::RakeTask.new(:spec)
10
8
  RuboCop::RakeTask.new(:style)
11
9
  Cucumber::Rake::Task.new(:features) do |t|
12
10
  t.cucumber_opts = '--format pretty'
@@ -14,7 +12,6 @@ begin
14
12
  desc 'run all checks'
15
13
  task :all do
16
14
  Rake::Task['style'].invoke
17
- Rake::Task['spec'].invoke
18
15
  Rake::Task['features'].invoke
19
16
  end
20
17
  rescue LoadError
data/leaderbrag.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = 'Find out if your baseball team is best baseball team.'
13
13
  spec.description = 'Tools to determine whether a baseball team is leading'\
14
- 'its division/league/all of baseball.'
14
+ ' its division/league/all of baseball.'
15
15
  spec.homepage = 'https://github.com/schlazor/leaderbrag'
16
16
 
17
17
  if spec.respond_to?(:metadata)
@@ -33,7 +33,9 @@ Gem::Specification.new do |spec|
33
33
  spec.bindir = 'exe'
34
34
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
35
  spec.require_paths = ['lib']
36
+ spec.add_dependency 'redis', '~> 4.1'
36
37
  spec.add_dependency 'thor', '~> 0.20'
38
+ spec.add_dependency 'xmlstats', '~> 1.7'
37
39
  spec.add_development_dependency 'aruba', '~> 0.14'
38
40
  spec.add_development_dependency 'bundler', '~> 2.0'
39
41
  spec.add_development_dependency 'cucumber', '~> 3.1'
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'thor'
4
- require 'leaderbrag/team'
4
+ require 'leaderbrag/leader'
5
+ require 'redis'
5
6
  module Leaderbrag
6
7
  # A CLI for Leaderbrag
7
8
  class CLI < Thor
@@ -9,13 +10,22 @@ module Leaderbrag
9
10
  true
10
11
  end
11
12
 
12
- @standings = nil
13
- desc 'list', 'Lists all baseball team IDs'
14
- def list
15
- standings = Leaderbrag::Standings.new.standings
16
- standings['standing'].each do |team|
17
- puts "#{team['first_name']} #{team['last_name']}:".ljust(23) +
18
- team['team_id']
13
+ @leader = nil
14
+ def initialize(args = [], local_options = {}, config = {})
15
+ super
16
+ @leader = Leaderbrag::Leader.new
17
+ end
18
+
19
+ desc 'board', 'Lists all baseball teams with their standings'
20
+ def board
21
+ puts 'Team Name'.ljust(23) +
22
+ 'Team ID Rank Win% League Div'
23
+ puts '-'.ljust(68, '-')
24
+ @leader.standings.each_with_index do |team, i|
25
+ puts "#{team.first_name} #{team.last_name}:".ljust(23) +
26
+ team.team_id.ljust(22) + (i + 1).to_s.ljust(6) +
27
+ team.win_percentage.ljust(6) +
28
+ team.conference.ljust(8) + team.division
19
29
  end
20
30
  end
21
31
 
@@ -26,13 +36,7 @@ module Leaderbrag
26
36
  desc: 'Include team stats in output',
27
37
  default: false)
28
38
  def find
29
- @standings = Leaderbrag::Standings.new.standings
30
- @standings['standing'].sort_by! do |team|
31
- team['win_percentage'].to_f
32
- end
33
- i = @standings['standing'].length - 1
34
- myteam = Leaderbrag::Team.new(@standings['standing'][i]['team_id'],
35
- @standings)
39
+ myteam = @leader.standings[0]
36
40
  brag(myteam, options[:quiet], options[:stats])
37
41
  end
38
42
 
@@ -42,9 +46,9 @@ module Leaderbrag
42
46
  method_option(:stats, aliases: '-s',
43
47
  desc: 'Include team stats in output',
44
48
  default: false)
45
- def is?(team)
46
- myteam = Leaderbrag::Team.new(team)
47
- if myteam.team_standings.nil?
49
+ def is?(team_id)
50
+ myteam = @leader.team(team_id)
51
+ if myteam.nil?
48
52
  warn "No such team with ID #{options['team']}"
49
53
  exit 50
50
54
  end
@@ -54,37 +58,45 @@ module Leaderbrag
54
58
  private
55
59
 
56
60
  def brag(myteam, quiet, stats)
57
- name = "#{myteam.team_standings['first_name']}"\
58
- " #{myteam.team_standings['last_name']}"
59
- league = myteam.team_standings['conference']
60
- division = myteam.team_standings['division']
61
+ name = "#{myteam.first_name}"\
62
+ " #{myteam.last_name}"
63
+ league = myteam.conference
64
+ division = myteam.division
61
65
  unless quiet
62
66
  print "The #{name} are "
63
- print 'not ' unless myteam.division_leader?
64
- puts "the leaders of the #{league} #{division} division."
65
- print "The #{name} are "
66
- print 'not ' unless myteam.league_leader?
67
- puts "the leaders of the #{league}."
68
- print "The #{name} are "
69
- print 'not ' unless myteam.overall_leader?
70
- puts 'the best team in baseball.'
67
+ print 'not ' unless @leader.division_leader?(myteam)
68
+ print "the leaders of the #{league} #{division} division."
69
+ unless @leader.division_leader?(myteam)
70
+ print " They are #{myteam.ordinal_rank}."
71
+ end
72
+ print "\nThe #{name} are "
73
+ print 'not ' unless @leader.league_leader?(myteam)
74
+ print "the leaders of the #{league}."
75
+ unless @leader.league_leader?(myteam)
76
+ print " They are ##{@leader.league_rank(myteam)}."
77
+ end
78
+ print "\nThe #{name} are "
79
+ print 'not ' unless @leader.overall_leader?(myteam)
80
+ print 'the best team in baseball.'
81
+ unless @leader.overall_leader?(myteam)
82
+ print " They are ##{@leader.overall_rank(myteam)}."
83
+ end
84
+ puts
71
85
  end
72
86
 
73
87
  if stats
74
- myteam.team_standings.each do |k, v|
75
- next if k == 'team_id'
76
- next if k == 'first_name'
77
- next if k == 'last_name'
78
- next if k == 'ordinal_rank'
88
+ myteam.fields.each do |field|
89
+ k = field.to_s
90
+ next if %w[team_id first_name last_name ordinal_rank].include?(k)
79
91
 
80
- label = k.gsub(/_/, ' ').capitalize + ':'
81
- puts "#{label.ljust(30)} #{v}"
92
+ label = k.gsub(/_/, ' ').capitalize + ': '
93
+ puts label.ljust(30) + myteam.send(field).to_s
82
94
  end
83
95
  end
84
- if myteam.overall_leader?
96
+ if @leader.overall_leader?(myteam)
85
97
  exit 0
86
98
  else
87
- exit myteam.team_standings['rank']
99
+ exit myteam.rank
88
100
  end
89
101
  end
90
102
  end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'xmlstats'
4
+ module Leaderbrag
5
+ # Mostly wraps MLB standings adding some additional leadership checks
6
+ class Leader
7
+ attr_reader :standings
8
+ def initialize
9
+ Xmlstats.cacher = if ENV['XMLSTATS_CACHER'] == 'redis'
10
+ host = '127.0.0.1'
11
+ if ENV.key? 'XMLSTATS_REDIS_HOST'
12
+ host = ENV['XMLSTATS_REDIS_HOST']
13
+ end
14
+ Xmlstats::Cachers::Redis.new(host: host)
15
+ else
16
+ Xmlstats::Cachers::Memory.new
17
+ end
18
+ begin
19
+ @standings = Xmlstats.mlb_standing
20
+ rescue Redis::CannotConnectError
21
+ warn "WARN: Redis host #{ENV['XMLSTATS_REDIS_HOST']} "\
22
+ 'not available. Falling back to memory cacher.'
23
+ Xmlstats.cacher = Xmlstats::Cachers::Memory.new
24
+ @standings = Xmlstats.mlb_standing
25
+ end
26
+ @standings.sort_by! do |team|
27
+ team.win_percentage.to_f
28
+ end
29
+ @standings.reverse!
30
+ end
31
+
32
+ def team(team_id)
33
+ @standings.detect do |team|
34
+ team.team_id == team_id
35
+ end
36
+ end
37
+
38
+ def division_leader?(team)
39
+ return true if team.rank == 1
40
+
41
+ false
42
+ end
43
+
44
+ def league_members(team)
45
+ @standings.select do |t|
46
+ team.conference == t.conference
47
+ end
48
+ end
49
+
50
+ def league_leader?(team)
51
+ return true if team.team_id == league_members(team)[0].team_id
52
+
53
+ false
54
+ end
55
+
56
+ def league_rank(team)
57
+ league_members(team).find_index(team) + 1
58
+ end
59
+
60
+ def overall_leader?(team)
61
+ return true if team.team_id == @standings[0].team_id
62
+
63
+ false
64
+ end
65
+
66
+ def overall_rank(team)
67
+ @standings.find_index(team) + 1
68
+ end
69
+ end
70
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leaderbrag
4
- VERSION = '0.1.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leaderbrag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Schlenk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-19 00:00:00.000000000 Z
11
+ date: 2019-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: thor
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,20 @@ dependencies:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0.20'
41
+ - !ruby/object:Gem::Dependency
42
+ name: xmlstats
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: aruba
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -122,7 +150,7 @@ dependencies:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0.20'
125
- description: Tools to determine whether a baseball team is leadingits division/league/all
153
+ description: Tools to determine whether a baseball team is leading its division/league/all
126
154
  of baseball.
127
155
  email:
128
156
  - david@schdav.org
@@ -135,6 +163,7 @@ files:
135
163
  - ".rubocop.yml"
136
164
  - ".rubocop_todo.yml"
137
165
  - ".ruby-version"
166
+ - ".travis.yml"
138
167
  - CHANGELOG.md
139
168
  - CODE_OF_CONDUCT.md
140
169
  - Gemfile
@@ -147,8 +176,7 @@ files:
147
176
  - leaderbrag.gemspec
148
177
  - lib/leaderbrag.rb
149
178
  - lib/leaderbrag/cli.rb
150
- - lib/leaderbrag/standings.rb
151
- - lib/leaderbrag/team.rb
179
+ - lib/leaderbrag/leader.rb
152
180
  - lib/leaderbrag/version.rb
153
181
  homepage: https://github.com/schlazor/leaderbrag
154
182
  licenses: []
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
- require 'net/http'
5
-
6
- module Leaderbrag
7
- # holds the current baseball standings
8
- class Standings
9
- attr_reader :standings
10
-
11
- def initialize
12
- update
13
- end
14
-
15
- def update
16
- url = 'https://erikberg.com/mlb/standings.json'
17
- uri = URI(url)
18
- user_agent = 'Leaderbrag/0.1.0 (david@schdav.org)'
19
- Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
20
- request = Net::HTTP::Get.new(uri, 'User-Agent' => user_agent)
21
- response = http.request(request)
22
- @standings = JSON.parse(response.body)
23
- end
24
- end
25
- end
26
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'leaderbrag/standings'
4
- module Leaderbrag
5
- # a baseball team
6
- class Team
7
- attr_reader :name, :team_standings, :division_leader, :league_leader
8
- attr_reader :overall_leader, :baseball_standings
9
- alias division_leader? division_leader
10
- alias league_leader? league_leader
11
- alias overall_leader? overall_leader
12
- def initialize(name, standings = nil)
13
- @name = name
14
- if standings.nil?
15
- @baseball_standings = Leaderbrag::Standings.new.standings
16
- end
17
- @baseball_standings = standings unless standings.nil?
18
- @team_standings = find_team
19
- return if @team_standings.nil?
20
-
21
- find_division_leader
22
- find_league_leader
23
- find_overall_leader
24
- end
25
-
26
- def find_team
27
- myteams = @baseball_standings['standing'].select do |team|
28
- team['team_id'] == name
29
- end
30
- myteams.length == 1 ? myteams[0] : nil
31
- end
32
-
33
- def find_division_leader
34
- @division_leader = @team_standings['games_back'] == 0.0
35
- end
36
-
37
- def find_division_leaders
38
- @baseball_standings['standing'].select do |team|
39
- team['rank'] == 1
40
- end
41
- end
42
-
43
- def find_overall_leader
44
- division_leaders = find_division_leaders
45
- division_leaders.sort_by! do |team|
46
- team['win_percentage'].to_f
47
- end
48
- dl_id = division_leaders[division_leaders.length - 1]['team_id']
49
- @overall_leader = false
50
- @overall_leader = true if dl_id == @name
51
- end
52
-
53
- def find_league_leader
54
- division_leaders = find_division_leaders
55
- league_leaders = division_leaders.select do |team|
56
- @team_standings['conference'] == team['conference']
57
- end
58
- league_leaders.sort_by! do |team|
59
- team['win_percentage'].to_f
60
- end
61
- ll_id = league_leaders[league_leaders.length - 1]['team_id']
62
- @league_leader = false
63
- @league_leader = true if ll_id == name
64
- end
65
- end
66
- end