rails_url_shortener 0.1.0 → 0.1.3

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: '0847fa49aa14c40889c11cdf80fd32a846208112f7b1e121455f6c6258225cf8'
4
- data.tar.gz: 2479208e471351f49be2f9876f33ce22cc6cf6461c62113b0d5e5c66d8bd884a
3
+ metadata.gz: ffbe916c8f609fdc0f2d3eeeaa418fef1ac4ee79ef06168d49fe5e203d0cb13a
4
+ data.tar.gz: c9c73896eb476662e60e2999bc88a1a664c70b2d963100fbd4dc782ccd52249e
5
5
  SHA512:
6
- metadata.gz: 94658a6b36105a31e1abc8ce7ac9b67913e2fecec29a834f9898224b1969ac0f593ee72c157bbe149e75a439fe5d68efaa167aebc83758fdd85eb578aef3b047
7
- data.tar.gz: f40c5f6dc58ab19cd03bd714db4d68431889733579dce5e61c8990964fdc82211cc8d95e20d36d54bdc6909b7f93e871ae3648bd21ab5977123c7c93f2a71fed
6
+ metadata.gz: f084c9720acb322664f424ba1d6d8e3f30b102caa5091eae1a66a2eae62242460dda2b86b0eeef46ade2321101cfd0f4fd6b9fea1818ba10653e96ce876374e1
7
+ data.tar.gz: 0141c770be77c10aa15354685e21ef51539547d690cdb2cd3e66f2deda6472245506e9704c7b1b6149dda8f5d417433293bcc8c7b6e1dd9ed9e22cbbe692e66d
data/README.md CHANGED
@@ -1,37 +1,76 @@
1
1
  # RailsUrlShortener
2
2
 
3
- A small rails engine for short urls.
4
- It could be used like a url shortener or a ip logger, it is your choice.
5
- The app generate a short url for you and then (if you want) receive the requests and redirect to the original url.
3
+ RailsUrlShortener is a small rails engine that provide your app with short URLs functionalities. Like a Bitly on your app. By default, RailsUrlShortener save the visits to your link for future interesting things that you may want to do.
6
4
 
7
5
  Why give your data to a third party app if you can do it by yourself?
8
6
 
7
+ You can see a **demo project** of what you can do with this engine [HERE]("https://paso-app.herokuapp.com/").
8
+
9
+ ## Key features
10
+
11
+ A few of the things you can do with RailsUrlShortener:
12
+
13
+ * Generate unique keys for links.
14
+ * Provide a method controller that find, save request information and does a 301 redirect to the original url.
15
+ * The short links can be associated with a model in your app.
16
+ * Save interesting things like browser, system and ip data of the 'un-shortened' request.
17
+ * Temporal short links using the expires_at option.
18
+
9
19
  ## Usage
10
20
 
11
- Mount the controller on your app adding the next code on your config/routes.rb:
21
+ ### 1. Mount the engine
22
+
23
+ Mount the engine on your app adding the next code on your config/routes.rb:
24
+
25
+ **If you want to mount this on the root of your app, this should be on the bottom of your routes file.**
12
26
 
13
27
  ```ruby
14
28
  mount RailsUrlShortener::Engine, at: "/"
15
29
 
16
30
  ```
31
+ ### 2. Generate the short link
32
+
33
+ And generate the short links like you want:
17
34
 
18
- And generate the short links wherever you want using the helper method:
35
+ - Using the helper method, this return the ready short link.
19
36
 
20
37
  ```ruby
21
- short_url("https://www.github.com/a-chacon/rails_url_shortener")
38
+ short_url("https://www.github.com/a-chacon/rails-url-shortener")
22
39
  ```
23
40
 
24
- or model method:
41
+ - Or model method, this return the object built. So you can save this on a variable, extract the key and build the short link by your own:
25
42
 
26
43
  ```ruby
27
- RailsUrlShortener::Url.generate("https://www.github.com/a-chacon/rails_url_shortener")
44
+ RailsUrlShortener::Url.generate("https://www.github.com/a-chacon/rails-url-shortener")
28
45
  ```
46
+ ### 3. Share the short link
29
47
 
30
- **Then share the short link.**
48
+ **Then share the short link to your users or wherever you want.**
31
49
 
