Hot_100_CLI 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c14b2684f75020eae7794ca1a7aa2e9975e9a145
4
+ data.tar.gz: 03cb062f65d0cc6f14be368e4234bc421aad8ccc
5
+ SHA512:
6
+ metadata.gz: aa2fa01b4fdb5b612d9b993a71b2468ae4e9c5fedafac34b1012cb29e699ef91e18a8a55fbafb10b6cb001614bf01fb70f3bc6379c168a5112d65d6c3461dd32
7
+ data.tar.gz: efce5efc716dcf9c97a742602b02ed876c1900c6b49bcf209421b28624a32fb99bc426064b007348a830b36353c2abc79b7bc248ceab1dae489190c46f4387e9
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in Hot_100_CLI.gemspec
4
+
5
+ gem 'pry'
6
+ gem 'nokogiri'
7
+ gem 'require_all'
8
+ gem 'launchy'
9
+ gem 'rake'
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'Hot_100_CLI/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "Hot_100_CLI"
8
+ spec.version = Hot100CLI::VERSION
9
+ spec.authors = ["NStephenson"]
10
+ spec.email = ["nickstephenson90@gmail.com"]
11
+
12
+ spec.summary = %q{This gem allows users to view the Billboard Top 100 in the command line.}
13
+ spec.description = %q{This gem scrapes the Billboard Top 100 webpage and displays that information in the command line.}
14
+ spec.homepage = "https://github.com/NStephenson/Hot_100_CLI"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # delete this section to allow pushing this gem to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.11"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "rspec", "~> 3.0"
33
+
34
+
35
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 NStephenson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/NOTES.md ADDED
@@ -0,0 +1,13 @@
1
+ NOTES FOR HOT 100 CLI
2
+
3
+
4
+ This CLI should do the following:
5
+
6
+ 1. Greet the user.
7
+ 2. Explain what the CLI does in a sentence or two
8
+ 3. Shows the user the top 10 songs for the week
9
+ 4. Ask the user if they would like to view the full billboard listing or any other group of ten songs
10
+ 5. Should be able to find all songs from a specified artist
11
+ 6. Should be able to find songs by name
12
+ 7. Asking for more info on a song should give some additional info (TBD)
13
+ 8. When user is done, "exit" should close the program and dgive a goodbye message.
data/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # Hot100CLI
2
+
3
+ Welcome to your the Hot 100 CLI!. This gem scrapes the Billboard Top 100 page (http://www.billboard.com/charts/hot-100) and gives the full top 100 list, additiontional info on each song, and will allow the user to launch links to the song on spotify or vevo if available.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'Hot_100_CLI'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install Hot_100_CLI
20
+
21
+ ## Usage
22
+
23
+ Upon opening, Hot 100 CLI will display the top ten songs on the chart for the current week. After this, there are a variety of inputs you can give for more information about the list.
24
+
25
+ "Hot 100" - Displays the full hot 100 listing
26
+
27
+ "Artists" - Displays a list of all the artists on the list, alphabetized.
28
+
29
+ "Song [song name]" - Displays information on the name of the song given. This will also give an option of playing the song or viewing the music video of the song.
30
+
31
+ "Artist [artist name]" - Displays a list of all the songs by the given artist that appears on the Billboard Top 100.
32
+
33
+ "Help" - Displays the list of available inputs.
34
+
35
+ - Additionally, inputting a number between 1 and 100 will display more info on the song in that position. Giving a range of numbers between 1 and 100 separated with a hyphen will show all the entires on the list between those two numbers.
36
+
37
+ ## Development
38
+
39
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
40
+
41
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
42
+
43
+ ## Contributing
44
+
45
+ Bug reports and pull requests are welcome on GitHub at https://github.com/nstephenson/Hot_100_CLI.
46
+
47
+
48
+ ## License
49
+
50
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
51
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/HOT-100-CLI ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/Hot_100_CLI.rb'
4
+
5
+
6
+ Hot100::CLI.new.call
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require_relative '../lib/Hot_100_CLI.rb'
5
+ # require "Hot_100_CLI"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ 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,51 @@
1
+ class Artist
2
+
3
+ attr_accessor :name, :songs
4
+
5
+ @@all = []
6
+
7
+ def initialize(name)
8
+ @name = name
9
+ @songs = []
10
+
11
+ end
12
+
13
+ def self.all
14
+ @@all
15
+ end
16
+
17
+ def save
18
+ @@all << self
19
+ end
20
+
21
+ def self.find_by_name(name)
22
+ all.detect { |artist| artist.name.downcase == name.downcase }
23
+ end
24
+
25
+
26
+ def self.create_by_list_name(list_name)
27
+ artists = []
28
+ list_name[:name].split(" Featuring ").map do |name|
29
+ if name.include?(" & ")
30
+ name.split(" & ").map do |name|
31
+ artists << Artist.find_or_new_by_name(name)
32
+ end
33
+ else
34
+ artists << Artist.find_or_new_by_name(name)
35
+ end
36
+ end
37
+ artists
38
+ end
39
+
40
+ def self.find_or_new_by_name(name)
41
+ if self.all.detect{ |song| song.name == name }
42
+ artist = self.all.detect{ |song| song.name == name }
43
+ else
44
+ artist = Artist.new(name)
45
+ artist.save
46
+ end
47
+ artist
48
+ end
49
+
50
+
51
+ end
@@ -0,0 +1,62 @@
1
+ require 'nokogiri'
2
+ require 'open-uri'
3
+ require 'pry'
4
+ class BillboardScraper
5
+
6
+
7
+ def initialize
8
+ doc = Nokogiri::HTML(open('http://www.billboard.com/charts/hot-100'))
9
+ scrape(doc)
10
+ end
11
+
12
+
13
+
14
+
15
+ def scrape(doc)
16
+ doc.css('.chart-data .chart-row').map do |entry|
17
+ song_info = {}
18
+ song_info[:chart_status] = {
19
+ rank: entry.css('.chart-row__current-week').text,
20
+ previous_week: entry.css('.chart-row__last-week .chart-row__value').text,
21
+ peak_position: entry.css('.chart-row__top-spot .chart-row__value').text,
22
+ weeks_charted: entry.css('.chart-row__weeks-on-chart .chart-row__value').text
23
+ }
24
+
25
+ song_info[:song] = { title: entry.css('.chart-row__song').text,
26
+ spotify_link: parse_spotify_link_if_present(entry),
27
+ vevo_link: parse_vevo_link_if_present(entry) }
28
+
29
+ song_info[:artist] = { name: entry.css(".chart-row__artist").text.strip }
30
+ create_song_from_scraper(song_info)
31
+ end
32
+ end
33
+
34
+
35
+ def create_song_from_scraper(song_info)
36
+ song = Song.create(song_info[:song])
37
+ Artist.create_by_list_name(song_info[:artist]).each { |artist| song.artists << artist }
38
+ song.chart_status = ChartStatus.new(song_info[:chart_status])
39
+
40
+ song.chart_status.song = song
41
+ song.artists.each { |artist| artist.songs << song }
42
+ end
43
+
44
+
45
+ def parse_spotify_link_if_present(entry)
46
+ if !entry.css('.js-spotify-play-full').empty?
47
+ entry.css('.js-spotify-play-full').attr('data-href').text
48
+ else
49
+ "error"
50
+ end
51
+ end
52
+
53
+ def parse_vevo_link_if_present(entry)
54
+ if !entry.css('.js-chart-row-vevo').empty?
55
+ entry.css('.js-chart-row-vevo').attr('data-href').text
56
+ else
57
+ "error"
58
+ end
59
+ end
60
+
61
+
62
+ end
@@ -0,0 +1,48 @@
1
+ class ChartStatus
2
+
3
+ attr_accessor :song, :rank, :weeks_charted, :peak_position, :previous_week
4
+
5
+ def initialize(song_info)
6
+ @rank = song_info[:rank].to_i
7
+ @previous_week = song_info[:previous_week].to_i
8
+ @peak_position = song_info[:peak_position].to_i
9
+ @weeks_charted = song_info[:weeks_charted].to_i
10
+ end
11
+
12
+
13
+ def self.new_songs
14
+ Song.all.select { | song | song.previous_week == "--" }
15
+ end
16
+
17
+ def is_new?
18
+ previous_week == "--"
19
+ end
20
+
21
+ def position_change
22
+ if previous_week > rank
23
+ puts "#{song.title} moved up from \##{previous_week} to \##{rank}!"
24
+ elsif previous_week < rank
25
+ puts "#{song.title} moved down from \##{previous_week} to \##{rank}."
26
+ elsif previous_week == rank
27
+ puts "#{song.title} remained at #{rank}."
28
+ end
29
+ end
30
+
31
+ def peak_status
32
+ if rank == peak_position
33
+ puts "It's currently at it's peak position!!"
34
+ else
35
+ puts "It's down from it's peak position, which was number #{peak_position}."
36
+ end
37
+ end
38
+
39
+ def weeks_status
40
+ puts "#{song.title} has been on the charts for #{weeks_charted} weeks."
41
+ end
42
+
43
+
44
+
45
+
46
+
47
+
48
+ end
@@ -0,0 +1,196 @@
1
+ require 'Launchy'
2
+ class Hot100::CLI
3
+
4
+ def call
5
+ puts 'Starting...'
6
+ puts ' '
7
+ BillboardScraper.new
8
+ greeting
9
+ display_songs_in_range("1-10")
10
+ puts "You may now choose to view the rest of the list or get more information on any of the songs on the list by typing the appropriate command. For a list of commands, type 'help'."
11
+ puts " "
12
+ menu
13
+ farewell
14
+ end
15
+
16
+ def greeting
17
+ puts "Hello, Welcome to the Billboard Top 100 CLI"
18
+ puts " "
19
+ puts "These are the top ten songs this week!"
20
+ puts " "
21
+ puts "For the full list type 'hot 100'!"
22
+ end
23
+
24
+ def menu
25
+ input = nil
26
+ while input != "exit" do
27
+ puts "Please enter a command:"
28
+ input = gets.chomp.downcase
29
+ case input
30
+ when "hot 100"
31
+ display_songs_in_range("1-100")
32
+ when /\A\d+\z/
33
+ chart_index_if_valid(input)
34
+ when /\A\d+-\d+\z/
35
+ chart_range_if_valid(input)
36
+ when /\Aartist\s.+/
37
+ display_artist_songs(input)
38
+ when /\Aartists\z/
39
+ display_artist_list
40
+ when /\Asong\s.+/
41
+ more_info_song(input)
42
+ when "help"
43
+ list_commands
44
+ when "exit"
45
+ puts "Aw that's it?"
46
+ else
47
+ puts "That command seems to be invalid, type 'help' for a list of commands."
48
+ end
49
+ end
50
+ end
51
+
52
+ def list_commands
53
+ puts "To see the full billboard list, type hot 100. Otherwise enter a range of entries to view"
54
+ puts "For more info on a song, type 'song' followed by that song's name or chart position"
55
+ puts "To see all charted songs by a particular artist, type 'artist' followed by that artist's name"
56
+ puts "To exit, simply type exit"
57
+ puts "For help, type help, but I think you have this one figured out already."
58
+ end
59
+
60
+ def farewell
61
+ puts "See You Next Tuesday."
62
+ end
63
+
64
+ def display_artist_songs(input)
65
+ artist = Artist.find_by_name(input.split('artist ')[1])
66
+ if artist
67
+ puts ' '
68
+ puts "This week, #{artist.name} charted these songs:"
69
+ puts ' '
70
+ artist.songs.each { |song| puts "#{song.rank}. #{song.title}" }
71
+ puts ' '
72
+ else
73
+ puts ' '
74
+ puts "That artist isn't on the charts this week. Maybe next week?"
75
+ puts ' '
76
+ end
77
+ end
78
+
79
+ def more_info_song(input)
80
+ if !input[/\Asong/]
81
+ song = Song.find_by_rank(input)
82
+ else
83
+ song = Song.find_by_title(input.split("song ")[1])
84
+ end
85
+ if song
86
+ puts ' '
87
+ puts " #{song.title}"
88
+ puts " By #{song.artist_listing}"
89
+ puts ' '
90
+ puts "This week, #{song.title} was number #{song.rank} on the Billboard Top 100 Charts."
91
+ puts ' '
92
+ song_history(song)
93
+ ask_to_play_song(song)
94
+ else
95
+ puts "That song doesn't seem to be on the charts this week."
96
+ end
97
+ end
98
+
99
+ def valid_range?(range)
100
+ range[0].between?(1,99) && range[1].between?(2,100) && range[0] < range[1]
101
+ end
102
+
103
+ def split_input_to_range(input)
104
+ input.split("-").map { |num| num.to_i }
105
+ end
106
+
107
+ def display_songs_in_range(input)
108
+ range = split_input_to_range(input)
109
+ songs = Song.all.select do |song|
110
+ song.rank >= range[0] && range[1] >= song.rank
111
+ end
112
+ display_songs(songs)
113
+ end
114
+
115
+ def display_songs(songs)
116
+ songs.each { |song| puts "#{song.rank}. #{song.title} - #{song.artist_listing}" }
117
+ puts " "
118
+ puts "For more info on a song, please type it's rank or type 'song ' then the song's title."
119
+ end
120
+
121
+
122
+ def ask_to_play_song(song)
123
+ puts ' '
124
+ puts 'To listen to this song on spotify, type \'listen\'. To watch this song\'s music video, type \'watch\'. Otherwise, type \'exit\'.'
125
+ puts ' '
126
+ input = gets.chomp
127
+ if input == 'listen'
128
+ launch_spotify_link(song)
129
+ elsif input == 'watch'
130
+ launch_vevo_link(song)
131
+ end
132
+ end
133
+
134
+ def launch_spotify_link(song)
135
+ if song.spotify_link != 'error'
136
+ Launchy.open(song.spotify_link)
137
+ puts ' '
138
+ puts '♪ ♪ ♪ Enjoy!♪ ♪ ♪'
139
+ puts ' '
140
+ else
141
+ puts ' '
142
+ puts 'Unfortunately, it this song is not on Spotify :('
143
+ puts ' '
144
+ end
145
+ end
146
+
147
+ def launch_vevo_link(song)
148
+ if song.vevo_link != 'error'
149
+ Launchy.open(song.vevo_link)
150
+ puts ' '
151
+ puts '♪ ♪ ♪ Enjoy!♪ ♪ ♪'
152
+ puts ' '
153
+ else
154
+ puts ' '
155
+ puts 'Unfortunately, it this song is not on Vevo :('
156
+ puts ' '
157
+ end
158
+ end
159
+
160
+ def song_history(song) #need to add logic for a song returning to the top 100
161
+ if song.chart_status.is_new?
162
+ puts "This is #{song.title}'s debut week on the Hot 100 charts!"
163
+ else
164
+ song.chart_status.position_change
165
+ song.chart_status.peak_status
166
+ song.chart_status.weeks_status
167
+ end
168
+ end
169
+
170
+ def display_artist_list
171
+ Artist.all.each do |artist|
172
+ puts artist.name
173
+ end
174
+ end
175
+
176
+ def chart_range_if_valid(input)
177
+ if valid_range?(split_input_to_range(input))
178
+ display_songs_in_range(input)
179
+ else
180
+ puts "That number range feels off. Check your numbers and format and try again."
181
+ end
182
+ end
183
+
184
+ def chart_index_if_valid(input)
185
+ if input.to_i.between?(1,100)
186
+ more_info_song(input)
187
+ else
188
+ puts "Not a valid entry, choose a number between 1 and 100"
189
+ end
190
+ end
191
+
192
+
193
+
194
+
195
+
196
+ end
@@ -0,0 +1,69 @@
1
+ require 'pry'
2
+ class Song
3
+
4
+ attr_accessor :title, :artists, :spotify_link, :chart_status, :vevo_link
5
+
6
+ @@all = []
7
+
8
+ def initialize(title)
9
+ @title = title
10
+ @artists = []
11
+ end
12
+
13
+ def self.create(song_hash)
14
+ song = Song.new(song_hash[:title])
15
+ song.spotify_link = song_hash[:spotify_link]
16
+ song.vevo_link = song_hash[:vevo_link]
17
+ song.save
18
+ song
19
+ end
20
+
21
+ def self.all
22
+ @@all
23
+ end
24
+
25
+ def save
26
+ @@all << self
27
+ end
28
+
29
+ def self.find_by_title(title)
30
+ Song.all.detect { |song| song.title.downcase == title.downcase }
31
+ end
32
+
33
+ def self.find_by_rank(int)
34
+ Song.all.detect { |song| song.rank == int.to_i }
35
+ end
36
+
37
+
38
+ #association methods
39
+
40
+
41
+ def rank
42
+ chart_status.rank
43
+ end
44
+
45
+ def weeks_charted
46
+ chart_status.weeks_charted
47
+ end
48
+
49
+ def peak_position
50
+ chart_status.peak_position
51
+ end
52
+
53
+ def previous_week
54
+ chart_status.previous_week
55
+ end
56
+
57
+ def artist_listing
58
+ if artists.length < 3
59
+ artists.map { |artist| artist.name }.join(" Featuring ")
60
+ else
61
+ listing = artists[0].name + " Featuring " + artists[1].name
62
+ artists.each_with_index do |artist, i|
63
+ listing += " & " + artist.name if i > 1
64
+ end
65
+ listing
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,3 @@
1
+ module Hot100CLI
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,6 @@
1
+ require_relative "Hot_100_CLI/version.rb"
2
+ require_relative "./Hot_100_CLI/cli.rb"
3
+ require_relative "./Hot_100_CLI/artist.rb"
4
+ require_relative "./Hot_100_CLI/billboard_scraper.rb"
5
+ require_relative "./Hot_100_CLI/chart_status.rb"
6
+ require_relative "./Hot_100_CLI/song.rb"
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Hot_100_CLI
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - NStephenson
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-07-18 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.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
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 gem scrapes the Billboard Top 100 webpage and displays that information
56
+ in the command line.
57
+ email:
58
+ - nickstephenson90@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".rspec"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - Hot_100_CLI.gemspec
68
+ - LICENSE.txt
69
+ - NOTES.md
70
+ - README.md
71
+ - Rakefile
72
+ - bin/HOT-100-CLI
73
+ - bin/console
74
+ - bin/setup
75
+ - lib/Hot_100_CLI.rb
76
+ - lib/Hot_100_CLI/artist.rb
77
+ - lib/Hot_100_CLI/billboard_scraper.rb
78
+ - lib/Hot_100_CLI/chart_status.rb
79
+ - lib/Hot_100_CLI/cli.rb
80
+ - lib/Hot_100_CLI/song.rb
81
+ - lib/Hot_100_CLI/version.rb
82
+ homepage: https://github.com/NStephenson/Hot_100_CLI
83
+ licenses:
84
+ - MIT
85
+ metadata:
86
+ allowed_push_host: https://rubygems.org
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.4.5.1
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: This gem allows users to view the Billboard Top 100 in the command line.
107
+ test_files: []