songkickr 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/.bundle/config +2 -0
  3. data/.gitignore +1 -0
  4. data/.travis.yml +8 -0
  5. data/Gemfile.lock +42 -22
  6. data/LICENSE +1 -1
  7. data/README.rdoc +14 -9
  8. data/Rakefile +3 -4
  9. data/lib/songkickr/artist.rb +2 -2
  10. data/lib/songkickr/artist_result.rb +4 -24
  11. data/lib/songkickr/calendar_entry.rb +23 -0
  12. data/lib/songkickr/calendar_result.rb +10 -0
  13. data/lib/songkickr/concert_setlist_result.rb +5 -27
  14. data/lib/songkickr/event.rb +8 -14
  15. data/lib/songkickr/event_result.rb +5 -23
  16. data/lib/songkickr/location.rb +4 -4
  17. data/lib/songkickr/location_result.rb +5 -30
  18. data/lib/songkickr/metro_area.rb +28 -0
  19. data/lib/songkickr/metro_area_result.rb +12 -0
  20. data/lib/songkickr/performance.rb +17 -12
  21. data/lib/songkickr/remote.rb +18 -198
  22. data/lib/songkickr/remote_api/artist_details.rb +17 -0
  23. data/lib/songkickr/remote_api/event_details.rb +17 -0
  24. data/lib/songkickr/remote_api/past_events.rb +48 -0
  25. data/lib/songkickr/remote_api/similar_artists.rb +14 -0
  26. data/lib/songkickr/remote_api/upcoming_events.rb +125 -0
  27. data/lib/songkickr/remote_api/user_events_and_trackings.rb +143 -0
  28. data/lib/songkickr/remote_api/venue_details.rb +16 -0
  29. data/lib/songkickr/result_set.rb +27 -0
  30. data/lib/songkickr/setlist.rb +7 -12
  31. data/lib/songkickr/setlist_item.rb +1 -1
  32. data/lib/songkickr/tracking.rb +18 -0
  33. data/lib/songkickr/tracking_result.rb +24 -0
  34. data/lib/songkickr/venue.rb +10 -2
  35. data/lib/songkickr/venue_result.rb +32 -0
  36. data/lib/songkickr/version.rb +1 -1
  37. data/lib/songkickr.rb +24 -17
  38. data/songkickr.gemspec +17 -44
  39. data/test/fixtures/event_7391451.json +732 -1
  40. data/test/fixtures/location_search.json +38 -0
  41. data/test/fixtures/metro_area.json +11 -0
  42. data/test/fixtures/users_attendance_calendar.json +243 -0
  43. data/test/fixtures/vcr/artist_events.yml +1394 -0
  44. data/test/fixtures/vcr/artist_search.yml +38 -0
  45. data/test/fixtures/vcr/artists_gigography.yml +187 -0
  46. data/test/fixtures/vcr/concert_setlists.yml +47 -0
  47. data/test/fixtures/vcr/event_search.yml +110 -0
  48. data/test/fixtures/vcr/invalid_api_key.yml +6 -36
  49. data/test/fixtures/vcr/invalid_artist_id.yml +6 -6
  50. data/test/fixtures/vcr/invalid_event_id.yml +6 -6
  51. data/test/fixtures/vcr/invalid_user.yml +6 -6
  52. data/test/fixtures/vcr/invalid_venue_id.yml +6 -6
  53. data/test/fixtures/vcr/location_search.yml +42 -0
  54. data/test/fixtures/vcr/metro_areas_events.yml +1535 -0
  55. data/test/fixtures/vcr/similar_artists.yml +64 -0
  56. data/test/fixtures/vcr/users_artist_tracking.yml +99 -0
  57. data/test/fixtures/vcr/users_attendance.yml +66 -0
  58. data/test/fixtures/vcr/users_attendance_calendar.yml +51 -0
  59. data/test/fixtures/vcr/users_events.yml +809 -0
  60. data/test/fixtures/vcr/users_gigography.yml +2782 -0
  61. data/test/fixtures/vcr/users_metro_area_tracking.yml +66 -0
  62. data/test/fixtures/vcr/users_muted_artists.yml +66 -0
  63. data/test/fixtures/vcr/users_tracked_artists.yml +75 -0
  64. data/test/fixtures/vcr/users_tracked_events_calendar.yml +1901 -0
  65. data/test/fixtures/vcr/users_tracked_metro_areas.yml +37 -0
  66. data/test/fixtures/vcr/valid_artist.yml +9 -9
  67. data/test/fixtures/vcr/valid_event.yml +103 -38
  68. data/test/fixtures/vcr/valid_user.yml +634 -44
  69. data/test/fixtures/vcr/valid_venue.yml +25 -26
  70. data/test/fixtures/vcr/venue_calendar.yml +500 -0
  71. data/test/fixtures/vcr/venue_search.yml +42 -0
  72. data/test/helper.rb +1 -27
  73. data/test/songkickr/test_calendar_entry.rb +15 -0
  74. data/test/songkickr/test_event.rb +8 -9
  75. data/test/songkickr/test_location.rb +11 -11
  76. data/test/songkickr/test_metro_area.rb +17 -0
  77. data/test/songkickr/test_remote.rb +149 -3
  78. data/test/songkickr/test_setlist_item.rb +20 -0
  79. data/test/songkickr/test_venue.rb +1 -2
  80. data/test.rb +3 -5
  81. metadata +120 -152
  82. data/bin/autospec +0 -16
  83. data/bin/convert_to_should_syntax +0 -16
  84. data/bin/guard +0 -16
  85. data/bin/htmldiff +0 -16
  86. data/bin/httparty +0 -16
  87. data/bin/jeweler +0 -16
  88. data/bin/ldiff +0 -16
  89. data/bin/rake +0 -16
  90. data/bin/rake2thor +0 -16
  91. data/bin/rg +0 -16
  92. data/bin/ri +0 -16
  93. data/bin/rspec +0 -16
  94. data/bin/thor +0 -16
  95. data/doc/APIError.html +0 -241
  96. data/doc/APIKeyNotSet.html +0 -203
  97. data/doc/LICENSE.html +0 -133
  98. data/doc/README_rdoc.html +0 -173
  99. data/doc/ResourceNotFound.html +0 -203
  100. data/doc/Songkickr/Artist.html +0 -278
  101. data/doc/Songkickr/ArtistResult.html +0 -308
  102. data/doc/Songkickr/ConcertSetlistResult.html +0 -283
  103. data/doc/Songkickr/Event.html +0 -491
  104. data/doc/Songkickr/EventResult.html +0 -306
  105. data/doc/Songkickr/Location.html +0 -299
  106. data/doc/Songkickr/LocationResult.html +0 -309
  107. data/doc/Songkickr/Performance.html +0 -295
  108. data/doc/Songkickr/Remote.html +0 -864
  109. data/doc/Songkickr/Setlist.html +0 -360
  110. data/doc/Songkickr/SetlistItem.html +0 -244
  111. data/doc/Songkickr/Venue.html +0 -265
  112. data/doc/Songkickr.html +0 -261
  113. data/doc/created.rid +0 -16
  114. data/doc/images/add.png +0 -0
  115. data/doc/images/brick.png +0 -0
  116. data/doc/images/brick_link.png +0 -0
  117. data/doc/images/bug.png +0 -0
  118. data/doc/images/bullet_black.png +0 -0
  119. data/doc/images/bullet_toggle_minus.png +0 -0
  120. data/doc/images/bullet_toggle_plus.png +0 -0
  121. data/doc/images/date.png +0 -0
  122. data/doc/images/delete.png +0 -0
  123. data/doc/images/find.png +0 -0
  124. data/doc/images/loadingAnimation.gif +0 -0
  125. data/doc/images/macFFBgHack.png +0 -0
  126. data/doc/images/package.png +0 -0
  127. data/doc/images/page_green.png +0 -0
  128. data/doc/images/page_white_text.png +0 -0
  129. data/doc/images/page_white_width.png +0 -0
  130. data/doc/images/plugin.png +0 -0
  131. data/doc/images/ruby.png +0 -0
  132. data/doc/images/tag_blue.png +0 -0
  133. data/doc/images/tag_green.png +0 -0
  134. data/doc/images/transparent.png +0 -0
  135. data/doc/images/wrench.png +0 -0
  136. data/doc/images/wrench_orange.png +0 -0
  137. data/doc/images/zoom.png +0 -0
  138. data/doc/index.html +0 -110
  139. data/doc/js/darkfish.js +0 -153
  140. data/doc/js/jquery.js +0 -18
  141. data/doc/js/navigation.js +0 -142
  142. data/doc/js/quicksearch.js +0 -114
  143. data/doc/js/search.js +0 -94
  144. data/doc/js/search_index.js +0 -1
  145. data/doc/js/searcher.js +0 -228
  146. data/doc/js/thickbox-compressed.js +0 -10
  147. data/doc/lib/songkickr/artist_rb.html +0 -52
  148. data/doc/lib/songkickr/artist_result_rb.html +0 -52
  149. data/doc/lib/songkickr/concert_setlist_result_rb.html +0 -52
  150. data/doc/lib/songkickr/event_rb.html +0 -52
  151. data/doc/lib/songkickr/event_result_rb.html +0 -52
  152. data/doc/lib/songkickr/location_rb.html +0 -52
  153. data/doc/lib/songkickr/location_result_rb.html +0 -52
  154. data/doc/lib/songkickr/performance_rb.html +0 -52
  155. data/doc/lib/songkickr/remote_rb.html +0 -52
  156. data/doc/lib/songkickr/setlist_item_rb.html +0 -52
  157. data/doc/lib/songkickr/setlist_rb.html +0 -52
  158. data/doc/lib/songkickr/venue_rb.html +0 -52
  159. data/doc/lib/songkickr_rb.html +0 -56
  160. data/doc/rdoc.css +0 -543
  161. data/doc/table_of_contents.html +0 -185
  162. data/test/fixtures/locations_bar.json +0 -1
