ra_events 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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: