shortener 0.7.1 → 0.7.2

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: 7dcaac83914269aad38d35834f0a8550ce8ccb51
4
- data.tar.gz: 31f10e8bd149d9a9ed5378e136571e6a0d5ce2e8
3
+ metadata.gz: f83263f62775a48c270b4d54188ad42b61f33180
4
+ data.tar.gz: 1a942c5240508df45fd79872054c2378af3fdf8f
5
5
  SHA512:
6
- metadata.gz: 6e87227bf0b46869caec0e518631104d93f245d79746d25606ae4790ee9f912ebdf5d1bb691c132be918a0736cfdf568137c8176ffe5ba3c056c122d3260411f
7
- data.tar.gz: e1626bae89579ca2928e24d6f093432220464b34fb42beab57852f739200416576789216f82fac1b17ab0b0710ca10027029a5d6495262a7a2aa4184bd1cca55
6
+ metadata.gz: 327d337f3a099622a910aa5b840ccff3dc397968452879fa2e061d54f2e969611da8f1a0a5c8ea557b58ad7dd32fd1e6f726de97a5d64c4067f7f067a5dea2db
7
+ data.tar.gz: e4ab931bd972959a8a95eaa8cddfe973a00b57ed4cb5712c6e03c7e640fcd9f1d840b8c7ca6026b4c84175bb9b8b545b74aa1f91ff81e4686892b28c404f3ee1
@@ -80,6 +80,8 @@ After you install Shortener run the generator:
80
80
 
81
81
  This generator will create a migration to create the shortened_urls table where your shortened URLs will be stored.
82
82
 
83
+ *Note:* The default length of the url field in the generated migration is 2083. This is because MySQL requires fixed length indicies and browsers have a defacto limit on URL length. This may not be right for you or your database. The discussion can be seen here https://github.com/jpmcgrath/shortener/pull/98
84
+
83
85
  Then add to your routes:
84
86
 
85
87
  get '/:id' => "shortener/shortened_urls#show"
@@ -183,6 +185,21 @@ your shortener configuration:
183
185
 
184
186
  Shortener.ignore_robots = true
185
187
 
188
+ === Mounting on a Subdomain
189
+
190
+ If you want to constrain the shortener route to a subdomain, the following config will
191
+ prevent the subdomain parameter from leaking in to shortened URLs if it matches the configured subdomain.
192
+
193
+ Within config/initializers/shortener.rb
194
+
195
+ Shortener.subdomain = 's'
196
+
197
+ Within config/routes.rb
198
+
199
+ constraints subdomain: 's' do
200
+ get '/:id' => "shortener/shortened_urls#show"
201
+ end
202
+
186
203
  === URL Parameters
187
204
 
188
205
  Parameters are passed though from the shortened url, to the destination URL. If the destination
@@ -190,7 +207,7 @@ URL has the same parameters as the destination URL, the parameters on the shorte
190
207
  precedence over those on the destination URL.
191
208
 
192
209
  For example, if we have an orginal URL of:
193
- > http://destination.com?test=yes&happy=defo (idenfified with token ABCDEF)
210
+ > http://destination.com?test=yes&happy=defo (identified with token ABCDEF)
194
211
  Which is shortened into:
195
212
  > http://coolapp.io/s/ABCDEF?test=no&why=not
196
213
  Then, the resulting URL will be:
@@ -247,20 +264,21 @@ Shortener is used in a number of production systems, including, but not limited
247
264
 
248
265
  If you are using Shortener in your project and would like to be added to this list, please get in touch!
249
266
 
