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 +4 -4
- data/Gemfile +1 -4
- data/README.md +3 -17
- data/bin/ra-events +0 -2
- data/lib/ra_events.rb +6 -4
- data/lib/ra_events/cli.rb +67 -35
- data/lib/ra_events/event.rb +7 -0
- data/lib/ra_events/scraper.rb +4 -14
- data/lib/ra_events/version.rb +1 -1
- data/ra_events.gemspec +5 -4
- metadata +27 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d65f49870422d789deafd5388e2eb9b837c2ee5
|
4
|
+
data.tar.gz: c5729f8d1c37c4774c13e9a171c6d2177bbbdfb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88aa2c5c57af9bfe0fb9ca2aa6a1c1c8b19eff28373fbf38c6efc5374e5dcd783278844544658261629c6f51c41ee093418261c5ead7bdc963176cb9f4e09ffd
|
7
|
+
data.tar.gz: b9f3c2e75ce9ff84caf7c09c11a7e78f2882e936b5e94f1d04078edfc22d7c831fff697fbb611e516697ae4f6df0d5f3d134396723f19a678af3c08dac1bd98f
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,28 +1,14 @@
|
|
1
1
|
# RaEvents
|
2
2
|
|
3
|
-
|
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
|
-
|
10
|
+
To run the program from terminal, type:
|
11
|
+
$ ra-events
|
26
12
|
|
27
13
|
## Development
|
28
14
|
|
data/bin/ra-events
CHANGED
data/lib/ra_events.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
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
|
data/lib/ra_events/cli.rb
CHANGED
@@ -2,12 +2,12 @@ require 'pry'
|
|
2
2
|
|
3
3
|
class RaEvents::CLI
|
4
4
|
|
5
|
-
|
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
|
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
|
19
|
-
|
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
|
-
|
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
|
-
|
38
|
-
puts
|
24
|
+
no_events_listed_message
|
39
25
|
clear_events
|
40
26
|
call
|
41
27
|
else
|
42
|
-
|
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
|
-
|
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
|
-
|
59
|
-
|
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
|
-
|
80
|
-
puts "
|
81
|
-
|
82
|
-
puts "
|
83
|
-
|
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!"
|
data/lib/ra_events/event.rb
CHANGED
data/lib/ra_events/scraper.rb
CHANGED
@@ -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(
|
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
|
-
|
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
|
-
|
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.
|
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
|
|
data/lib/ra_events/version.rb
CHANGED
data/ra_events.gemspec
CHANGED
@@ -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
|
-
|
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
|
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.
|
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-
|
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.
|
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.
|
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:
|
84
|
+
name: coderay
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
76
|
-
type: :
|
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.
|
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.
|
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:
|