32
- ### Deeper
50
+ ## Deeper
51
+
52
+ Full params for the short_url helper:
53
+ ```ruby
54
+ short_url(url, owner: nil, key: nil, expires_at: nil, category: nil, url_options: {})
55
+ ```
56
+ Where:
57
+ * **url**: Long url for short.
58
+ * **owner**: Is a model of your app. You can relate an url whatever you want in your app.
59
+ * **key**: Is a custom key that you want to set up.
60
+ * **expires_at**: Is a datetime for expiration, after this the redirection doesn't work.
61
+ * **category**: Tag that you want for that link.
62
+ * **url_options**: Options for the url_for generator. Ex: subdomain or protocol.
63
+
64
+
65
+ And the same for the generate model method except for url_options:
66
+ ```ruby
67
+ RailsUrlShortener::Url.generate(url, owner: nil, key: nil, expires_at: nil, category: nil)
68
+ ```
69
+
70
+ ### Data saved
71
+
72
+ By default, this engine save all request made on your short url, you can use that data for some analytics or simple IP logger. So for get the data in a controller or do wherever you want, you can use the Visit model related to an Url:
33
73
 
34
- By default this engine save all request made on your short url, you can use that data for some analitics or simple ip logger. So for get the data in a controller or do wherever you want you can use the Visit model related to a Url:
35
74
  ```ruby
36
75
  RailsUrlShortener::Url.find_by_key("key").visits # all visits
37
76
 
@@ -41,11 +80,6 @@ Or using the model class:
41
80
  RailsUrlShortener::Visit.all # all in database
42
81
  ```
43
82
 
44
- Also the Url model has a polymorphic relation with an owner that is optional. So you can relate an url whatever you want in your app adding the next relation in a model:
45
- ```ruby
46
- has_many :urls, as: :owner
47
- ```
48
-
49
83
  ## Installation
50
84
 
51
85
  Add this line to your application's Gemfile:
@@ -69,11 +103,12 @@ And finally install the migrations on your project and migrate:
69
103
  bin/rails rails_url_shortener:install:migrations db:migrate
70
104
  ```
71
105
 
72
- If you want the initializer for configurations do:
106
+ For the configurations generate the initializer whith this:
73
107
 
74
108
  ```bash
75
109
  rails generate RailsUrlShortener:initializer
76
110
  ```
111
+ **Here is important to configure the host at least if your are not running your app in localhost**
77
112
 
78
113
  ## Contributing
79
114
 
@@ -89,4 +124,4 @@ Don't forget to give the project a star! Thanks again!
89
124
  5. Open a Pull Request
90
125
 
91
126
  ## License
92
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
127
+ The gem is available as open source under the terms of the [GPL-3.0 License](https://www.github.com/a-chacon/rails-url-shortener/blob/main/LICENSE).
@@ -1,6 +1,13 @@
1
1
  module RailsUrlShortener
2
2
  module UrlsHelper
3
+ ##
4
+ # helper for generate short urls
5
+ #
6
+ # this method return a short url or the original url if something is bad
7
+ # Usage:
8
+ # short_url("https://tools.ietf.org/search/rfc2616#section-5.3")
3
9
  def short_url(url, owner: nil, key: nil, expires_at: nil, category: nil, url_options: {})
10
+ # generate
4
11
  url_object = Url.generate(
5
12
  url,
6
13
  owner: owner,
@@ -10,17 +17,18 @@ module RailsUrlShortener
10
17
  )
11
18
 
12
19
  if url_object.errors.empty?
13
- # This must be fixed
14
- # the url_for helper must generate the url
15
- # options = {
16
- # controller: "rails_url_shortener_url/urls",
17
- # action: "show",
18
- # key: url.key
19
- # }.merge(url_options)
20
+ # options for url_for
21
+ options = {
22
+ controller: "rails_url_shortener/urls",
23
+ action: "show",
24
+ key: url_object.key,
25
+ host: RailsUrlShortener.host
26
+ }.merge(url_options)
20
27
 
21
- # url_for(options)
22
- rails_url_shortener_url + url_object.key
28
+ # use helper of this engine
29
+ RailsUrlShortener::Engine.routes.url_for(options)
23
30
  else
31
+ # if not saved, return original url
24
32
  url
25
33
  end
26
34
  end
@@ -4,8 +4,9 @@ CHARSETS = {
4
4
  alphanumcase: ('A'..'Z').to_a + ('a'..'z').to_a + (0..9).to_a
5
5
  }
6
6
 
7
- RailsUrlShortener.default_redirect = "/"
8
- RailsUrlShortener.charset = CHARSETS[:alphanumcase]
9
- RailsUrlShortener.key_length = 6
10
- RailsUrlShortener.minimum_key_length = 3
11
- RailsUrlShortener.save_bots_visits = false
7
+ RailsUrlShortener.host = "localhost:3000" # the host used for the helper
8
+ RailsUrlShortener.default_redirect = "/" # where the users are redirect if the link doesn't exists or is expired.
9
+ RailsUrlShortener.charset = CHARSETS[:alphanumcase] # used for generate the keys, better long.
10
+ RailsUrlShortener.key_length = 6 # Key length for random generator
11
+ RailsUrlShortener.minimum_key_length = 3 # minimun permited for a key
12
+ RailsUrlShortener.save_bots_visits = false # if save bots visits
@@ -1,3 +1,3 @@
1
1
  module RailsUrlShortener
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -11,6 +11,10 @@ module RailsUrlShortener
11
11
  alphanumcase: ('A'..'Z').to_a + ('a'..'z').to_a + (0..9).to_a
12
12
  }
13
13
 
14
+ ##
15
+ # host for build final url on helper
16
+ mattr_accessor :host, default: 'test.host'
17
+
14
18
  ##
15
19
  # default redirection url when the key isn't found
16
20
  mattr_accessor :default_redirect, default: '/'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_url_shortener
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - a-chacon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-12 00:00:00.000000000 Z
11
+ date: 2022-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -38,18 +38,32 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.3.0
41
- description: A little engine for rails application that provide url shortener functions.
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.15.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.15.0
55
+ description: RailsUrlShortener is a simple engine that provide to your rail's app
56
+ the functionalities for short URLs. Like bitly.com, but working on your project
57
+ only.
42
58
  email:
43
59
  - andres.ch@protonmail.com
44
60
  executables: []
45
61
  extensions: []
46
62
  extra_rdoc_files: []
47
63
  files:
48
- - MIT-LICENSE
49
64
  - README.md
50
65
  - Rakefile
51
66
  - app/controllers/rails_url_shortener/urls_controller.rb
52
- - app/helpers/rails_url_shortener/application_helper.rb
53
67
  - app/helpers/rails_url_shortener/urls_helper.rb
54
68
  - app/models/rails_url_shortener/application_record.rb
55
69
  - app/models/rails_url_shortener/url.rb
@@ -63,13 +77,15 @@ files:
63
77
  - lib/rails_url_shortener/engine.rb
64
78
  - lib/rails_url_shortener/version.rb
65
79
  - lib/tasks/rails_url_shortener_tasks.rake
66
- homepage: https://www.github.com/a-chacon/rails_url_shortener
80
+ homepage: https://www.github.com/a-chacon/rails-url-shortener
67
81
  licenses:
68
82
  - MIT
69
83
  metadata:
70
- homepage_uri: https://www.github.com/a-chacon/rails_url_shortener
71
- source_code_uri: https://www.github.com/a-chacon/rails_url_shortener
72
- changelog_uri: https://www.github.com/a-chacon/rails_url_shortener
84
+ bug_tracker_uri: https://www.github.com/a-chacon/rails-url-shortener/issues
85
+ changelog_uri: https://www.github.com/a-chacon/rails-url-shortener/releases/tag/v0.1.3
86
+ documentation_uri: https://github.com/a-chacon/rails-url-shortener/blob/main/README.md
87
+ source_code_uri: https://github.com/a-chacon/rails-url-shortener/tree/v0.1.3
88
+ rubygems_mfa_required: 'true'
73
89
  post_install_message:
74
90
  rdoc_options: []
75
91
  require_paths:
@@ -78,12 +94,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
94
  requirements:
79
95
  - - ">="
80
96
  - !ruby/object:Gem::Version
81
- version: '0'
97
+ version: 2.7.0
82
98
  required_rubygems_version: !ruby/object:Gem::Requirement
83
99
  requirements:
84
100
  - - ">="
85
101
  - !ruby/object:Gem::Version
86
- version: '0'
102
+ version: 1.8.11
87
103
  requirements: []
88
104
  rubygems_version: 3.2.22
89
105
  signing_key:
data/MIT-LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright 2022 a-chacon
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,4 +0,0 @@
1
- module RailsUrlShortener
2
- module ApplicationHelper
3
- end
4
- end