@@ -18,30 +18,25 @@ module Songkickr
18
18
  # "setlistItem": []
19
19
  # }
20
20
  class Setlist
21
- attr_accessor :event, :setlist_items, :artist, :playlist_uri, :display_name, :id
22
-
21
+ attr_accessor :setlist_items, :artist, :playlist_uri, :display_name, :id
22
+
23
23
  # Takes the setlist hash and parses out an Event and Artist and an array of SetlistItems.
24
24
  def initialize(setlist_hash)
25
- @event = Songkickr::Event.new setlist_hash["event"]
26
25
  @setlist_items = parse_setlist_items setlist_hash["setlistItem"]
27
26
  @artist = Songkickr::Artist.new setlist_hash["artist"]
28
27
  @playlist_uri = setlist_hash["playlistUri"]
29
28
  @display_name = setlist_hash["displayName"]
30
29
  @id = setlist_hash["id"]
31
30
  end
32
-
31
+
33
32
  protected
34
-
33
+
35
34
  # Takes the array of setlist items and create SetLists
36
35
  def parse_setlist_items(setlist_item_array = nil)
37
- setlist_items = []
38
- if setlist_item_array
39
- setlist_item_array.each do |item|
40
- setlist_items << Songkickr::SetlistItem.new(item)
41
- end
36
+ return [] unless setlist_item_array
37
+ setlist_item_array.inject([]) do |setlist_items, item|
38
+ setlist_items << Songkickr::SetlistItem.new(item)
42
39
  end
43
-
44
- setlist_items
45
40
  end
46
41
  end
47
42
  end
@@ -9,7 +9,7 @@ module Songkickr
9
9
 
10
10
  # Takes the set list item hash and parses a boolean out for encore.
11
11
  def initialize(setlist_item_hash)
12
- @encore = !!setlist_item_hash["encore"]
12
+ @encore = !setlist_item_hash["encore"].zero?
13
13
  @name = setlist_item_hash["name"]
14
14
  end
15
15
  end
@@ -0,0 +1,18 @@
1
+ module Songkickr
2
+ # "tracking": {
3
+ # "username": "username",
4
+ # "id": "artist:231185",
5
+ # "createdAt": "2010-04-17T17:27:45Z",
6
+ # "attendance": "i_might_go"
7
+ # }
8
+ class Tracking
9
+ attr_accessor :attendance, :created_at, :id, :username
10
+
11
+ def initialize(tracking_hash)
12
+ @attendance = tracking_hash["attendance"] if tracking_hash.include? "attendance"
13
+ @id = tracking_hash["id"]
14
+ @username = tracking_hash["username"]
15
+ @created_at = tracking_hash["created_at"]
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ module Songkickr
2
+ # A class to represent the result hash of a Tracking search.
3
+ class TrackingResult
4
+ attr_accessor :results
5
+
6
+ # Takes the result hash directly and parses out the page and total entries and finally passes off to the parse_results method to get the results.
7
+ def initialize(result_hash = {})
8
+ results_page = result_hash["resultsPage"]
9
+
10
+ if results_page
11
+ @results = parse_results results_page["results"]
12
+ end
13
+ end
14
+
15
+ protected
16
+
17
+ # Take the results hash directly and parse the tracking into Tracking objects.
18
+ #
19
+ # Returns an array of Trackings.
20
+ def parse_results(results = {})
21
+ Songkickr::Tracking.new(results["tracking"])
22
+ end
23
+ end
24
+ end
@@ -1,12 +1,20 @@
1
1
  module Songkickr
2
2
  class Venue
3
- attr_accessor :display_name, :id, :lat, :lng
4
-
3
+ attr_accessor :capacity, :display_name, :description, :id, :lat, :lng, :phone, :street, :uri, :website, :zip
4
+
5
5
  def initialize(venue_hash)
