batting_leaders 0.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 12d9167163ee78f2ded0001f10d532be5af49397
4
+ data.tar.gz: 39454998702ce013d61787ffda339e939f43660f
5
+ SHA512:
6
+ metadata.gz: 6d3ac35a0f1683b65b229a5d3bf27ad44c74060d965d8dbf63e3fa9c45391cdf833b2ca332341f6b93ab53952a40147dc25193782d7899955663b3eeb7c0450e
7
+ data.tar.gz: 6629f3a7978b435232bfdbd6e61e3875ceac0271658da620cbb780c2ec2effef64a8d635f6d5a9b1f878e26a39d356a5eccbe9fe77b0cebf864b974259805f45
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require './lib/batting_leaders'
4
+
5
+ BattingLeaders::CLI.new.call
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "batting_leaders"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,3 @@
1
+ require_relative "./batting_leaders/version"
2
+ require_relative "./batting_leaders/cli"
3
+ require_relative "./batting_leaders/player"
@@ -0,0 +1,77 @@
1
+ class BattingLeaders::CLI
2
+
3
+ def call
4
+ @sorted_leading_batters = BattingLeaders::Player.sorted_batters
5
+ list_players
6
+ menu
7
+ end
8
+
9
+ def list_players
10
+ puts ""
11
+ puts "List of top MLB players today for batting average:"
12
+ puts ""
13
+ puts "Select a number of players displayed (10, 20, 30, or 40)"
14
+ puts ""
15
+ display_list
16
+ end
17
+
18
+ def display_list
19
+ number_players = gets.strip.to_i
20
+ puts ""
21
+ if number_players == 10 || number_players == 20 || number_players == 30 || number_players == 40
22
+ puts "---Player--------------------batting ave---"
23
+ @sorted_leading_batters[0,number_players].each_with_index do |player, index|
24
+ printf("%-3s", "#{index + 1}:")
25
+ printf("%-27s", "#{player.name}")
26
+ puts "#{player.batting_ave}"
27
+ end
28
+ else
29
+ puts "invalid input, please type (10, 20, 30, or 40)"
30
+ puts ""
31
+ display_list
32
+ end
33
+ puts ""
34
+ end
35
+
36
+ def menu
37
+ input = nil
38
+ while input != "exit"
39
+ puts "Enter the number of the player you'd like more info on, type list to see the list again, or type exit."
40
+ puts ""
41
+ input = gets.strip.downcase
42
+ puts ""
43
+ if (input.to_i > 0) && (input.to_i < 41)
44
+ player_url = @sorted_leading_batters[input.to_i - 1].url
45
+ player_profile(player_url)
46
+ elsif input == "list"
47
+ list_players
48
+ elsif input == "exit"
49
+ goodbye
50
+ else
51
+ puts "invalid input, please type again (1 .. 40), list, or exit"
52
+ end
53
+ end
54
+ end
55
+
56
+ def player_profile(player_url)
57
+ player = BattingLeaders::Player.find_player_by_url(player_url)
58
+ puts "name: #{player.name}"
59
+ puts "batting ave: #{player.batting_ave}"
60
+ puts "number and position: #{player.number_position}"
61
+ puts "team: #{player.team}"
62
+ puts "HR (this season): #{player.homerun}"
63
+ puts "RBI (this season): #{player.rbi}"
64
+ puts "OBP (this season): #{player.obp}"
65
+ puts "birth date: #{player.birth_date}"
66
+ puts "experience: #{player.experience}"
67
+ puts "college: #{player.college}"
68
+ puts "Ht/Wt: #{player.ht_wt}"
69
+ puts ""
70
+ end
71
+
72
+ def goodbye
73
+ puts "Check again soon!"
74
+ puts ""
75
+ end
76
+
77
+ end
@@ -0,0 +1,87 @@
1
+ require 'open-uri'
2
+ require 'nokogiri'
3
+ require 'pry'
4
+
5
+
6
+ class BattingLeaders::Player
7
+ attr_accessor :name, :batting_ave, :url
8
+ @@all = []
9
+
10
+ def initialize(player_hash)
11
+ @name = player_hash[:name]
12
+ @batting_ave = player_hash[:batting_ave]
13
+ @url = player_hash[:url]
14
+ @@all << self
15
+ end
16
+
17
+ def self.all
18
+ @@all
19
+ end
20
+
21
+ def self.sorted_batters
22
+ self.batting_leaders.sort_by {|player| player.batting_ave}.reverse! #sort by attribute (batting_ave) of Player's instance
23
+ end
24
+
25
+ def self.batting_leaders
26
+ self.row_scraper("odd")
27
+ self.row_scraper("even")
28
+ self.all
29
+ end
30
+
31
+ def self.row_scraper(oddEven)
32
+ oddEven =="odd" ? odd_or_even_row = "oddrow" : odd_or_even_row = "evenrow"
33
+ get_page = Nokogiri::HTML(open"http://espn.go.com/mlb/stats/batting/_/year/2016/seasontype/2")
34
+
35
+ get_page.css("tr.#{odd_or_even_row}").collect do |player|
36
+ player_attributes = {:name => player.css("a").text,
37
+ :url => player.css("a").attribute("href").value,
38
+ :batting_ave => player.css(".sortcell").text}
39
+ player = self.new(player_attributes)
40
+ end
41
+ end
42
+
43
+ def self.find_player_by_url(player_url)
44
+ @@all.detect{|player| player.url == player_url}
45
+ end
46
+
47
+ def doc
48
+ @doc ||= Nokogiri::HTML(open"#{@url}").css(".mod-content")
49
+ end
50
+
51
+ def number_position
52
+ @number_position ||= doc.css(".general-info .first").text
53
+ end
54
+
55
+ def team
56
+ @team ||= doc.css(".general-info .last").text
57
+ end
58
+
59
+ def birth_date
60
+ @birth_date ||= doc.css(".player-metadata li")[0].text.gsub("Birth Date", "")
61
+ end
62
+
63
+ def experience
64
+ @experience ||= doc.css(".player-metadata li")[2].text.gsub("Experience", "")
65
+ end
66
+
67
+ def college
68
+ @college ||= doc.css(".player-metadata li")[3].text.gsub("College", "")
69
+ end
70
+
71
+ def ht_wt
72
+ @ht_wt ||= doc.css(".player-metadata li")[4].text.gsub("Ht/Wt", "")
73
+ end
74
+
75
+ def homerun
76
+ @homerun ||= doc.css(".header-stats td")[1].text
77
+ end
78
+
79
+ def rbi
80
+ @rbi ||= doc.css(".header-stats td")[2].text
81
+ end
82
+
83
+ def obp
84
+ @obp ||= doc.css(".header-stats td")[3].text
85
+ end
86
+
87
+ end
@@ -0,0 +1,3 @@
1
+ module BattingLeaders
2
+ VERSION = "0.1.1"
3
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: batting_leaders
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Han Lee
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description: This app allows users to check the current MLB batting leaders, and select
56
+ a player in the list to see a more detailed info on the player.
57
+ email:
58
+ - hanlee12@gmail.com
59
+ executables:
60
+ - batting_leaders
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - bin/batting_leaders
65
+ - bin/console
66
+ - bin/setup
67
+ - lib/batting_leaders.rb
68
+ - lib/batting_leaders/cli.rb
69
+ - lib/batting_leaders/player.rb
70
+ - lib/batting_leaders/version.rb
71
+ homepage: https://github.com/tpstar/mlb-batting-leaders
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.4.5.1
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: A CLI app for listing MLB batting leaders for batting average
95
+ test_files: []