short 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/short CHANGED
@@ -27,14 +27,23 @@ def start_web
27
27
  end
28
28
 
29
29
  def shorten(url)
30
- puts Shortener.shorten(url).short_url
30
+ begin
31
+ puts Shortener.shorten(url).short_url
32
+ rescue Shortener::NetworkException => boom
33
+ puts boom.message
34
+ usage
35
+ end
31
36
  end
32
37
 
33
38
  def fetch(url)
34
39
  if url =~ /http:/
35
40
  url = url[-6..-1]
36
41
  end
37
- fetched = Shortener.fetch(url)
42
+ begin
43
+ fetched = Shortener.fetch(url)
44
+ rescue Shortener::NetworkException => boom
45
+ puts boom.message
46
+ end
38
47
  unless fetched['success'] == false
39
48
  puts <<-EOF
40
49
  short => #{fetched['shortened']}
@@ -51,12 +60,20 @@ def fetch(url)
51
60
  end
52
61
 
53
62
  def delete(short)
54
- del = Shortener.delete(short)
63
+ begin
64
+ del = Shortener.delete(short)
65
+ rescue Shortener::NetworkException => boom
66
+ puts boom.message
67
+ end
55
68
  puts "#{short} deleted" if del['success']
56
69
  end
57
70
 
58
71
  def show_index
59
- index = Shortener.index
72
+ begin
73
+ index = Shortener.index
74
+ rescue Shortener::NetworkException => boom
75
+ puts boom.message
76
+ end
60
77
  short_summary = index.map do |v|
61
78
  url = v['url'].length > 38 ? "#{v['url'][0..25]}...#{v['url'][-10..-1]}" : "#{v['url']}"
62
79
  "#{v['shortened']} : #{url} #{v['type'].nil? ? '' : ('type: ' + v['type'])}"
@@ -67,8 +67,9 @@ class Shortener
67
67
 
68
68
  def set_or_fetch_url(params)
69
69
  bad! 'Missing url.' unless url = params['url']
70
+ bad! 'Bad URL' unless params['url'] =~ /(^http|^www)/
70
71
  url = "http://#{url}" unless /^http/i =~ url
71
- bad! 'Malformed url.' unless (url = URI.parse(url)) && /^http/ =~ url.scheme
72
+ bad! 'Bad URL' unless (url = URI.parse(url)) && /^http/ =~ url.scheme
72
73
 
73
74
  %w(max-clicks expire desired-short allow-override).each do |k|
74
75
  params[k] = false if params[k].nil? || params[k].empty?
@@ -90,7 +91,7 @@ class Shortener
90
91
  hash_key = "data:#{sha}:#{key}"
91
92
  url = "https://s3.amazonaws.com/#{$conf.s3_bucket}/#{$conf.s3_key_prefix}/#{fname}"
92
93
  ext = File.extname(fname)[1..-1]
93
- data = {'url' => url, 's3' => true, 'shortened' => key,
94
+ data = {'url' => url, 's3' => true, 'shortened' => key,
94
95
  'extension' => ext, 'set-count' => 1}
95
96
  data = params.merge(data)
96
97
 
@@ -47,12 +47,14 @@ class Shortener
47
47
  # build a request based on configurations
48
48
  def request(type, end_point, conf = nil, args = nil)
49
49
  config = conf || Shortener::Configuration.current
50
- case type
50
+ response = case type
51
51
  when :post
52
52
  Net::HTTP.post_form(config.uri_for(end_point), args)
53
53
  when :get
54
54
  Net::HTTP.get_response(config.uri_for(end_point, args))
55
55
  end
56
+ raise NetworkException.new(response.body) if response.is_a?(Net::HTTPPreconditionFailed)
57
+ response
56
58
  end
57
59
 
58
60
  end # => ClassMethods
@@ -1,6 +1,6 @@
1
1
 
2
2
  class Shortener
3
3
 
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
 
6
6
  end
data/lib/shortener.rb CHANGED
@@ -9,4 +9,6 @@ require File.join(dir, 'shortener', 'short')
9
9
 
10
10
  class Shortener
11
11
  class << self; include Shortener::Short::ClassMethods; end
12
+
13
+ class NetworkException < RuntimeError;end
12
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: short
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70301329586160 !ruby/object:Gem::Requirement
16
+ requirement: &70230588057420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70301329586160
24
+ version_requirements: *70230588057420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redis-namespace
27
- requirement: &70301329585240 !ruby/object:Gem::Requirement
27
+ requirement: &70230592657600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70301329585240
35
+ version_requirements: *70230592657600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: haml
38
- requirement: &70301329583820 !ruby/object:Gem::Requirement
38
+ requirement: &70230592656820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70301329583820
46
+ version_requirements: *70230592656820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: turn
49
- requirement: &70301329582280 !ruby/object:Gem::Requirement
49
+ requirement: &70230592654100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70301329582280
57
+ version_requirements: *70230592654100
58
58
  description: A (hopefully) easy and handy deployable APIable way to shorten links.
59
59
  email:
60
60
  - jake@jakewilkins.com