6
+ @capacity = venue_hash["capacity"]
6
7
  @display_name = venue_hash["displayName"]
8
+ @description = venue_hash["description"]
7
9
  @id = venue_hash["id"]
8
10
  @lat = venue_hash["lat"]
9
11
  @lng = venue_hash["lng"]
12
+ @metro_area = Songkickr::MetroArea.new venue_hash["metroArea"] if venue_hash.include?("metroArea")
13
+ @phone = venue_hash["phone"]
14
+ @street = venue_hash["street"]
15
+ @uri = venue_hash["uri"]
16
+ @website = venue_hash["website"]
17
+ @zip = venue_hash["zip"]
10
18
  end
11
19
  end
12
20
  end
@@ -0,0 +1,32 @@
1
+ module Songkickr
2
+ # A class to represent the result hash of a Venue search.
3
+
4
+ # {"resultsPage":
5
+ # {"results":
6
+ # {"venue":
7
+ # [{"id":17522,
8
+ # "displayName":"O2 Academy Brixton",
9
+ # "city":{"uri":"http://www.songkick.com/metro_areas/24426-uk-london",
10
+ # "displayName":"London","country":{"displayName":"UK"},"id":24426},
11
+ # "metroArea":{"uri":"http://www.songkick.com/metro_areas/24426-uk-london",
12
+ # "displayName":"London","country":{"displayName":"UK"},"id":24426},
13
+ # "uri":"http://www.songkick.com/venues/17522-o2-academy-brixton",
14
+ # "street":"211 Stockwell Road", "zip":"SW9 9SL",
15
+ # "lat":51.4651268, "lng":-0.115187,
16
+ # "phone":"020 7771 3000",
17
+ # "website":"http://www.brixton-academy.co.uk",
18
+ # "capacity":4921,
19
+ # "description": "Brixton Academy is an award winning music venue situated in the heart of Brixton, South London."
20
+ # } ]
21
+ # },"totalEntries":1,"perPage":50,"page":1,"status":"ok"}}
22
+
23
+ class VenueResult < ResultSet
24
+ # Takes the result hash directly and parses out the page and total entries and finally passes off to the parse_results method to get the results.
25
+ def initialize(result_hash = {})
26
+ @result_type = "Venue"
27
+ @result_key_string = "venue"
28
+
29
+ super
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Songkickr
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/songkickr.rb CHANGED
@@ -1,21 +1,28 @@
1
- require 'rubygems'
2
- gem 'httparty'
3
1
  require 'httparty'
4
2
 
5
- require "songkickr/version"
6
- dir = File.dirname(__FILE__)
7
- require dir + '/songkickr/performance'
8
- require dir + '/songkickr/artist'
9
- require dir + '/songkickr/location'
10
- require dir + '/songkickr/location_result'
11
- require dir + '/songkickr/venue'
12
- require dir + '/songkickr/event'
13
- require dir + '/songkickr/setlist_item'
14
- require dir + '/songkickr/setlist'
15
- require dir + '/songkickr/event_result'
16
- require dir + '/songkickr/concert_setlist_result'
17
- require dir + '/songkickr/remote'
18
- require dir + '/songkickr/artist_result'
3
+ require 'songkickr/remote'
4
+
5
+ require 'songkickr/performance'
6
+ require 'songkickr/artist'
7
+ require 'songkickr/location'
8
+ require 'songkickr/venue'
9
+ require 'songkickr/event'
10
+ require 'songkickr/setlist_item'
11
+ require 'songkickr/setlist'
12
+ require 'songkickr/metro_area'
13
+ require 'songkickr/tracking'
14
+ require 'songkickr/calendar_entry'
15
+
16
+ require 'songkickr/result_set'
17
+ require 'songkickr/artist_result'
18
+ require 'songkickr/calendar_result'
19
+ require 'songkickr/concert_setlist_result'
20
+ require 'songkickr/event_result'
21
+ require 'songkickr/location_result'
22
+ require 'songkickr/metro_area_result'
23
+ require 'songkickr/tracking_result'
24
+ require 'songkickr/venue_result'
25
+
19
26
 
20
27
  class APIKeyNotSet < StandardError;
21
28
  # Warns of missing API key
@@ -61,7 +68,7 @@ module Songkickr
61
68
  # Set the API key. In the event you need to set the API key after initializing the the remote.
62
69
  # === Parameters
63
70
  #
64
- # * +api_key+ - A developer key from Songkick. Get an API key for your app from http://developer.songkick.com/
71
+ # * +api_key+ - A developer key from Songkick. Get an API key for your app from http://www.songkick.com/developer/
65
72
  def self.api_key=(api_key)
