ra_events 0.2.1 → 0.2.2

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: 396b7904c8a35238dde3b7002ddfa97764110c47
4
- data.tar.gz: e279cd0059739fea2c1f867c8e909cf0cee82bc5
3
+ metadata.gz: 8d65f49870422d789deafd5388e2eb9b837c2ee5
4
+ data.tar.gz: c5729f8d1c37c4774c13e9a171c6d2177bbbdfb3
5
5
  SHA512:
6
- metadata.gz: 912eb5fb31dcf51a41f18a211fea4b0eb486d34dcca78a505b8434fc6e2cb53cc7ae65dd1710502d149ca11f6b0d4ca407d39a6673134b85fa6dec3acea4d676
7
- data.tar.gz: b533f11473949a030ed9e78542a5912e89ab845faee4868f1d8620b715b048676e1cd24dcd7d33b542b9188b41165c3502d703be4a8269d065c17c434ff8328e
6
+ metadata.gz: 88aa2c5c57af9bfe0fb9ca2aa6a1c1c8b19eff28373fbf38c6efc5374e5dcd783278844544658261629c6f51c41ee093418261c5ead7bdc963176cb9f4e09ffd
7
+ data.tar.gz: b9f3c2e75ce9ff84caf7c09c11a7e78f2882e936b5e94f1d04078edfc22d7c831fff697fbb611e516697ae4f6df0d5f3d134396723f19a678af3c08dac1bd98f
data/Gemfile CHANGED
@@ -1,7 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in ra_events.gemspec
4
- gemspec
5
-
6
- # Do I need this pointing to GH?
7
- # gem 'ra_events', :git => "git://github.com/Mk-Etlinger/ra-events-cli-app.git"
4
+ gemspec
data/README.md CHANGED
@@ -1,28 +1,14 @@
1
1
  # RaEvents
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/ra_events`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ *Disclaimer: ra_events uses the 'open' command to open an event URL in your browser. This will not work on Windows machines, however, the URL will be printed for easy copy/paste* Type `ra-events` after running `gem install ra_events`. Then type in your state, get a list of electronic music events by week, and open an event in your browser for more details.
6
4
 
7
5
  ## Installation
8
6
 
9
- Add this line to your application's Gemfile:
10
-
11
- ```ruby
12
- gem 'ra_events'
13
- ```
14
-
15
- And then execute:
16
-
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
7
  $ gem install ra_events
22
8
 
23
9
  ## Usage
24
-
25
- TODO: Write usage instructions here
10
+ To run the program from terminal, type:
11
+ $ ra-events
26
12
 
27
13
  ## Development
28
14
 
@@ -2,8 +2,6 @@
2
2
 
3
3
  require_relative '../lib/ra_events'
4
4
  require "bundler/setup"
5
- # require "ra_events"
6
-
7
5
 
8
6
  RaEvents::CLI.new.call
9
7
 
@@ -1,4 +1,6 @@
1
- require_relative "./ra_events/version"
2
- require_relative './ra_events/cli'
3
- require_relative './ra_events/scraper'
4
- require_relative './ra_events/event'
1
+ module RaEvents
2
+ require_relative 'ra_events/cli'
3
+ require_relative 'ra_events/version'
4
+ require_relative 'ra_events/scraper'
5
+ require_relative 'ra_events/event'
6
+ end
@@ -2,12 +2,12 @@ require 'pry'
2
2
 
3
3
  class RaEvents::CLI
4
4
 
5
- STATES_AND_LINKS = {"AL"=>"/events.aspx?ai=108", "AK"=>"/events.aspx?ai=109", "AZ"=>"/events.aspx?ai=102", "AR"=>"/events.aspx?ai=110", "CA"=>"/events.aspx?ai=308", "CO"=>"/events.aspx?ai=82", "CT"=>"/events.aspx?ai=111", "DE"=>"/events.aspx?ai=112", "DC"=>"District of Columbia", "FL"=>"/events.aspx?ai=317", "GA"=>"/events.aspx?ai=64", "HI"=>"/events.aspx?ai=133", "ID"=>"/events.aspx?ai=113", "IL"=>"/events.aspx?ai=359", "IN"=>"/events.aspx?ai=85", "IA"=>"/events.aspx?ai=114", "KS"=>"/events.aspx?ai=90", "KY"=>"/events.aspx?ai=115", "LA"=>"/events.aspx?ai=65", "ME"=>"/events.aspx?ai=116", "MD"=>"/events.aspx?ai=117", "MA"=>"/events.aspx?ai=79", "MI"=>"/events.aspx?ai=360", "MN"=>"/events.aspx?ai=81", "MS"=>"/events.aspx?ai=103", "MO"=>"/events.aspx?ai=118", "MT"=>"/events.aspx?ai=119", "NE"=>"/events.aspx?ai=120", "NV"=>"/events.aspx?ai=47", "NH"=>"/events.aspx?ai=121", "NJ"=>"/events.aspx?ai=48", "NM"=>"/events.aspx?ai=122", "NY"=>"/events.aspx?ai=8", "NC"=>"/events.aspx?ai=123", "ND"=>"/events.aspx?ai=124", "OH"=>"/events.aspx?ai=84", "OK"=>"/events.aspx?ai=104", "OR"=>"/events.aspx?ai=125", "PA"=>"/events.aspx?ai=80", "RI"=>"/events.aspx?ai=127", "SC"=>"/events.aspx?ai=105", "SD"=>"/events.aspx?ai=128", "TN"=>"/events.aspx?ai=72", "TX"=>"/events.aspx?ai=318", "UT"=>"/events.aspx?ai=106", "VT"=>"/events.aspx?ai=129", "VA"=>"/events.aspx?ai=130", "WA"=>"Washington", "WV"=>"/events.aspx?ai=131", "WI"=>"/events.aspx?ai=107", "WY"=>"/events.aspx?ai=132"}
5
+ EVENT_LINKS_BY_STATE = {"AL"=>"/events.aspx?ai=108", "AK"=>"/events.aspx?ai=109", "AZ"=>"/events.aspx?ai=102", "AR"=>"/events.aspx?ai=110", "CA"=>"/events.aspx?ai=308", "CO"=>"/events.aspx?ai=82", "CT"=>"/events.aspx?ai=111", "DE"=>"/events.aspx?ai=112", "DC"=>"District of Columbia", "FL"=>"/events.aspx?ai=317", "GA"=>"/events.aspx?ai=64", "HI"=>"/events.aspx?ai=133", "ID"=>"/events.aspx?ai=113", "IL"=>"/events.aspx?ai=359", "IN"=>"/events.aspx?ai=85", "IA"=>"/events.aspx?ai=114", "KS"=>"/events.aspx?ai=90", "KY"=>"/events.aspx?ai=115", "LA"=>"/events.aspx?ai=65", "ME"=>"/events.aspx?ai=116", "MD"=>"/events.aspx?ai=117", "MA"=>"/events.aspx?ai=79", "MI"=>"/events.aspx?ai=360", "MN"=>"/events.aspx?ai=81", "MS"=>"/events.aspx?ai=103", "MO"=>"/events.aspx?ai=118", "MT"=>"/events.aspx?ai=119", "NE"=>"/events.aspx?ai=120", "NV"=>"/events.aspx?ai=47", "NH"=>"/events.aspx?ai=121", "NJ"=>"/events.aspx?ai=48", "NM"=>"/events.aspx?ai=122", "NY"=>"/events.aspx?ai=8", "NC"=>"/events.aspx?ai=123", "ND"=>"/events.aspx?ai=124", "OH"=>"/events.aspx?ai=84", "OK"=>"/events.aspx?ai=104", "OR"=>"/events.aspx?ai=125", "PA"=>"/events.aspx?ai=80", "RI"=>"/events.aspx?ai=127", "SC"=>"/events.aspx?ai=105", "SD"=>"/events.aspx?ai=128", "TN"=>"/events.aspx?ai=72", "TX"=>"/events.aspx?ai=318", "UT"=>"/events.aspx?ai=106", "VT"=>"/events.aspx?ai=129", "VA"=>"/events.aspx?ai=130", "WA"=>"Washington", "WV"=>"/events.aspx?ai=131", "WI"=>"/events.aspx?ai=107", "WY"=>"/events.aspx?ai=132"}
6
6
  URL_BASE = "https://www.residentadvisor.net"
7
7
 
8
8
  def call
9
9
  welcome
10
- list_events(user_inputs_state)
10
+ list_events
11
11
  goto_event_url
12
12
  end
13
13
 
@@ -15,48 +15,29 @@ URL_BASE = "https://www.residentadvisor.net"
15
15
  puts "Welcome to ra_events! A gem that lists electronic music events."
16
16
  end
17
17
 
18
- def user_inputs_state
19
- puts "Please enter your state(ex: MI, NY, CA):"
20
- input = gets.strip.upcase
21
- if STATES_AND_LINKS.key?(input)
22
- url = URL_BASE + STATES_AND_LINKS[input]
23
- else
24
- puts "Invalid"
25
- user_inputs_state
26
- end
27
- end
28
-
29
- def list_events(user_inputs_state)
18
+ def list_events
19
+ scrape_events
30
20
  display_events_this_week_text
31
21
 
32
- events_by_week = Scraper.scrape_events_page(user_inputs_state)
33
- Event.create_from_collection(events_by_week)
34
- Event.all.each.with_index(1) do |event, i|
35
-
22
+ Event.all.each.with_index(1) do |event, i|
36
23
  if event.no_events_listed == true
37
- puts "There are currently no events listed for this date range in this region."
38
- puts
24
+ no_events_listed_message
39
25
  clear_events
40
26
  call
41
27
  else
42
- puts "#{i}. #{event.title} "
43
- puts "Location: #{event.location} " unless event.artists.nil?
44
- puts "Artists: #{event.artists}" unless event.artists.nil?
45
- puts "Date: #{event.date.gsub("T00:00", "")}"
46
- puts
28
+ display_and_format_event(event, i)
47
29
  end
48
30
  end
49
31
  end
50
32
 
51
33
  def goto_event_url
52
- puts "Type the event # you'd like to view in your browser, 'menu' or 'exit':"
34
+ prompt_for_event_menu_or_exit
53
35
  input = gets.strip.downcase
54
36
 
55
37
  if input.to_i > 0 && input.to_i <= Event.all.count
56
- puts "Opening residentadvisor.net..."
57
38
  event = Event.all[input.to_i - 1]
58
- puts "#{URL_BASE + event.url}"
59
- `open #{URL_BASE + event.url}`
39
+ print_url(event)
40
+ open_url_in_browser(event)
60
41
  goto_event_url
61
42
  elsif input == "exit"
62
43
  exit_program
@@ -69,20 +50,71 @@ URL_BASE = "https://www.residentadvisor.net"
69
50
  end
70
51
  end
71
52
 
53
+ def get_event_url
54
+ prompt_for_state
55
+ state = gets.strip.upcase
56
+ if EVENT_LINKS_BY_STATE.key?(state)
57
+ url = URL_BASE + EVENT_LINKS_BY_STATE[state]
58
+ else
59
+ puts "Invalid"
60
+ get_event_url
61
+ end
62
+ end
63
+
72
64
  def main_menu
73
65
  call
74
66
  end
75
67
 
76
68
  def display_events_this_week_text
77
69
  puts "Events this week:"
78
- puts "****************"
79
- puts "*************"
80
- puts "**********"
81
- puts "*******"
82
- puts "****"
83
- puts "**"
70
+ puts "****************"
71
+ sleep 0.1
72
+ puts "*************"
73
+ sleep 0.1
74
+ puts "**********"
75
+ sleep 0.1
76
+ puts "*******"
77
+ sleep 0.1
78
+ puts "****"
79
+ sleep 0.1
80
+ puts "**"
81
+ sleep 0.1
84
82
  end
85
83
 
84
+ def scrape_events
85
+ Scraper.scrape_events_page(get_event_url)
86
+ end
87
+
88
+ def prompt_for_state
89
+ puts "Please enter your state(ex: MI, NY, CA):"
90
+ end
91
+
92
+ def no_events_listed_message
93
+ puts "There are currently no events listed for this month in this region."
94
+ puts
95
+ end
96
+
97
+ def display_and_format_event(event, i)
98
+ puts "#{i}. #{event.title} "
99
+ puts "Location: #{event.location} " unless event.artists.nil?
100
+ puts "Artists: #{event.artists}" unless event.artists.nil?
101
+ puts "Date: #{event.date.gsub("T00:00", "")}"
102
+ puts
103
+ end
104
+
105
+ def prompt_for_event_menu_or_exit
106
+ puts "Type the event # you'd like to view in your browser, 'menu' or 'exit':"
107
+ end
108
+
109
+ def print_url(event)
110
+ puts "Opening residentadvisor.net..."
111
+ puts "#{URL_BASE + event.url}"
112
+ end
113
+
114
+ def open_url_in_browser(event)
115
+ `open #{URL_BASE + event.url}`
116
+ end
117
+
86
118
  def exit_program
87
119
  clear_events
88
120
  puts "Bye, see you on the dance floor!"
@@ -27,4 +27,11 @@ class Event
27
27
  def self.clear
28
28
  self.all.clear
29
29
  end
30
+
31
+ # def self.includes_artist(artist)
32
+ # Event.all.select do |event|
33
+ # event.artists.include?(artist)
34
+ # end
35
+ # end
36
+
30
37
  end
@@ -3,29 +3,21 @@ require 'open-uri'
3
3
  require 'nokogiri'
4
4
 
5
5
  class Scraper
6
-
7
- attr_accessor
8
-
9
- def initialize
10
-
11
- end
12
6
 
13
7
  def self.scrape_links(index_url)
14
8
  state_event_page_url = {}
15
- ra_events_page = Nokogiri::HTML(open("https://www.residentadvisor.net/events.aspx"))
9
+ ra_events_page = Nokogiri::HTML(open(index_url))
16
10
 
17
11
  ra_events_page.css("li.parent a").each do |e|
18
12
  state_event_page_url[e.children.text] = e['href'] unless e.children.text == "Washington DC"
19
13
  end
20
-
21
14
  state_event_page_url
22
15
  end
23
16
 
24
17
  def self.scrape_events_page(url)
25
18
  ra_events_page = Nokogiri::HTML(open(url))
