standings 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/bin/standings +3 -1
- data/config/environment.rb +3 -4
- data/lib/displayer.rb +21 -13
- data/lib/league.rb +88 -0
- data/lib/standings.rb +36 -1
- data/lib/table_scraper.rb +2 -1
- data/lib/team.rb +12 -6
- metadata +21 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2UyZjUzOTBhZWEyYWIwMWQ2OWVlMzMyMjE3ODk0ODFlMzAwM2VlNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Yzc0MTE5ZTIxNWU3ZTYwNmFlODMwYWFmMTg3OTQwM2E1NjhmNGVhZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGUyM2RjOGMwNGIxZGEwMTZiMTliMWJmNGVjMjRhY2M4MDFjZDllMWZkNDUy
|
10
|
+
OTIxMTVlNWRlYWRkYjc2NjlkODI5Y2E0N2IzNzZjYzljNzhhMTNhYzczMzMx
|
11
|
+
MmYyZjEwMWQ5MTllYzk0MTBiNTk5ODY4MjRlMjU0MDgwMDllOGU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2IyYjEyZTJlNTNkMDdkNDA5MmY0Zjg3NmI5OTQyOTYwZDFhYjE5M2M4NTFk
|
14
|
+
ZGI3ZGE2ZmVjZDQzZDdhNDQ3NWU5Y2ZhYzNiYjg3ODI4OTY4MmZhODlhOGQy
|
15
|
+
ZGMzZjZhYjA2ZjZlOGJiZWVhMWZkZTBhNzQxMzgzYjNmYzBlNDE=
|
data/bin/standings
CHANGED
data/config/environment.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
require 'open-uri'
|
3
3
|
require 'colorize'
|
4
|
+
require 'trollop'
|
4
5
|
require 'pry'
|
5
6
|
|
7
|
+
require_relative '../lib/league.rb'
|
6
8
|
require_relative '../lib/displayer.rb'
|
7
9
|
require_relative '../lib/table_scraper.rb'
|
8
|
-
require_relative '../lib/team.rb'
|
9
|
-
require_relative '../lib/standings.rb'
|
10
|
-
|
11
|
-
Displayer.new.call
|
10
|
+
require_relative '../lib/team.rb'
|
data/lib/displayer.rb
CHANGED
@@ -1,27 +1,35 @@
|
|
1
1
|
class Displayer
|
2
2
|
|
3
|
-
def call
|
4
|
-
TableScraper.new.call
|
3
|
+
def call
|
5
4
|
display_table
|
6
5
|
end
|
7
6
|
|
8
7
|
def template(team)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
output = "#{(team.position).ljust(3," ")} #{team.played.ljust(3, " ")} #{team.points.to_s.ljust(5, " ")}"
|
9
|
+
|
10
|
+
if team.top?
|
11
|
+
output += team.name.green
|
12
|
+
elsif team.middle?
|
13
|
+
output += team.name.light_blue
|
14
|
+
elsif team.bottom?
|
15
|
+
output += team.name.red
|
14
16
|
else
|
15
|
-
|
17
|
+
output += team.name
|
16
18
|
end
|
17
|
-
|
19
|
+
|
18
20
|
end
|
19
21
|
|
20
22
|
def display_table
|
21
|
-
puts
|
23
|
+
puts dashes_for_display_table
|
22
24
|
puts "# P Pts Team"
|
23
|
-
puts
|
24
|
-
|
25
|
+
puts dashes_for_display_table
|
26
|
+
League.teams.each { |team| puts template(team) }
|
27
|
+
puts dashes_for_display_table
|
25
28
|
end
|
26
|
-
|
29
|
+
|
30
|
+
def dashes_for_display_table
|
31
|
+
# draw enough dashes so that teams with long names are still covered by the dashes. Given a team length integer, add it to 17 (the length of the static puts statement in #display_table)
|
32
|
+
"-" * (17 + League.get_longest_team_name_length)
|
33
|
+
end
|
34
|
+
|
27
35
|
end
|
data/lib/league.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
class League
|
2
|
+
class << self
|
3
|
+
attr_accessor :league_symbol, :league_full_name, :top_teams, :middle_teams, :bottom_teams, :longest_team_name_length
|
4
|
+
end
|
5
|
+
|
6
|
+
LeaguesHash = {
|
7
|
+
:epl => {
|
8
|
+
:full_name => "premierleague",
|
9
|
+
:top_teams => 4,
|
10
|
+
:middle_teams => 5,
|
11
|
+
:bottom_teams => 3
|
12
|
+
},
|
13
|
+
:championship => {
|
14
|
+
:full_name => "championship",
|
15
|
+
:top_teams => 2,
|
16
|
+
:middle_teams => 6,
|
17
|
+
:bottom_teams => 3
|
18
|
+
},
|
19
|
+
:spl => {
|
20
|
+
:full_name => "scottishpremierleague",
|
21
|
+
:top_teams => 1,
|
22
|
+
:middle_teams => 3,
|
23
|
+
:bottom_teams => 2
|
24
|
+
},
|
25
|
+
:liga => {
|
26
|
+
:full_name => "laligafootball",
|
27
|
+
:top_teams => 3,
|
28
|
+
:middle_teams => 6,
|
29
|
+
:bottom_teams => 3
|
30
|
+
},
|
31
|
+
:ligue => {
|
32
|
+
:full_name => "ligue1football",
|
33
|
+
:top_teams => 3,
|
34
|
+
:middle_teams => 4,
|
35
|
+
:bottom_teams => 3
|
36
|
+
},
|
37
|
+
:seriea => {
|
38
|
+
:full_name => "serieafootball",
|
39
|
+
:top_teams => 3,
|
40
|
+
:middle_teams => 5,
|
41
|
+
:bottom_teams => 3
|
42
|
+
},
|
43
|
+
:bundesliga => {
|
44
|
+
:full_name => "bundesligafootball",
|
45
|
+
:top_teams => 4,
|
46
|
+
:middle_teams => 6,
|
47
|
+
:bottom_teams => 3
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
@@teams = []
|
52
|
+
|
53
|
+
def self.teams
|
54
|
+
@@teams
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.team_count
|
58
|
+
teams.length
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.set_league_info(league_selection)
|
62
|
+
self.league_symbol = league_selection
|
63
|
+
self.set_league_full_name
|
64
|
+
self.set_top_teams
|
65
|
+
self.set_middle_teams
|
66
|
+
self.set_bottom_teams
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.set_league_full_name
|
70
|
+
self.league_full_name = League::LeaguesHash[league_symbol][:full_name]
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.set_top_teams
|
74
|
+
self.top_teams = League::LeaguesHash[league_symbol][:top_teams]
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.set_middle_teams
|
78
|
+
self.middle_teams = League::LeaguesHash[league_symbol][:middle_teams]
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.set_bottom_teams
|
82
|
+
self.bottom_teams = League::LeaguesHash[league_symbol][:bottom_teams]
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.get_longest_team_name_length
|
86
|
+
self.longest_team_name_length ||= self.teams.sort_by {|t| t.name.length }.last.name.length
|
87
|
+
end
|
88
|
+
end
|
data/lib/standings.rb
CHANGED
@@ -1,2 +1,37 @@
|
|
1
|
+
#!/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
1
4
|
require_relative '../config/environment'
|
2
|
-
|
5
|
+
opts = Trollop::options do
|
6
|
+
version <<-EOS
|
7
|
+
|
8
|
+
⚽ Standings
|
9
|
+
Version 0.2.0 | November 2013
|
10
|
+
Scott Luptowski | @scottluptowski
|
11
|
+
|
12
|
+
EOS
|
13
|
+
banner <<-EOS
|
14
|
+
\n⚽ Standings is a command line gem which lets users check the current standings in a number of European football/soccer leagues. The data is scraped and thus subject to availability.
|
15
|
+
|
16
|
+
Usage:
|
17
|
+
\n
|
18
|
+
|
19
|
+
EOS
|
20
|
+
opt :epl, "🇬🇧 English Premier League"
|
21
|
+
opt :championship, "🇬🇧 English Championship"
|
22
|
+
opt :spl, "🇬🇧 Scottish Premier League"
|
23
|
+
opt :liga, "🇪🇸 La Liga"
|
24
|
+
opt :ligue, "🇫🇷 Ligue 1"
|
25
|
+
opt :seriea, "🇮🇹 Seria A"
|
26
|
+
opt :bundesliga, "🇩🇪 Bundesliga"
|
27
|
+
end
|
28
|
+
|
29
|
+
league_selection = opts.keys.detect { |k| opts[k] }
|
30
|
+
|
31
|
+
unless !league_selection
|
32
|
+
League.set_league_info(league_selection)
|
33
|
+
TableScraper.new.call
|
34
|
+
Displayer.new.call
|
35
|
+
else
|
36
|
+
puts "⚽ Standings requires you to pass in the flag of a league. Run with --help for help."
|
37
|
+
end
|
data/lib/table_scraper.rb
CHANGED
@@ -3,7 +3,7 @@ class TableScraper
|
|
3
3
|
attr_accessor :url, :teams
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
@url = "http://www.theguardian.com/football/
|
6
|
+
@url = "http://www.theguardian.com/football/" + League::league_full_name + "/table"
|
7
7
|
end
|
8
8
|
|
9
9
|
def call
|
@@ -23,4 +23,5 @@ class TableScraper
|
|
23
23
|
})
|
24
24
|
end
|
25
25
|
end
|
26
|
+
|
26
27
|
end
|
data/lib/team.rb
CHANGED
@@ -1,18 +1,24 @@
|
|
1
1
|
class Team
|
2
2
|
attr_accessor :name, :position, :played, :points
|
3
|
-
|
4
|
-
@@teams = []
|
5
|
-
|
3
|
+
|
6
4
|
def initialize(info)
|
7
5
|
@name = info[:name]
|
8
6
|
@played = info[:played]
|
9
7
|
@points = info[:points]
|
10
8
|
@position = info[:position]
|
11
|
-
|
9
|
+
League.teams << self
|
12
10
|
end
|
13
11
|
|
14
|
-
def
|
15
|
-
|
12
|
+
def top?
|
13
|
+
self.position.to_i <= League.top_teams
|
14
|
+
end
|
15
|
+
|
16
|
+
def middle?
|
17
|
+
League.middle_teams && self.position.to_i <= League.middle_teams
|
18
|
+
end
|
19
|
+
|
20
|
+
def bottom?
|
21
|
+
self.position.to_i >= League.team_count - (League.bottom_teams - 1)
|
16
22
|
end
|
17
23
|
|
18
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: standings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Luptowski
|
@@ -38,7 +38,23 @@ dependencies:
|
|
38
38
|
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: trollop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: View European football/soccer standings from your terminal. Currently
|
56
|
+
supports Premier League, Scottish Premier League, La Liga, Ligue 1, Serie A, and
|
57
|
+
Bundesliga
|
42
58
|
email: scottluptowski@gmail.com
|
43
59
|
executables:
|
44
60
|
- standings
|
@@ -47,6 +63,7 @@ extra_rdoc_files: []
|
|
47
63
|
files:
|
48
64
|
- config/environment.rb
|
49
65
|
- lib/displayer.rb
|
66
|
+
- lib/league.rb
|
50
67
|
- lib/standings.rb
|
51
68
|
- lib/table_scraper.rb
|
52
69
|
- lib/team.rb
|
@@ -74,5 +91,6 @@ rubyforge_project:
|
|
74
91
|
rubygems_version: 2.1.4
|
75
92
|
signing_key:
|
76
93
|
specification_version: 4
|
77
|
-
summary:
|
94
|
+
summary: football/soccer standings
|
78
95
|
test_files: []
|
96
|
+
has_rdoc:
|