66
73
  @api_key = api_key
67
74
  end
data/songkickr.gemspec CHANGED
@@ -4,59 +4,32 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'songkickr/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
- gem.name = "songkickr"
8
- gem.version = Songkickr::VERSION
9
- gem.authors = ["Jared Mehle"]
10
- gem.email = ["jrmehle@gmail.com"]
7
+ gem.name = "songkickr"
8
+ gem.version = Songkickr::VERSION
9
+ gem.authors = ["Jared Mehle"]
10
+ gem.email = ["jrmehle@gmail.com"]
11
11
  gem.description = "A Ruby wrapper around the Songkick API. Visit www.songkick.com/developer for documentation on the Songkick API. "
12
- gem.summary = "A Ruby wrapper around the Songkick API."
13
- gem.homepage = "http://github.com/jrmehle/songkickr"
12
+ gem.summary = "A Ruby wrapper around the Songkick API."
13
+ gem.homepage = "http://github.com/jrmehle/songkickr"
14
+
15
+ gem.add_development_dependency 'shoulda', ">= 2.11.0"
16
+ gem.add_development_dependency 'fakeweb', ">= 1.3.0"
17
+ gem.add_development_dependency 'rdoc', "~> 4.0.1"
18
+ gem.add_development_dependency 'crack', ">= 0"
19
+ gem.add_development_dependency 'rake', "~> 10.0.0"
20
+ gem.add_development_dependency 'test-unit', "~> 2.5.5"
21
+ gem.add_development_dependency 'vcr', "~> 2.5.0"
22
+ gem.add_development_dependency 'pry'
23
+
24
+ gem.add_dependency 'httparty', '~> 0.8.3'
14
25
 
15
26
  gem.files = `git ls-files`.split($/)
16
27
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
28
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
29
  gem.require_paths = ["lib"]
19
30
 
20
- gem.rubygems_version = "1.8.25"
21
- gem.required_rubygems_version = Gem::Requirement.new(">= 0") if gem.respond_to? :required_rubygems_version=
22
- gem.date = "2013-02-16"
23
- gem.executables = ["autospec", "convert_to_should_syntax", "guard", "htmldiff", "httparty", "ldiff", "rake", "rake2thor", "rg", "ri", "rspec", "thor"]
24
31
  gem.extra_rdoc_files = [
25
32
  "LICENSE",
26
33
  "README.rdoc"
27
34
  ]
28
-
29
- if gem.respond_to? :specification_version then
30
- gem.specification_version = 3
31
-
32
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
33
- gem.add_development_dependency(%q<shoulda>, [">= 2.11.0"])
34
- gem.add_development_dependency(%q<fakeweb>, [">= 1.3.0"])
35
- gem.add_development_dependency(%q<redgreen>, [">= 1.2.2"])
36
- gem.add_development_dependency(%q<crack>, [">= 0"])
37
- gem.add_development_dependency(%q<httparty>, [">= 0"])
38
- gem.add_development_dependency(%q<test-unit>, [">= 0"])
39
- gem.add_development_dependency(%q<rake>, [">= 0"])
40
- gem.add_development_dependency(%q<vcr>, [">= 0"])
41
- else
42
- gem.add_dependency(%q<shoulda>, [">= 2.11.0"])
43
- gem.add_dependency(%q<fakeweb>, [">= 1.3.0"])
44
- gem.add_dependency(%q<redgreen>, [">= 1.2.2"])
45
- gem.add_dependency(%q<crack>, [">= 0"])
46
- gem.add_dependency(%q<httparty>, [">= 0"])
47
- gem.add_dependency(%q<test-unit>, [">= 0"])
48
- gem.add_dependency(%q<rake>, [">= 0"])
49
- gem.add_dependency(%q<vcr>, [">= 0"])
50
- end
51
- else
52
- gem.add_dependency(%q<crack>, [">= 0"])
53
- gem.add_dependency(%q<httparty>, [">= 0"])
54
- gem.add_dependency(%q<test-unit>, [">= 0"])
55
- gem.add_dependency(%q<rake>, [">= 0"])
56
- gem.add_dependency(%q<jeweler>, [">= 0"])
57
- gem.add_dependency(%q<vcr>, [">= 0"])
58
- gem.add_dependency(%q<shoulda>, [">= 2.11.0"])
59
- gem.add_dependency(%q<fakeweb>, [">= 1.3.0"])
60
- gem.add_dependency(%q<redgreen>, [">= 1.2.2"])
61
- end
62
35
  end