em-shorturl 0.1.0.pre → 0.1.0

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.
@@ -5,13 +5,32 @@ module EventMachine
5
5
  module ShortURL
6
6
 
7
7
  ##
8
- # Driver for bitly.com URL Shortening service.
8
+ # Driver for bitly.com URL Shortening service. Bitly requires API users
9
+ # to have an account. This can be provided to the driver as either a
10
+ # pre-obtained access token or as a username and password pair
11
+ # (optionally with a client id and secret). If a username and password
12
+ # are provided instead of an access token, login is differed until
13
+ # needed (first call to +shorten+) or can be explicitly called via the
14
+ # +login+ function.
9
15
 
10
16
  class Bitly
11
17
  include EventMachine::Deferrable
12
18
  API_OAUTH_URL = 'https://api-ssl.bitly.com/oauth/access_token'
13
19
  API_SHORTEN_URL = 'https://api-ssl.bitly.com/v3/shorten'
14
20
 
21
+
22
+ ##
23
+ # Initialize the driver with account details. Despite being
24
+ # required by bitly, the driver does not currently verify that
25
+ # proper account details are given.
26
+ #
27
+ # +account+ takes the following options:
28
+ # :client_id The client ID of the registered application
29
+ # :client_secret The secret for the client id
30
+ # :username A username to use for basic authentication
31
+ # :password The password to use for basic authentication
32
+ # :token A previously obtained access token to use
33
+
15
34
  def initialize(account={})
16
35
  @client_id = account[:client_id]
17
36
  @client_secret = account[:client_secret]
@@ -21,6 +40,11 @@ module EventMachine
21
40
  @deferrable_args = [self]
22
41
  end
23
42
 
43
+
44
+ ##
45
+ # Shortens the given URL. If no access token is known, will call
46
+ # the login function and upon success will call shorten again.
47
+
24
48
  def shorten(url)
25
49
  if @access_token.nil?
26
50
  login { shorten(url) }
@@ -34,6 +58,12 @@ module EventMachine
34
58
  self
35
59
  end
36
60
 
61
+
62
+ ##
63
+ # Uses the given username and password to obtain an access token
64
+ # from bitly. If authentication fails, sets the driver's deferrable
65
+ # status to failed.
66
+
37
67
  def login
38
68
  params = {
39
69
  :head => { 'authorization' => [@username, @password] },
@@ -80,6 +80,14 @@ module EventMachine
80
80
  def on_success(http)
81
81
  response = nil
82
82
 
83
+ # Handle HTTP Status other than 200
84
+ if http.response_header.status != 200
85
+ error = http.response_header.http_reason
86
+ fail(error, *@deferrable_args)
87
+ return
88
+ end
89
+
90
+
83
91
  # Handle JSON Failure
84
92
  begin
85
93
  response = JSON.parse(http.response)
@@ -5,7 +5,7 @@ module EventMachine
5
5
  class TinyURL
6
6
  include EventMachine::Deferrable
7
7
 
8
- # TinyURL API
8
+ # TinyURL API URL
9
9
  API_URL = 'http://tinyurl.com/api-create.php'
10
10
 
11
11
 
@@ -18,6 +18,10 @@ module EventMachine
18
18
  end
19
19
 
20
20
 
21
+ ##
22
+ # Shortens the given URL, returning self. The shortened URL is
23
+ # passed to the success callback as the first parameter.
24
+
21
25
  def shorten(url)
22
26
  params = { :query => { :url => url } }
23
27
  request = EM::HttpRequest.new(API_URL).post(params)
@@ -25,6 +29,7 @@ module EventMachine
25
29
  request.errback(&method(:on_error))
26
30
  self
27
31
  end
32
+
28
33
  private
29
34
 
30
35
 
@@ -33,8 +38,12 @@ module EventMachine
33
38
  # just be the plaintest link.
34
39
 
35
40
  def on_success(http)
36
- short_url = http.response
37
- succeed(short_url, *@deferrable_args)
41
+ if http.response_header.status != 200
42
+ fail(http.response_header.http_reason, *@deferrable_args)
43
+ else
44
+ short_url = http.response
45
+ succeed(short_url, *@deferrable_args)
46
+ end
38
47
  end
39
48
 
40
49
 
@@ -1,5 +1,5 @@
1
1
  module EventMachine
2
2
  module ShortURL
3
- VERSION = '0.1.0.pre'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-shorturl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre
5
- prerelease: 6
4
+ version: 0.1.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Nik Johnson
@@ -59,9 +59,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
59
59
  required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  none: false
61
61
  requirements:
62
- - - ! '>'
62
+ - - ! '>='
63
63
  - !ruby/object:Gem::Version
64
- version: 1.3.1
64
+ version: '0'
65
65
  requirements: []
66
66
  rubyforge_project:
67
67
  rubygems_version: 1.8.24