250
- == Authors
251
-
252
- * {James McGrath}[https://github.com/jpmcgrath]
253
- * {Michael Reinsch}[https://github.com/mreinsch]
254
-
255
267
  == Contributing
256
268
 
257
- New feature requests are welcome, code is more welcome still. Code with Specs is the
258
- most welcomiest there is!
269
+ We welcome new contributors. Because we're all busy people, and because Shortener
270
+ is used/relied upon by many projects, it is essential that new Pull Requests
271
+ are opened with good spec coverage, and a passing build on supported ruby versions
272
+ and Rails versions.
259
273
 
260
274
  To contribute:
261
275
 
262
276
  1. Fork it
263
277
  2. Create your feature branch (git checkout -b my-new-feature)
264
- 3. Commit your changes (git commit -am 'Add some feature')
265
- 4. Push to the branch (git push origin my-new-feature)
266
- 5. Create a new Pull Request
278
+ 3. Write spec coverage of changes
279
+ 4. Commit your changes (git commit -am 'Add some feature')
280
+ 5. Push to the branch (git push origin my-new-feature)
281
+ 6. Create a new Pull Request
282
+ 7. Ensure the build is passing
283
+
284
+ Note: We adhere to the community driven Ruby style guide: https://github.com/bbatsov/ruby-style-guide
@@ -1,4 +1,8 @@
1
- class Shortener::ShortenedUrlsController < ActionController::Base
1
+ class Shortener::ShortenedUrlsController < ActionController::Metal
2
+ include ActionController::StrongParameters
3
+ include ActionController::Redirecting
4
+ include ActionController::Instrumentation
5
+ include Rails.application.routes.url_helpers
2
6
  include Shortener
3
7
 
4
8
  def show
@@ -12,6 +12,10 @@ module Shortener::ShortenerHelper
12
12
  )
13
13
 
14
14
  if short_url
15
+ if subdomain = Shortener.subdomain
16
+ url_options = url_options.merge(subdomain: subdomain)
17
+ end
18
+
15
19
  options = { controller: :"/shortener/shortened_urls", action: :show, id: short_url.unique_key, only_path: false }.merge(url_options)
16
20
  url_for(options)
17
21
  else
@@ -98,6 +98,10 @@ class Shortener::ShortenedUrl < ActiveRecord::Base
98
98
  params = params.permit!.to_h.with_indifferent_access.except!(:id, :action, :controller)
99
99
  end
100
100
 
101
+ if Shortener.subdomain
102
+ params.try(:except!, :subdomain) if params[:subdomain] == Shortener.subdomain
103
+ end
104
+
101
105
  if params.present?
102
106
  uri = URI.parse(url)
103
107
  existing_params = Rack::Utils.parse_nested_query(uri.query)
@@ -6,7 +6,7 @@ class CreateShortenedUrlsTable < ActiveRecord::Migration[4.2]
6
6
  t.string :owner_type, limit: 20
7
7
 
8
8
  # the real url that we will redirect to
9
- t.text :url, null: false
9
+ t.text :url, null: false, length: 2083
10
10
 
11
11
  # the unique key
12
12
  t.string :unique_key, limit: 10, null: false
@@ -26,7 +26,7 @@ class CreateShortenedUrlsTable < ActiveRecord::Migration[4.2]
26
26
  # we will lookup the links in the db by key, urls and owners.
27
27
  # also make sure the unique keys are actually unique
28
28
  add_index :shortened_urls, :unique_key, unique: true
29
- add_index :shortened_urls, :url
29
+ add_index :shortened_urls, :url, length: 2083
30
30
  add_index :shortened_urls, [:owner_id, :owner_type]
31
31
  add_index :shortened_urls, :category
32
32
  end
@@ -10,6 +10,10 @@ module Shortener
10
10
  alphanumcase: ('a'..'z').to_a + ('A'..'Z').to_a + (0..9).to_a
11
11
  }
12
12
 
13
+ # subdomain if not mounted on site root
14
+ mattr_accessor :subdomain
15
+ self.subdomain = false
16
+
13
17
  # default key length: 5 characters
14
18
  mattr_accessor :unique_key_length
15
19
  self.unique_key_length = 5
@@ -1,3 +1,3 @@
1
1
  module Shortener
2
- VERSION = '0.7.1'
2
+ VERSION = '0.7.2'
3
3
  end
@@ -222,6 +222,21 @@ describe Shortener::ShortenedUrl, type: :model do
222
222
  expect(Shortener::ShortenedUrl.merge_params_to_url(url: url, params: params)).to eq 'http://example.com/pathname?different=yes&foo=manchoo&hello=world'
223
223
  end
224
224
  end
225
+
226
+ context 'with Shortener.subdomain configured' do
227
+ let(:url) { 'http://example.com/pathname'}
228
+
229
+ before { allow(Shortener).to receive(:subdomain).and_return('go') }
230
+
231
+ it 'filters the subdomain parameter if it matches the subdomain' do
232
+ params = {foo: 'test', subdomain: 'go' }
233
+ expect(Shortener::ShortenedUrl.merge_params_to_url(url: url, params: params)).to eq 'http://example.com/pathname?foo=test'
234
+ end
235
+ it 'merges the subdomain parameter if it does not match the subdomain' do
236
+ params = {foo: 'test', subdomain: 's' }
237
+ expect(Shortener::ShortenedUrl.merge_params_to_url(url: url, params: params)).to eq 'http://example.com/pathname?foo=test&subdomain=s'
238
+ end
239
+ end
225
240
  end
226
241
  end
227
242
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shortener
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James P. McGrath
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-04-26 00:00:00.000000000 Z
12
+ date: 2018-05-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: voight_kampff