connection_url_resolver 0.0.0 → 1.0.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/CHANGELOG.md +7 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +7 -1
- data/README.md +13 -1
- data/lib/connection_url_resolver.rb +18 -2
- data/lib/connection_url_resolver/uri_decorator.rb +92 -0
- data/lib/connection_url_resolver/version.rb +4 -2
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16b913895179d320a2a95e54e321589102aa947c796fc4dcf343b67045115cf7
|
4
|
+
data.tar.gz: 979bfb34de8c5878d16a8c3b274c7fb773739c6a73215690107d6c000c93309e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51d70d268d006fa299140da6bc5e419c169e17277fb2a7a81ed335002cc09ace0f853bae34157d83408a7376280c481d789d861fb20f6cc2e08b289c24f2db66
|
7
|
+
data.tar.gz: 3384bac2b355464140f559a2b7d627dd4bf90d9b53b82a6b622a7064067fc3fd989924c897522a035b3302ad4ef236dc9c707a2765a7e82d8b032c8a1e04f258
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
connection_url_resolver (
|
4
|
+
connection_url_resolver (1.0.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
coderay (1.1.2)
|
9
10
|
diff-lcs (1.3)
|
11
|
+
method_source (0.9.0)
|
12
|
+
pry (0.11.3)
|
13
|
+
coderay (~> 1.1.0)
|
14
|
+
method_source (~> 0.9.0)
|
10
15
|
rake (12.3.0)
|
11
16
|
rspec (3.7.0)
|
12
17
|
rspec-core (~> 3.7.0)
|
@@ -28,6 +33,7 @@ PLATFORMS
|
|
28
33
|
DEPENDENCIES
|
29
34
|
bundler
|
30
35
|
connection_url_resolver!
|
36
|
+
pry
|
31
37
|
rake
|
32
38
|
rspec (~> 3.7)
|
33
39
|
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# ConnectionUrlResolver
|
2
2
|
|
3
|
+
[](https://travis-ci.org/JuanitoFatas/connection_url_resolver)
|
4
|
+
|
3
5
|
Resolve connection URL into Hash.
|
4
6
|
|
5
7
|
## Installation
|
@@ -20,8 +22,18 @@ Or install it yourself as:
|
|
20
22
|
|
21
23
|
## Usage
|
22
24
|
|
23
|
-
```
|
25
|
+
```ruby
|
26
|
+
url = "mysql2://user:password@localhost:3306/app_dev"
|
24
27
|
ConnectionUrlResolver.new(url).to_hash
|
28
|
+
# =>
|
29
|
+
{
|
30
|
+
"adapter" => "mysql2",
|
31
|
+
"username" => "user",
|
32
|
+
"password" => "password",
|
33
|
+
"port" => "3306",
|
34
|
+
"database" => "app_dev",
|
35
|
+
"host" => "localhost"
|
36
|
+
}
|
25
37
|
```
|
26
38
|
|
27
39
|
## License, Contributor's Guidelines
|
@@ -1,4 +1,20 @@
|
|
1
|
-
|
1
|
+
require_relative "connection_url_resolver/version"
|
2
|
+
require_relative "connection_url_resolver/uri_decorator"
|
2
3
|
|
3
|
-
|
4
|
+
class ConnectionUrlResolver
|
5
|
+
def initialize(url)
|
6
|
+
raise NoURLError if url.empty?
|
7
|
+
|
8
|
+
@uri = URIDecorator.new(url)
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_hash
|
12
|
+
uri.to_hash
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
NoURLError = Class.new(ArgumentError)
|
18
|
+
|
19
|
+
attr_reader :uri
|
4
20
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "uri"
|
4
|
+
|
5
|
+
class ConnectionUrlResolver
|
6
|
+
class URIDecorator
|
7
|
+
def initialize(url)
|
8
|
+
@uri = parser.parse(url)
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_hash
|
12
|
+
connection_hash
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :uri
|
18
|
+
|
19
|
+
def parser
|
20
|
+
@_parser ||= URI::Parser.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def connection_hash
|
24
|
+
unescape_values(connection_hash_with_values)
|
25
|
+
end
|
26
|
+
|
27
|
+
def connection_hash_with_values
|
28
|
+
query_hash.merge(
|
29
|
+
"adapter" => adapter,
|
30
|
+
"username" => user,
|
31
|
+
"password" => password,
|
32
|
+
"port" => port,
|
33
|
+
"database" => database,
|
34
|
+
"host" => host
|
35
|
+
).reject { |_key, value| value.nil? || value.empty? }
|
36
|
+
end
|
37
|
+
|
38
|
+
def query_hash
|
39
|
+
query.split("&").map { |pair| pair.split("=") }.to_h
|
40
|
+
end
|
41
|
+
|
42
|
+
def query
|
43
|
+
uri.query || ""
|
44
|
+
end
|
45
|
+
|
46
|
+
def adapter
|
47
|
+
@_adapter ||= begin
|
48
|
+
adapter = uri.scheme && uri.scheme.tr("-", "_")
|
49
|
+
|
50
|
+
if adapter == "postgres"
|
51
|
+
"postgresql"
|
52
|
+
else
|
53
|
+
adapter
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def user
|
59
|
+
uri.user
|
60
|
+
end
|
61
|
+
|
62
|
+
def password
|
63
|
+
uri.password
|
64
|
+
end
|
65
|
+
|
66
|
+
def port
|
67
|
+
uri.port.to_s
|
68
|
+
end
|
69
|
+
|
70
|
+
def database
|
71
|
+
if adapter == "sqlite3"
|
72
|
+
uri.path
|
73
|
+
else
|
74
|
+
uri.path.sub %r(^/), ""
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def host
|
79
|
+
uri.hostname
|
80
|
+
end
|
81
|
+
|
82
|
+
def unescape_values(hash)
|
83
|
+
hash.transform_values { |value| unescape(value) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def unescape(value)
|
87
|
+
if value.is_a?(String)
|
88
|
+
parser.unescape(value)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: connection_url_resolver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juanito Fatas
|
@@ -20,6 +20,7 @@ files:
|
|
20
20
|
- ".gitignore"
|
21
21
|
- ".rspec"
|
22
22
|
- ".travis.yml"
|
23
|
+
- CHANGELOG.md
|
23
24
|
- Gemfile
|
24
25
|
- Gemfile.lock
|
25
26
|
- LICENSE.txt
|
@@ -29,6 +30,7 @@ files:
|
|
29
30
|
- bin/setup
|
30
31
|
- connection_url_resolver.gemspec
|
31
32
|
- lib/connection_url_resolver.rb
|
33
|
+
- lib/connection_url_resolver/uri_decorator.rb
|
32
34
|
- lib/connection_url_resolver/version.rb
|
33
35
|
homepage: https://github.com/JuanitoFatas/connection_url_resolver
|
34
36
|
licenses:
|