tanshuku 0.0.10 → 0.0.11
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/models/tanshuku/url.rb +9 -7
- data/config/routes.rb +1 -1
- data/lib/tanshuku/configuration.rb +16 -0
- data/lib/tanshuku/version.rb +1 -1
- data/lib/tanshuku.rb +10 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58228d834716ae9f1a9415212f4976816aeaf61bd6ff2a1e92672a62bd202a93
|
4
|
+
data.tar.gz: e8ecd16d19d73cdff428f08cd5a3b801e59934fa86d69fa1b182e0da40da1feb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f786879cc78304a288487079e4b2e218be8df2d7c6df4edc8f629ca672369fa583998e2b44bc4d62876b1f242dd24ae0f67201a1a85f391d20fb26dd07d80ca1
|
7
|
+
data.tar.gz: 2b7af5d5181be59774b1d6ae13e12df32347c862cec776139a4ba31da153a38fb63959380e8bebcc931fa707b658799b33eb5a248a7bf765ba77dc9de3397bf9
|
data/app/models/tanshuku/url.rb
CHANGED
@@ -8,6 +8,8 @@ require "securerandom"
|
|
8
8
|
|
9
9
|
module Tanshuku
|
10
10
|
class Url < ActiveRecord::Base
|
11
|
+
DEFAULT_NAMESPACE = ""
|
12
|
+
|
11
13
|
MAX_URL_LENGTH = 10_000
|
12
14
|
URL_PATTERN = %r{\A(?:https?://\w+|/)}
|
13
15
|
KEY_LENGTH = 20
|
@@ -20,7 +22,7 @@ module Tanshuku
|
|
20
22
|
# duplicated. Then rescue the exception and try to retry.
|
21
23
|
# validates :url, :hashed_url, :key, uniqueness: true
|
22
24
|
|
23
|
-
def self.shorten(original_url)
|
25
|
+
def self.shorten(original_url, namespace: DEFAULT_NAMESPACE)
|
24
26
|
raise ArgumentError, "original_url should be present" unless original_url
|
25
27
|
|
26
28
|
url = normalize_url(original_url)
|
@@ -29,7 +31,7 @@ module Tanshuku
|
|
29
31
|
begin
|
30
32
|
transaction do
|
31
33
|
record =
|
32
|
-
create_or_find_by!(hashed_url: hash_url(url)) do |r|
|
34
|
+
create_or_find_by!(hashed_url: hash_url(url, namespace:)) do |r|
|
33
35
|
r.attributes = { url:, key: generate_key }
|
34
36
|
end
|
35
37
|
|
@@ -50,9 +52,9 @@ module Tanshuku
|
|
50
52
|
original_url
|
51
53
|
end
|
52
54
|
|
53
|
-
def self.find_by_url(url)
|
55
|
+
def self.find_by_url(url, namespace: DEFAULT_NAMESPACE)
|
54
56
|
normalized_url = normalize_url(url)
|
55
|
-
hashed_url = hash_url(normalized_url)
|
57
|
+
hashed_url = hash_url(normalized_url, namespace:)
|
56
58
|
|
57
59
|
find_by(hashed_url:)
|
58
60
|
end
|
@@ -64,8 +66,8 @@ module Tanshuku
|
|
64
66
|
parsed_url.normalize.to_s
|
65
67
|
end
|
66
68
|
|
67
|
-
def self.hash_url(url)
|
68
|
-
Digest::SHA512.hexdigest(url)
|
69
|
+
def self.hash_url(url, namespace: DEFAULT_NAMESPACE)
|
70
|
+
Digest::SHA512.hexdigest(namespace.to_s + url)
|
69
71
|
end
|
70
72
|
|
71
73
|
def self.generate_key
|
@@ -73,7 +75,7 @@ module Tanshuku
|
|
73
75
|
end
|
74
76
|
|
75
77
|
def self.report_exception(exception:, original_url:)
|
76
|
-
|
78
|
+
Tanshuku.config.exception_reporter.call(exception:, original_url:)
|
77
79
|
end
|
78
80
|
|
79
81
|
def shortened_url
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tanshuku
|
4
|
+
class Configuration
|
5
|
+
module DefaultExceptionReporter
|
6
|
+
def self.call(exception:, original_url:)
|
7
|
+
Rails.logger.warn("Tanshuku - Failed to shorten a URL: #{exception.inspect} for #{original_url.inspect}")
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
include ActiveModel::Attributes
|
12
|
+
|
13
|
+
attribute :default_url_options, default: {}
|
14
|
+
attribute :exception_reporter, default: DefaultExceptionReporter
|
15
|
+
end
|
16
|
+
end
|
data/lib/tanshuku/version.rb
CHANGED
data/lib/tanshuku.rb
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "tanshuku/configuration"
|
3
4
|
require_relative "tanshuku/engine"
|
4
5
|
require_relative "tanshuku/version"
|
5
6
|
|
6
7
|
module Tanshuku
|
7
|
-
|
8
|
+
def self.config
|
9
|
+
Mutex.new.synchronize do
|
10
|
+
@config ||= Configuration.new
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.configure
|
15
|
+
yield config
|
16
|
+
end
|
8
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tanshuku
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kg8m
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- config/routes.rb
|
57
57
|
- db/migrate/20230220123456_create_tanshuku_urls.rb
|
58
58
|
- lib/tanshuku.rb
|
59
|
+
- lib/tanshuku/configuration.rb
|
59
60
|
- lib/tanshuku/engine.rb
|
60
61
|
- lib/tanshuku/version.rb
|
61
62
|
homepage: https://github.com/kg8m/tanshuku
|
@@ -81,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
82
|
- !ruby/object:Gem::Version
|
82
83
|
version: '0'
|
83
84
|
requirements: []
|
84
|
-
rubygems_version: 3.4.
|
85
|
+
rubygems_version: 3.4.6
|
85
86
|
signing_key:
|
86
87
|
specification_version: 4
|
87
88
|
summary: Tanshuku is a simple and performance aware Rails engine for shortening URLs.
|