intown 0.1.2 → 0.1.3

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.
data/lib/intown/artist.rb CHANGED
@@ -3,7 +3,7 @@ module Intown
3
3
  class << self
4
4
  def fetch(params)
5
5
  identifier = artist_identifier(params)
6
- response = get("/artists/#{URI.encode(identifier)}", options)
6
+ response = get("/artists/#{identifier}", options)
7
7
  process_response(response)
8
8
  end
9
9
  end
data/lib/intown/client.rb CHANGED
@@ -22,6 +22,7 @@ module Intown
22
22
  case response.code
23
23
  when 500 then raise Intown::InvalidRequestError, response.body
24
24
  when 404 then process_not_found(response)
25
+ when 406 then process_not_acceptable(response)
25
26
  else
26
27
  json_response = JSON.parse(response.body)
27
28
 
@@ -34,6 +35,10 @@ module Intown
34
35
  end
35
36
  end
36
37
  end
38
+
39
+ def process_not_acceptable(response)
40
+ raise Intown::InvalidRequestError, "Bandsintown rejected your request. Please check your input parameters."
41
+ end
37
42
 
38
43
  def process_not_found(response)
39
44
  json = JSON.parse(response.body)
@@ -46,9 +51,14 @@ module Intown
46
51
  def artist_identifier(params)
47
52
  return musicbrainz_identifier(params[:mbid]) if params[:mbid]
48
53
  return facebook_identifier(params[:fbid]) if params[:fbid]
49
- return params[:name] if params[:name]
54
+ return encode_name(params[:name]) if params[:name]
50
55
  raise ArgumentError, "params must contain one of mbid, fbid, or name"
51
56
  end
57
+
58
+ def encode_name(name)
59
+ # periods & slashes cause the API to blow up
60
+ URI.encode(name).gsub(/\./, "%2E").gsub(/\//, "%2F")
61
+ end
52
62
 
53
63
  def musicbrainz_identifier(mbid)
54
64
  "mbid_#{mbid}"
data/lib/intown/event.rb CHANGED
@@ -4,7 +4,7 @@ module Intown
4
4
  def list(params)
5
5
  identifier = artist_identifier(params)
6
6
  event_params = options.merge(date_options(params))
7
- url = "/artists/#{URI.encode(identifier)}/events"
7
+ url = "/artists/#{identifier}/events"
8
8
  response = get(url, event_params)
9
9
  process_response(response)
10
10
  end
@@ -1,3 +1,3 @@
1
1
  module Intown
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -1,44 +1,79 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Intown::Artist do
4
- let(:response) {
5
- stub(:code => 200,
6
- :body => '{
7
- "upcoming_events_count":0,
8
- "thumb_url":"http:\/\/www.bandsintown.com\/Nirvana\/photo\/small.jpg",
9
- "name": "Nirvana",
10
- "image_url":"http:\/\/www.bandsintown.com\/Nirvana\/photo\/medium.jpg",
11
- "mbid":"ea5883b7-68ce-48b3-b115-61746ea53b8c",
12
- "facebook_tour_dates_url":"http:\/\/bnds.in\/zTPiUu"
13
- }'
14
- )
15
- }
4
+ describe "valid response" do
5
+ let(:response) {
6
+ stub(:code => 200,
7
+ :body => '{
8
+ "upcoming_events_count":0,
9
+ "thumb_url":"http:\/\/www.bandsintown.com\/Nirvana\/photo\/small.jpg",
10
+ "name": "Nirvana",
11
+ "image_url":"http:\/\/www.bandsintown.com\/Nirvana\/photo\/medium.jpg",
12
+ "mbid":"ea5883b7-68ce-48b3-b115-61746ea53b8c",
13
+ "facebook_tour_dates_url":"http:\/\/bnds.in\/zTPiUu"
14
+ }'
15
+ )
16
+ }
16
17
 
17
- context "searching by name" do
18
- it "should put the name in the artist url" do
19
- Intown::Artist.should_receive(:get).with(/\/artists\/Nirvana/, anything).and_return(response)
20
- Intown::Artist.fetch(:name => "Nirvana")
18
+ context "searching by name" do
19
+ it "should put the name in the artist url" do
20
+ Intown::Artist.should_receive(:get).with(/\/artists\/Nirvana/, anything).and_return(response)
21
+ Intown::Artist.fetch(:name => "Nirvana")
22
+ end
21
23
  end
22
- end
23
24
 
24
- context "searching by name with spaces" do
25
- it "should url encode the spaces" do
26
- Intown::Artist.should_receive(:get).with(/\/artists\/Foo%20Fighters/, anything).and_return(response)
27
- Intown::Artist.fetch(:name => "Foo Fighters")
25
+ context "searching by name with spaces" do
26
+ it "should url encode the spaces" do
27
+ Intown::Artist.should_receive(:get).with(/\/artists\/Foo%20Fighters/, anything).and_return(response)
28
+ Intown::Artist.fetch(:name => "Foo Fighters")
29
+ end
30
+ end
31
+
32
+ context "searching by name with periods in the name" do
33
+ it "should URL encode the period" do
34
+ Intown::Artist.should_receive(:get).with(/\/artists\/Jr%2E%20Doc/, anything).and_return(response)
35
+ Intown::Artist.fetch(:name => "Jr. Doc")
36
+ end
37
+ end
38
+
39
+ context "searching by name with a /" do
40
+ it "should encode the slash" do
41
+ Intown::Artist.should_receive(:get).with(/\/artists\/Is%2FIs/, anything).and_return(response)
42
+ Intown::Artist.fetch(:name => "Is/Is")
43
+ end
28
44
  end
29
- end
30
45
 
31
- context "searching by musicbrainz id" do
32
- it "should format the musicbrainz id in the url" do
33
- Intown::Artist.should_receive(:get).with(/\/artists\/mbid_1234567890abcd/, anything).and_return(response)
34
- Intown::Artist.fetch(:mbid => "1234567890abcd")
46
+ context "searching by musicbrainz id" do
47
+ it "should format the musicbrainz id in the url" do
48
+ Intown::Artist.should_receive(:get).with(/\/artists\/mbid_1234567890abcd/, anything).and_return(response)
49
+ Intown::Artist.fetch(:mbid => "1234567890abcd")
50
+ end
35
51
  end
36
- end
37
52
 
38
- context "searching with invalid params" do
39
- it "should raise an argument error" do
40
- expect { Intown::Artist.fetch(:foo_bar => "baz") }.to raise_error ArgumentError
53
+ context "searching with invalid params" do
54
+ it "should raise an argument error" do
55
+ expect { Intown::Artist.fetch(:foo_bar => "baz") }.to raise_error ArgumentError
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "invalid response" do
61
+ let(:status_code) { nil }
62
+ let(:response_body) { nil }
63
+ let(:response) {
64
+ stub(:body => response_body,
65
+ :code => status_code)
66
+ }
67
+ before do
68
+ Intown::Artist.should_receive(:get).and_return(response)
69
+ end
70
+ context "406 Not Acceptable" do
71
+ let(:status_code) { 406 }
72
+ it "should raise an invalid request error" do
73
+ expect { Intown::Artist.fetch(:name => "Jr. Doc") }.to raise_error Intown::InvalidRequestError
74
+ end
41
75
  end
76
+
42
77
  end
43
78
 
44
79
  end
File without changes
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: intown
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.2
5
+ version: 0.1.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ben Scheirman
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-22 00:00:00.000000000 Z
12
+ date: 2013-03-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  prerelease: false
@@ -138,7 +138,7 @@ files:
138
138
  - spec/intown/artist_spec.rb
139
139
  - spec/intown/configuration_spec.rb
140
140
  - spec/intown/event_spec.rb
141
- - spec/intown/tourbus_spec.rb
141
+ - spec/intown/intown_spec.rb
142
142
  - spec/spec_helper.rb
143
143
  homepage: https://github.com/subdigital/intown
144
144
  licenses: []
@@ -175,6 +175,6 @@ test_files:
175
175
  - spec/intown/artist_spec.rb
176
176
  - spec/intown/configuration_spec.rb
177
177
  - spec/intown/event_spec.rb
178
- - spec/intown/tourbus_spec.rb
178
+ - spec/intown/intown_spec.rb
179
179
  - spec/spec_helper.rb
180
180
  has_rdoc: