embiggen 0.1.0 → 0.1.1

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: 6af561209a387ec502e579b6917f6bf3984fd7c3
4
- data.tar.gz: 8a53fba0f9b2879df685ddfc8e82647b6c51411b
3
+ metadata.gz: 47bfb5ace689946c57eb0595e0aa5c9992a6fe70
4
+ data.tar.gz: 7a1d1441cf49e8b785c9c63ed9f07899d08d0283
5
5
  SHA512:
6
- metadata.gz: ae5a3f54a1c89cf969d8a0d292c23163becc1a31ab8c45bb218b7b93f998a9b838d0e457dd37bd03d05cd4954becbd7580d37ea95894e157d472c117e1ca9462
7
- data.tar.gz: c858db7c641918040855a9ede16b3c3ccee88840f860667860172d50629e81324d0c2356be4f787ace159e129987cf6d8b7c12ccfd5c6c382b6794924ecc3d86
6
+ metadata.gz: ac5abe95ea7a88f6e93d8815b91c963362fe671fbb1334d4b8e104d06bac61cf846ce2fb7ee9bdf6a73a8d9b33e1c26a417b63ef4d6d228097aa9ee8136aeb64
7
+ data.tar.gz: 40a02c961adffd16f0f06b4d0851817ba8fc9f21ed08f3383831118e2ee1a101a91fd574e9b60751e99452b9000be6fd2ac81b3eeacb2d4d34108f97c2f444a7
data/README.md CHANGED
@@ -2,7 +2,23 @@
2
2
 
3
3
  A Ruby library to expand shortened URLs.
4
4
 
5
+ **Current version:** 0.1.1
6
+ **Supported Ruby versions:** 1.8.7, 1.9.2, 1.9.3, 2.0, 2.1, 2.2
7
+
8
+ ## Installation
9
+
10
+ ```
11
+ gem install embiggen -v '~> 0.1'
12
+ ```
13
+
14
+ Or, in your `Gemfile`:
15
+
16
+ ```ruby
17
+ gem 'embiggen', '~> 0.1'
18
+ ```
19
+
5
20
  ## Usage
21
+
6
22
  ```ruby
7
23
  require 'embiggen'
8
24
 
@@ -45,9 +61,125 @@ Embiggen.configure do |config|
45
61
  end
46
62
  ```
47
63
 
