leaderbrag 0.1.0 → 1.0.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.
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