shortener 0.8.2 → 1.0.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
  SHA256:
3
- metadata.gz: a65ebf87f18746199fa76ac0a91f3365d0c34b9c969f897c25422370a676355b
4
- data.tar.gz: 8a06527bce6d9f10805d2a97525b04dc631ee1c9115cc3e016bb5263307269a3
3
+ metadata.gz: 9b5d472a9bc919a4d8908b8aed88d1118d2922d82a9cd8f93d99e955d10d00d7
4
+ data.tar.gz: 2c0668fd8dbf8583b412f5d3cb00e4b959ceb4b2ea8d73619c2404545b6cac58
5
5
  SHA512:
6
- metadata.gz: 62ec7fe6fc1a26fd89804c967a00fffa9d7e9235ecb10d1b338dd188ca5f12bcf964ac983e2bac597b1a97a2b5195002060c81db280355701967a6d1b324bb60
7
- data.tar.gz: 427b8118350ff106e97828caf7ce41433ae1dcc69d67c902e6e871555613e64bd4a5256709a22f3bf4d95c587cc96f43235bd38f6eb91cb17b454a24039337d8
6
+ metadata.gz: 22cb8aaee0f74c741adb61ccc5e8bda54b91a3f60d71c57f5e3adbc411be1fda02d5b1e5a7c71cdb44e5c8cf2fd312a2f9e1797823b296397fdf35ebd64c2be6
7
+ data.tar.gz: 6d364749841bc21a95299285f1e1c108068def18652d304495f034a155b2f2b262801e6c41d1fb9c573b11b57bebe983c91a4311802be2c8aac359e9d0f5ecb8
@@ -0,0 +1,64 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ develop ]
6
+ pull_request:
7
+ branches: [ develop ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ fail-fast: true
14
+ matrix:
15
+ ruby-version:
16
+ - '2.4'
17
+ - '2.7'
18
+ - '3.0'
19
+ - '3.2'
20
+ gemfile:
21
+ - rails_4.2.gemfile
22
+ - rails_5.2.gemfile
23
+ - rails_6.0.gemfile
24
+ - rails_6.1.gemfile
25
+ - rails_7.0.gemfile
26
+ include:
27
+ - ruby-version: '2.4'
28
+ gemfile: rails_4.2.gemfile
29
+ bundler-version: 1
30
+ exclude:
31
+ - ruby-version: '2.7'
32
+ gemfile: rails_4.2.gemfile
33
+ - ruby-version: '3.0'
34
+ gemfile: rails_4.2.gemfile
35
+ - ruby-version: '3.2'
36
+ gemfile: rails_4.2.gemfile
37
+ - ruby-version: '3.0'
38
+ gemfile: rails_5.2.gemfile
39
+ - ruby-version: '3.2'
40
+ gemfile: rails_5.2.gemfile
41
+ - ruby-version: '2.4'
42
+ gemfile: rails_6.0.gemfile
43
+ - ruby-version: '3.2'
44
+ gemfile: rails_6.0.gemfile
45
+ - ruby-version: '2.4'
46
+ gemfile: rails_6.1.gemfile
47
+ - ruby-version: '3.2'
48
+ gemfile: rails_6.1.gemfile
49
+ - ruby-version: '2.4'
50
+ gemfile: rails_7.0.gemfile
51
+
52
+ env:
53
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}
54
+
55
+ steps:
56
+ - uses: actions/checkout@v3
57
+ - name: Set up Ruby
58
+ uses: ruby/setup-ruby@v1
59
+ with:
60
+ ruby-version: ${{ matrix.ruby-version }}
61
+ bundler: ${{ matrix.bundler-version }}
62
+ bundler-cache: true
63
+ - name: Run tests
64
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -11,6 +11,7 @@ bin/*
11
11
  *.gem
12
12
  *.swp
13
13
  Gemfile.lock
14
+ .ruby-version
14
15
  .rvmrc
15
16
  .redcar/*
16
17
  gemfiles/*.lock
data/Appraisals CHANGED
@@ -1,17 +1,9 @@
1
- appraise "rails_4" do
1
+ appraise "rails_4.2" do
2
2
  gem "rails", "~> 4.2.10"
3
+ gem "rspec-rails", "~> 3.0"
3
4
  gem "sqlite3", "~> 1.3.6"
4
5
  end
5
6
 
6
- appraise "rails_5.0" do
7
- gem "rails", "~> 5.0.7"
8
- gem "sqlite3", "~> 1.3.6"
9
- end
10
-
11
- appraise "rails_5.1" do
12
- gem "rails", "~> 5.1.6"
13
- end
14
-
15
7
  appraise "rails_5.2" do
16
8
  gem "rails", "~> 5.2.0"
17
9
  end
@@ -19,3 +11,11 @@ end
19
11
  appraise "rails_6.0" do
20
12
  gem "rails", "~> 6.0.0"
21
13
  end
14
+
15
+ appraise "rails_6.1" do
16
+ gem "rails", "~> 6.1.0"
17
+ end
18
+
19
+ appraise "rails_7.0" do
20
+ gem "rails", "~> 7.0.0"
21
+ end
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- {<img src="https://secure.travis-ci.org/jpmcgrath/shortener.svg?branch=master" alt="Build Status" />}[http://travis-ci.org/jpmcgrath/shortener]
1
+ {<img src="https://github.com/jpmcgrath/shortener/actions/workflows/ruby.yml/badge.svg" alt="Build Status" />}[https://github.com/jpmcgrath/shortener/actions]
2
2
  {<img src="https://codeclimate.com/github/jpmcgrath/shortener/badges/gpa.svg" />}[https://codeclimate.com/github/jpmcgrath/shortener]
3
3
  {<img src="https://badge.fury.io/rb/shortener.svg" alt="Gem version" />}[http://badge.fury.io/rb/shortener]
4
4
 
@@ -65,7 +65,7 @@ migration:
65
65
 
66
66
  == Installation
67
67
 
68
- Shortener is compatible with Rails v3, v4, v5, & v6. To install, add to your Gemfile:
68
+ Shortener is compatible with Rails v4, v5, & v6. To install, add to your Gemfile:
69
69
 
70
70
  gem 'shortener'
71
71
 
@@ -159,11 +159,11 @@ You can pass in your own key when generating a shortened URL. This should be uni
159
159
  You can create expirable URLs.
160
160
  Probably, most of the time it would be used with owner:
161
161
 
162
- Shortener::ShortenedUrl.generate("example.com/page", user, expires_at: 24.hours.since)
162
+ Shortener::ShortenedUrl.generate("example.com/page", owner: user, expires_at: 24.hours.since)
163
163
 
164
- You can omit owner passing nil instead:
164
+ You can omit owner:
165
165
 
166
- Shortener::ShortenedUrl.generate("example.com/page", nil, expires_at: 24.hours.since)
166
+ Shortener::ShortenedUrl.generate("example.com/page", expires_at: 24.hours.since)
167
167
 
168
168
  === Fresh Links
169
169
 
@@ -256,26 +256,25 @@ If you want more things to happen when a user accesses one of your short urls, y
256
256
 
257
257
  *note:* If no shortened URL is found, the url will be `default_redirect` or `/`
258
258
 
259
- == Origins
259
+ === Configuring a different database for shortened_urls table
260
260
 
261
- For a bit of backstory to Shortener see this {blog post}[http://jamespmcgrath.com/a-simple-link-shortener-in-rails/].
261
+ You can store a `shortened_urls` table in another database and connecting to it by creating a initializer with the following:
262
262
 
263
- == In The Wild
263
+ ```ruby
264
+ ActiveSupport.on_load(:shortener_record) do
265
+ connects_to(database: { writing: :dbname, reading: :dbname_replica })
266
+ end
267
+ ```
264
268
 
265
- Shortener is used in a number of production systems, including, but not limited to:
266
-
267
- - {Doorkeeper - An Event Management Tool}[http://www.doorkeeperhq.com/]
268
- - {1001tweets - Repost your tweets to get more clicks}[http://www.1001tweets.com/]
269
- - {NewsMaker.io - The curated newsletter builder}[https://www.newsmaker.io/]
270
-
271
- If you are using Shortener in your project and would like to be added to this list, please get in touch!
269
+ **Note:** Please, replace `dbname` and `dbname_replica` to match your database configuration.
272
270
 
273
271
  == Contributing
274
272
 
275
273
  We welcome new contributors. Because we're all busy people, and because Shortener
276
274
  is used/relied upon by many projects, it is essential that new Pull Requests
277
275
  are opened with good spec coverage, and a passing build on supported ruby versions
278
- and Rails versions.
276
+ and Rails versions. Please create a single PR per feature/contribution, with as
277
+ few changes per PR as possible to make it easier to review.
279
278
 
280
279
  To contribute:
281
280
 
@@ -0,0 +1,5 @@
1
+ class Shortener::Record < ActiveRecord::Base #:nodoc:
2
+ self.abstract_class = true
3
+ end
4
+
5
+ ActiveSupport.run_load_hooks :shortener_record, Shortener::Record
@@ -1,4 +1,4 @@
1
- class Shortener::ShortenedUrl < ActiveRecord::Base
1
+ class Shortener::ShortenedUrl < Shortener::Record
2
2
 
3
3
  REGEX_LINK_HAS_PROTOCOL = Regexp.new('\Ahttp:\/\/|\Ahttps:\/\/', Regexp::IGNORECASE)
4
4
 
@@ -15,7 +15,7 @@ class Shortener::ShortenedUrl < ActiveRecord::Base
15
15
  end
16
16
 
17
17
  # exclude records in which expiration time is set and expiration time is greater than current time
18
- scope :unexpired, -> { where(arel_table[:expires_at].eq(nil).or(arel_table[:expires_at].gt(::Time.current.to_s(:db)))) }
18
+ scope :unexpired, -> { where(arel_table[:expires_at].eq(nil).or(arel_table[:expires_at].gt(::Time.current))) }
19
19
 
20
20
  attr_accessor :custom_key
21
21
 
@@ -1,8 +1,9 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "http://rubygems.org"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "~> 4.2.10"
6
+ gem "rspec-rails", "~> 3.0"
6
7
  gem "sqlite3", "~> 1.3.6"
7
8
 
8
9
  gemspec path: "../"
@@ -1,6 +1,6 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "http://rubygems.org"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "~> 5.2.0"
6
6
 
@@ -1,6 +1,6 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "http://rubygems.org"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "~> 6.0.0"
6
6
 
@@ -1,7 +1,7 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "http://rubygems.org"
3
+ source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 5.1.6"
5
+ gem "rails", "~> 6.1.0"
6
6
 
7
7
  gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 7.0.0"
6
+
7
+ gemspec path: "../"
@@ -1,5 +1,7 @@
1
+ require "rack"
1
2
  require "rails/engine"
2
3
  require "voight_kampff"
4
+ require "voight_kampff/rails"
3
5
  require "shortener"
4
6
 
5
7
  class Shortener::Engine < ::Rails::Engine #:nodoc:
@@ -1,3 +1,3 @@
1
1
  module Shortener
2
- VERSION = '0.8.2'.freeze
2
+ VERSION = '1.0.1'.freeze
3
3
  end
data/lib/shortener.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "active_support/dependencies"
1
+ require "active_support"
2
2
 
3
3
  module Shortener
4
4
 
data/shortener.gemspec CHANGED
@@ -14,11 +14,11 @@ Gem::Specification.new do |s|
14
14
  s.homepage = "http://jamespmcgrath.com/projects/shortener"
15
15
  s.required_rubygems_version = "> 2.1.0"
16
16
 
17
- s.add_dependency "voight_kampff", '~> 1.1.2'
17
+ s.add_dependency "voight_kampff", '~> 2.0'
18
18
 
19
19
  s.add_development_dependency "rails", '>= 3'
20
20
  s.add_development_dependency "sqlite3"
21
- s.add_development_dependency "rspec-rails", '~> 3.6.0'
21
+ s.add_development_dependency "rspec-rails"
22
22
  s.add_development_dependency "shoulda-matchers"
23
23
  s.add_development_dependency "faker"
24
24
  s.add_development_dependency "byebug"
data/spec/spec_helper.rb CHANGED
@@ -10,6 +10,7 @@ require 'faker'
10
10
  require 'capybara/rspec'
11
11
 
12
12
  Rails.backtrace_cleaner.remove_silencers!
13
+ ActiveRecord::Base.logger = Logger.new(STDOUT) if ENV['LOG_STDOUT']
13
14
 
14
15
  Shoulda::Matchers.configure do |config|
15
16
  config.integrate do |with|
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shortener
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James P. McGrath
8
8
  - Michael Reinsch
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-05-06 00:00:00.000000000 Z
12
+ date: 2023-08-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: voight_kampff
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.1.2
20
+ version: '2.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.1.2
27
+ version: '2.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rails
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -57,16 +57,16 @@ dependencies:
57
57
  name: rspec-rails
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - "~>"
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 3.6.0
62
+ version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "~>"
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 3.6.0
69
+ version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: shoulda-matchers
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -148,8 +148,8 @@ executables: []
148
148
  extensions: []
149
149
  extra_rdoc_files: []
150
150
  files:
151
+ - ".github/workflows/ruby.yml"
151
152
  - ".gitignore"
152
- - ".travis.yml"
153
153
  - Appraisals
154
154
  - Gemfile
155
155
  - MIT-LICENSE
@@ -157,12 +157,13 @@ files:
157
157
  - Rakefile
158
158
  - app/controllers/shortener/shortened_urls_controller.rb
159
159
  - app/helpers/shortener/shortener_helper.rb
160
+ - app/models/shortener/record.rb
160
161
  - app/models/shortener/shortened_url.rb
161
- - gemfiles/rails_4.gemfile
162
- - gemfiles/rails_5.0.gemfile
163
- - gemfiles/rails_5.1.gemfile
162
+ - gemfiles/rails_4.2.gemfile
164
163
  - gemfiles/rails_5.2.gemfile
165
164
  - gemfiles/rails_6.0.gemfile
165
+ - gemfiles/rails_6.1.gemfile
166
+ - gemfiles/rails_7.0.gemfile
166
167
  - lib/generators/shortener/shortener_generator.rb
167
168
  - lib/generators/shortener/templates/migration.rb
168
169
  - lib/shortener.rb
@@ -215,7 +216,7 @@ files:
215
216
  homepage: http://jamespmcgrath.com/projects/shortener
216
217
  licenses: []
217
218
  metadata: {}
218
- post_install_message:
219
+ post_install_message:
219
220
  rdoc_options: []
220
221
  require_paths:
221
222
  - lib
@@ -230,8 +231,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
231
  - !ruby/object:Gem::Version
231
232
  version: 2.1.0
232
233
  requirements: []
233
- rubygems_version: 3.0.3
234
- signing_key:
234
+ rubyforge_project:
235
+ rubygems_version: 2.7.6
236
+ signing_key:
235
237
  specification_version: 4
236
238
  summary: Shortener is a Rails Engine that makes it easy to create shortened URLs for
237
239
  your rails application.
data/.travis.yml DELETED
@@ -1,32 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.2
5
- - 2.3
6
- - 2.4
7
- - 2.5
8
- - 2.6
9
- - 2.7
10
-
11
- gemfile:
12
- - gemfiles/rails_4.gemfile
13
- - gemfiles/rails_5.0.gemfile
14
- - gemfiles/rails_5.1.gemfile
15
- - gemfiles/rails_5.2.gemfile
16
- - gemfiles/rails_6.0.gemfile
17
-
18
- jobs:
19
- fast_finish: true
20
- exclude:
21
- - rvm: 2.6
22
- gemfile: gemfiles/rails_4.gemfile
23
- - rvm: 2.7
24
- gemfile: gemfiles/rails_4.gemfile
25
- - rvm: 2.2
26
- gemfile: gemfiles/rails_5.2.gemfile
27
- - rvm: 2.2
28
- gemfile: gemfiles/rails_6.0.gemfile
29
- - rvm: 2.3
30
- gemfile: gemfiles/rails_6.0.gemfile
31
- - rvm: 2.4
32
- gemfile: gemfiles/rails_6.0.gemfile
@@ -1,8 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "rails", "~> 5.0.7"
6
- gem "sqlite3", "~> 1.3.6"
7
-
8
- gemspec path: "../"