64
+ ## Shorteners
65
+
66
+ Embiggen ships with a default list of URL shortening service domains (c.f.
67
+ [Acknowledgements](#acknowledgements)) but as it is likely to be outdated and
68
+ incomplete, you are strongly encouraged to supply your own via
69
+ `Embiggen.configure`:
70
+
71
+ ```ruby
72
+ Embiggen.configure do |config|
73
+ config.shorteners = %w(myshorten.er anoth.er)
74
+ # or load from a file...
75
+ config.shorteners = File.readlines('shorteners.txt').map(&:chomp)
76
+ end
77
+ ```
78
+
79
+ ## API Documentation
80
+
81
+ ### `Embiggen::URI`
82
+
83
+ ```ruby
84
+ uri = Embiggen::URI('https://youtu.be/dQw4w9WgXcQ')
85
+ uri = Embiggen::URI(URI('https://youtu.be/dQw4w9WgXcQ'))
86
+ ```
87
+
88
+ Return a new `Embiggen::URI` instance which can be expanded and asked whether
89
+ it is shortened or not.
90
+
91
+ Takes instances of [Ruby's
92
+ `URI`][URI] or
93
+ anything with a string representation (through `to_s`) that can be parsed as a
94
+ valid URI.
95
+
96
+ ### `Embiggen::URI#expand`
97
+
98
+ ```ruby
99
+ Embiggen::URI('https://youtu.be/dQw4w9WgXcQ').expand
100
+ #=> #<URI:HTTPS https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtu.be>
101
+
102
+ Embiggen::URI('http://www.altmetric.com/').expand
103
+ #=> #<URI::HTTP http://www.altmetric.com/>
104
+
105
+ Embiggen::URI('https://youtu.be/dQw4w9WgXcQ').expand(:timeout => 5)
106
+ Embiggen::URI('https://youtu.be/dQw4w9WgXcQ').expand(:redirects => 2)
107
+ ```
108
+
109
+ Expand the given URI, returning the full version as a [`URI`][URI] if it is
110
+ shortened or the original if it cannot be expanded. Will not raise any
111
+ exceptions thrown during expansion (e.g. timeouts, network errors, invalid
112
+ return URIs); see `expand!` for an alternative.
113
+
114
+ Takes an optional hash of options for expansion:
115
+
116
+ * `:timeout`: overrides the default timeout for following redirects;
117
+ * `:redirects`: overrides the default number of redirects to follow.
118
+
119
+ Uses a whitelist of shortening domains (as configured through
120
+ `Embiggen.configure`) to determine whether a URI is shortened or not. Be sure
121
+ to [configure this to suit your needs](#shorteners).
122
+
123
+ ### `Embiggen::URI#expand!`
124
+
125
+ ```ruby
126
+ Embiggen::URI('https://youtu.be/dQw4w9WgXcQ').expand!
127
+ #=> #<URI:HTTPS https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtu.be>
128
+
129
+ Embiggen::URI('http://bit.ly/some-bad-link').expand!
130
+ # TooManyRedirects: http://bit.ly/some-bad-link redirected too many times
131
+ ```
132
+
133
+ Expand the given URI as with `Embiggen::URI#expand` but don't suppress any
134
+ exceptions raised during expansion (including timeouts, network errors,
135
+ invalid return URIs, too many redirects or no redirects whatsoever).
136
+
137
+ Takes the same options as `Embiggen::URI#expand`.
138
+
139
+ Two Embiggen-specific errors (both inheriting from `Embiggen::Error`) can be
140
+ raised:
141
+
142
+ * `Embiggen::TooManyRedirects`: when a URI redirects more than the configured
143
+ number of times;
144
+ * `Embiggen::BadShortenedURI`: when a URI appears to be shortened but
145
+ following it does not result in a redirect.
146
+
147
+ ### `Embiggen::URI#shortened?`
148
+
149
+ ```ruby
150
+ Embiggen::URI('https://youtu.be/dQw4w9WgXcQ').shortened?
151
+ #=> true
152
+
153
+ Embiggen::URI('http://www.altmetric.com').shortened?
154
+ #=> false
155
+ ```
156
+
157
+ Return true if the URI appears to be shortened. Uses the configured whitelist
158
+ of shorteners, c.f. [Shorteners](#shorteners).
159
+
160
+ ### `Embiggen.configure`
161
+
162
+ ```ruby
163
+ Embiggen.configure do |config|
164
+ config.timeout = 5
165
+ config.redirects = 2
166
+ config.shorteners += %w(myshorten.er anoth.er)
167
+ end
168
+ ```
169
+
170
+ Override the following settings:
171
+
172
+ * `timeout`: the default timeout for following any redirects (can be
173
+ overridden by passing options to `Embiggen::URI#expand` or
174
+ `Embiggen::URI#expand!`);
175
+ * `redirects`: the default number of redirects to follow (can be overridden by
176
+ passing options to `Embiggen::URI#expand` or `Embiggen::URI#expand!`);
177
+ * `shorteners`: the list of domains of shortening services, c.f.
178
+ [Shorteners](#shorteners).
179
+
48
180
  ## Acknowledgements
49
181
 
50
- * The list of shorteners comes from [LongURL.org's curated
182
+ * The default list of shorteners comes from [LongURL.org's curated
51
183
  list](http://longurl.org/services).
52
184
 
53
185
  ## License
@@ -55,3 +187,5 @@ end
55
187
  Copyright © 2015 Altmetric LLP
56
188
 
57
189
  Distributed under the MIT License.
190
+
191
+ [URI]: http://ruby-doc.org/stdlib/libdoc/uri/rdoc/URI.html
data/lib/embiggen/uri.rb CHANGED
@@ -13,7 +13,7 @@ module Embiggen
13
13
  expand!(request_options)
14
14
  rescue TooManyRedirects => error
15
15
  error.uri
16
- rescue Error, ::Timeout::Error, ::Errno::ECONNRESET
16
+ rescue StandardError, ::Timeout::Error
17
17
  uri
18
18
  end
19
19
 
@@ -63,6 +63,20 @@ module Embiggen
63
63
  expect(uri.expand).to eq(URI('http://bit.ly/bad'))
64
64
  end
65
65
 
66
+ it 'does not expand URIs whose host is unreachable' do
67
+ stub_request(:head, 'http://bit.ly/bad').to_raise(Errno::EHOSTUNREACH)
68
+ uri = described_class.new(URI('http://bit.ly/bad'))
69
+
70
+ expect(uri.expand).to eq(URI('http://bit.ly/bad'))
71
+ end
72
+
73
+ it 'does not expand URIs whose name or service is not known' do
74
+ stub_request(:head, 'http://bit.ly/bad').to_raise(SocketError)
75
+ uri = described_class.new(URI('http://bit.ly/bad'))
76
+
77
+ expect(uri.expand).to eq(URI('http://bit.ly/bad'))
78
+ end
79
+
66
80
  it 'takes an optional timeout' do
67
81
  stub_request(:head, 'http://bit.ly/bad').to_timeout
68
82
  uri = described_class.new(URI('http://bit.ly/bad'))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embiggen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Mucur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2015-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec