rails_url_shortener 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/jobs/rails_url_shortener/application_job.rb +9 -0
- data/app/jobs/rails_url_shortener/ip_crawler_job.rb +35 -0
- data/app/models/rails_url_shortener/ipgeo.rb +5 -0
- data/app/models/rails_url_shortener/visit.rb +5 -1
- data/db/migrate/20220418184647_create_rails_url_shortener_ipgeos.rb +28 -0
- data/lib/rails_url_shortener/engine.rb +1 -0
- data/lib/rails_url_shortener/version.rb +1 -1
- metadata +22 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3bb06e219a4cd2bdfd83ef3d6b3f892bd1c4194cad99019aecd7c3e206ce4a5
|
4
|
+
data.tar.gz: 815b320b295c2c3d38b695b3412a656f7349fe0a454ddb63d9e127e33db7daef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 452449b98fdec6c11fe2f544239552fd70d7c701caf7db69e8b9a581b62921f964c3dc21c163daf3b6be65b58ceaed8948d2e8a42b1b877ff1d0033689773814
|
7
|
+
data.tar.gz: 1b20f5faa06077c88256df869aae288e863e729ee84060e752d19186116ff96b78c7ebf35482171f48a240261b6cfb163ba57eb78e91368b44d21b44bcfe8d9d
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module RailsUrlShortener
|
2
|
+
class ApplicationJob < ActiveJob::Base
|
3
|
+
# Automatically retry jobs that encountered a deadlock
|
4
|
+
# retry_on ActiveRecord::Deadlocked
|
5
|
+
|
6
|
+
# Most jobs are safe to ignore if the underlying records are no longer available
|
7
|
+
# discard_on ActiveJob::DeserializationError
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module RailsUrlShortener
|
2
|
+
class IpCrawlerJob < ApplicationJob
|
3
|
+
queue_as :default
|
4
|
+
|
5
|
+
require 'http'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
##
|
9
|
+
# this function get the ip related data
|
10
|
+
#
|
11
|
+
# create or update an existing record information for an ip
|
12
|
+
|
13
|
+
def perform(visit)
|
14
|
+
if Ipgeo.exists?(ip: visit.ip) && Ipgeo.find_by(ip: visit.ip).updated_at <= Time.now - 3.months
|
15
|
+
# Then update
|
16
|
+
ip = HTTP.get("http://ip-api.com/json/#{visit.ip}?fields=status,message,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,mobile,proxy,hosting,query")
|
17
|
+
if ip.code == 200
|
18
|
+
ipgeo = Ipgeo.find_by(ip: visit.ip)
|
19
|
+
ipgeo.update(JSON.parse(ip.body).transform_keys { |key| key.to_s.underscore }.slice(*Ipgeo.column_names))
|
20
|
+
end
|
21
|
+
elsif !Ipgeo.exists?(ip: visit.ip)
|
22
|
+
# Then create a new record
|
23
|
+
ip = HTTP.get("http://ip-api.com/json/#{visit.ip}?fields=status,message,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,mobile,proxy,hosting,query")
|
24
|
+
if ip.code == 200
|
25
|
+
ipgeo = Ipgeo.new(JSON.parse(ip.body).transform_keys { |key| key.to_s.underscore }.slice(*Ipgeo.column_names))
|
26
|
+
ipgeo.ip = JSON.parse(ip.body)['query']
|
27
|
+
ipgeo.save
|
28
|
+
visit.ipgeo = ipgeo
|
29
|
+
end
|
30
|
+
end
|
31
|
+
rescue Exception => e
|
32
|
+
print('Error' + e.to_s)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -2,6 +2,7 @@ module RailsUrlShortener
|
|
2
2
|
require 'json'
|
3
3
|
class Visit < ApplicationRecord
|
4
4
|
belongs_to :url
|
5
|
+
belongs_to :ipgeo, optional: true
|
5
6
|
|
6
7
|
##
|
7
8
|
# Parse a request information and save
|
@@ -15,7 +16,7 @@ module RailsUrlShortener
|
|
15
16
|
false
|
16
17
|
else
|
17
18
|
# save
|
18
|
-
Visit.create(
|
19
|
+
visit = Visit.create(
|
19
20
|
url: url,
|
20
21
|
ip: request.ip,
|
21
22
|
browser: browser.name,
|
@@ -25,6 +26,9 @@ module RailsUrlShortener
|
|
25
26
|
bot: browser.bot?,
|
26
27
|
user_agent: request.headers['User-Agent']
|
27
28
|
)
|
29
|
+
# We enqueue a job for get more data later
|
30
|
+
IpCrawlerJob.perform_later(visit)
|
31
|
+
visit
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class CreateRailsUrlShortenerIpgeos < ActiveRecord::Migration[7.0]
|
2
|
+
def up
|
3
|
+
create_table :rails_url_shortener_ipgeos do |t|
|
4
|
+
t.string :ip
|
5
|
+
t.string :country
|
6
|
+
t.string :country_code
|
7
|
+
t.string :region
|
8
|
+
t.string :region_name
|
9
|
+
t.string :city
|
10
|
+
t.string :lat
|
11
|
+
t.string :lon
|
12
|
+
t.string :timezone
|
13
|
+
t.string :isp
|
14
|
+
t.string :org
|
15
|
+
t.string :as
|
16
|
+
t.boolean :mobile
|
17
|
+
t.boolean :proxy
|
18
|
+
t.boolean :hosting
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
add_column :rails_url_shortener_visits, :ipgeo_id, :integer
|
22
|
+
add_index :rails_url_shortener_visits, :ipgeo_id
|
23
|
+
end
|
24
|
+
def down
|
25
|
+
remove_column :rails_url_shortener_visits, :ipgeo_id
|
26
|
+
drop_table :rails_url_shortener_ipgeos
|
27
|
+
end
|
28
|
+
end
|
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.
|
4
|
+
version: 0.2.0
|
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-
|
11
|
+
date: 2022-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.15.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: http
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 5.0.4
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 5.0.4
|
55
69
|
description: RailsUrlShortener is a simple engine that provide to your rail's app
|
56
70
|
the functionalities for short URLs. Like bitly.com, but working on your project
|
57
71
|
only.
|
@@ -66,12 +80,16 @@ files:
|
|
66
80
|
- Rakefile
|
67
81
|
- app/controllers/rails_url_shortener/urls_controller.rb
|
68
82
|
- app/helpers/rails_url_shortener/urls_helper.rb
|
83
|
+
- app/jobs/rails_url_shortener/application_job.rb
|
84
|
+
- app/jobs/rails_url_shortener/ip_crawler_job.rb
|
69
85
|
- app/models/rails_url_shortener/application_record.rb
|
86
|
+
- app/models/rails_url_shortener/ipgeo.rb
|
70
87
|
- app/models/rails_url_shortener/url.rb
|
71
88
|
- app/models/rails_url_shortener/visit.rb
|
72
89
|
- config/routes.rb
|
73
90
|
- db/migrate/20220407202526_create_rails_url_shortener_urls.rb
|
74
91
|
- db/migrate/20220407202539_create_rails_url_shortener_visits.rb
|
92
|
+
- db/migrate/20220418184647_create_rails_url_shortener_ipgeos.rb
|
75
93
|
- lib/generators/rails_url_shortener/rails_url_shortener_generator.rb
|
76
94
|
- lib/generators/rails_url_shortener/templates/initializer.rb
|
77
95
|
- lib/rails_url_shortener.rb
|
@@ -83,9 +101,9 @@ licenses:
|
|
83
101
|
- GPL-3.0
|
84
102
|
metadata:
|
85
103
|
bug_tracker_uri: https://www.github.com/a-chacon/rails-url-shortener/issues
|
86
|
-
changelog_uri: https://www.github.com/a-chacon/rails-url-shortener/releases/tag/v0.
|
104
|
+
changelog_uri: https://www.github.com/a-chacon/rails-url-shortener/releases/tag/v0.2.0
|
87
105
|
documentation_uri: https://github.com/a-chacon/rails-url-shortener/blob/main/README.md
|
88
|
-
source_code_uri: https://github.com/a-chacon/rails-url-shortener/tree/v0.
|
106
|
+
source_code_uri: https://github.com/a-chacon/rails-url-shortener/tree/v0.2.0
|
89
107
|
rubygems_mfa_required: 'true'
|
90
108
|
post_install_message:
|
91
109
|
rdoc_options: []
|