26
19
 
27
- events = []
28
- events << {no_events_listed: true} if self.is_real_event?(ra_events_page)
20
+ Event.new({no_events_listed: true}) if self.no_events_listed(ra_events_page)
29
21
 
30
22
  ra_events_page.css("#items").each do |event_listings|
31
23
  event_listings.css('li').each do |event|
@@ -36,15 +28,13 @@ class Scraper
36
28
  event_url = event.css('a').attr('href').text
37
29
 
38
30
  if event_title != "" && event_location != ""
39
- events << {date: event_date, title: event_title, location: event_location, artists: event_artists, url: event_url}
31
+ Event.new({date: event_date, title: event_title, location: event_location, artists: event_artists, url: event_url})
40
32
  end
41
33
  end
42
34
  end
43
-
44
- events
45
35
  end
46
36
 
47
- def self.is_real_event?(ra_events_page)
37
+ def self.no_events_listed(ra_events_page)
48
38
  ra_events_page.css('.pr8').first.text.include?("no events")
49
39
  end
50
40
 
@@ -1,3 +1,3 @@
1
1
  module RaEvents
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -2,7 +2,7 @@
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'ra_events/version'
5
- require 'pry'
5
+
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "ra_events"
@@ -31,13 +31,14 @@ Gem::Specification.new do |spec|
31
31
  spec.bindir = "bin"
32
32
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
33
33
  spec.require_paths = ["lib"]
34
+
35
+ spec.add_runtime_dependency "nokogiri", ">= 1.7.1"
34
36
 
35
37
  spec.add_development_dependency "bundler", "~> 1.14"
36
38
  spec.add_development_dependency "rake", "~> 10.0"
37
- spec.add_development_dependency "pry", ">= 0.9.0"
39
+ spec.add_development_dependency 'pry', '~> 0.9.12'
38
40
  spec.add_development_dependency "rspec", ">= 3.2.0"
41
+ spec.add_development_dependency "coderay", "~> 1.1.1"
39
42
 
40
- spec.add_runtime_dependency "nokogiri", ">= 1.7.0"
41
-
42
43
  end
43
44
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ra_events
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Etlinger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-05 00:00:00.000000000 Z
11
+ date: 2017-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.7.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.7.1
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +56,16 @@ dependencies:
42
56
  name: pry
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: 0.9.0
61
+ version: 0.9.12
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: 0.9.0
68
+ version: 0.9.12
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +81,19 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: 3.2.0
69
83
  - !ruby/object:Gem::Dependency
70
- name: nokogiri
84
+ name: coderay
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: 1.7.0
76
- type: :runtime
89
+ version: 1.1.1
90
+ type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: 1.7.0
96
+ version: 1.1.1
83
97
  description: |-
84
98
  *Disclaimer: ra_events uses the 'open' command to open an event URL in your browser. This will not work on Windows machines, however, the URL will be printed for easy copy/paste*
85
99
  Type `ra-events` after running `gem install ra_events`. Then type in your state, get a list of electronic music events by week, and open an event in your browser for more details.
@@ -129,10 +143,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
143
  version: '0'
130
144
  requirements: []
131
145
  rubyforge_project:
132
- rubygems_version: 2.4.5.1
146
+ rubygems_version: 2.6.12
133
147
  signing_key:
134
148
  specification_version: 4
135
149
  summary: ra_events lists Resident Advisor events by state from the comfort of your
136
150
  CLI
137
151
  test_files: []
138
- has_rdoc: