fustigit 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 +5 -5
- data/CHANGELOG.md +7 -0
- data/README.md +2 -2
- data/Rakefile +3 -1
- data/lib/fustigit.rb +2 -0
- data/lib/fustigit/version.rb +3 -1
- data/lib/uri/git.rb +6 -4
- data/lib/uri/rsync.rb +2 -0
- data/lib/uri/scp.rb +6 -4
- data/lib/uri/ssh.rb +6 -4
- data/lib/uri/triplets.rb +20 -10
- data/spec/spec_helper.rb +3 -1
- data/spec/uri/fustigit_spec.rb +6 -4
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2521507f0a39cbeab8a60b250612e02c0bf5e42fc38afa9be6a16f348bfd3078
|
4
|
+
data.tar.gz: f892592872e5592f192720c5175542d804dce14daf7a1d56084073e2f6225c1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c4a55288990b7c8eb454d1a01ee6be7fffae687a9d4ab2470e6e69972e662806075c37f726f5eea7fda49219b61a22d5535fee5093bb40d0fee4e20e5810680
|
7
|
+
data.tar.gz: 1cf5ef69b396d5b7d1203d468f6a29ba6b26910480ab15a9db26f088264098a0ba868798fe6da0e1f546f2e2e5fb5abd10b21a6311b9dba72c1dd25aa0b98aa7
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file.
|
|
3
3
|
This project attempts to adhere to [Semantic Versioning](http://semver.org/).
|
4
4
|
This changelog attempts to adhere to [Keep a CHANGELOG](http://keepachangelog.com/).
|
5
5
|
|
6
|
+
## [0.2.0] - 24 October 2019
|
7
|
+
### Changed
|
8
|
+
- Updated semantics to address use of frozen string literals
|
9
|
+
- Updated minitest semantics to address global `must_equal` deprecations
|
10
|
+
- Dropped support for Ruby versions older than 2.5.0
|
11
|
+
- Numerous Rubocop related fixups
|
12
|
+
|
6
13
|
## [0.1.4] - 06 March 2017
|
7
14
|
### Added
|
8
15
|
- Fixed a missing '-' in the regex pattern that defined the parts of a triplet
|
data/README.md
CHANGED
@@ -6,11 +6,11 @@
|
|
6
6
|
<dd>To criticize harshly.</dd>
|
7
7
|
</dl>
|
8
8
|
|
9
|
-
|
9
|
+

|
10
10
|
|
11
11
|
### TL;DR
|
12
12
|
|
13
|
-
Fustigit will let you "parse" SCP-like address triplets using Ruby's baked-in [URI library](
|
13
|
+
Fustigit will let you "parse" SCP-like address triplets using Ruby's baked-in [URI library](https://ruby-doc.org/stdlib-2.5.7/libdoc/uri/rdoc/index.html) (... and just a *moderate* amount of monkey-patching) and turn them into probably-valid URI objects.
|
14
14
|
|
15
15
|
### What's a Triplet?
|
16
16
|
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bundler/setup"
|
2
4
|
require "bundler/gem_tasks"
|
3
5
|
require "rake/testtask"
|
@@ -25,6 +27,6 @@ RuboCop::RakeTask.new(:rubocop) do |task|
|
|
25
27
|
end
|
26
28
|
|
27
29
|
desc "Run all spec tests and linters"
|
28
|
-
task check: %w
|
30
|
+
task check: %w[test:spec rubocop]
|
29
31
|
|
30
32
|
task default: :check
|
data/lib/fustigit.rb
CHANGED
data/lib/fustigit/version.rb
CHANGED
data/lib/uri/git.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "uri/generic"
|
2
4
|
|
3
5
|
module URI
|
@@ -7,10 +9,10 @@ module URI
|
|
7
9
|
DEFAULT_PORT = 9418
|
8
10
|
USE_REGISTRY = false
|
9
11
|
|
10
|
-
COMPONENT = [
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
COMPONENT = %i[
|
13
|
+
scheme
|
14
|
+
userinfo
|
15
|
+
host port path
|
14
16
|
].freeze
|
15
17
|
end
|
16
18
|
@@schemes["GIT"] = Git
|
data/lib/uri/rsync.rb
CHANGED
data/lib/uri/scp.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "uri/generic"
|
2
4
|
|
3
5
|
module URI
|
@@ -6,10 +8,10 @@ module URI
|
|
6
8
|
|
7
9
|
DEFAULT_PORT = 22
|
8
10
|
|
9
|
-
COMPONENT = [
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
COMPONENT = %i[
|
12
|
+
scheme
|
13
|
+
userinfo
|
14
|
+
host port path
|
13
15
|
].freeze
|
14
16
|
end
|
15
17
|
@@schemes["SCP"] = SCP
|
data/lib/uri/ssh.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "uri/generic"
|
2
4
|
|
3
5
|
module URI
|
@@ -6,10 +8,10 @@ module URI
|
|
6
8
|
|
7
9
|
DEFAULT_PORT = 22
|
8
10
|
|
9
|
-
COMPONENT = [
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
COMPONENT = %i[
|
12
|
+
scheme
|
13
|
+
userinfo
|
14
|
+
host port path
|
13
15
|
].freeze
|
14
16
|
end
|
15
17
|
@@schemes["SSH"] = SSH
|
data/lib/uri/triplets.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "uri"
|
2
4
|
|
3
5
|
# Triplets is a mix-in for subclasses of URI::Generic, which
|
@@ -9,9 +11,10 @@ module Triplets
|
|
9
11
|
# @return [String] a string representation of the URI components
|
10
12
|
# as an SCP-style Triplet
|
11
13
|
def triplet
|
12
|
-
str =
|
14
|
+
str = []
|
13
15
|
str << "#{user}@" if user && !user.empty?
|
14
16
|
str << "#{host}:#{path}".squeeze("/")
|
17
|
+
str.join ""
|
15
18
|
end
|
16
19
|
private :triplet
|
17
20
|
|
@@ -19,7 +22,7 @@ module Triplets
|
|
19
22
|
# as a valid RFC compliant URI
|
20
23
|
# rubocop:disable Metrics/AbcSize
|
21
24
|
def rfc_uri
|
22
|
-
str =
|
25
|
+
str = []
|
23
26
|
str << "#{scheme}://" if scheme
|
24
27
|
str << "#{user}@" if user
|
25
28
|
if port && port != self.class::DEFAULT_PORT
|
@@ -28,11 +31,14 @@ module Triplets
|
|
28
31
|
else
|
29
32
|
str << [host, path].join("/").squeeze("/")
|
30
33
|
end
|
34
|
+
str.join ""
|
31
35
|
end
|
32
36
|
private :rfc_uri
|
37
|
+
# rubocop:enable Metrics/AbcSize
|
33
38
|
|
34
39
|
def to_s
|
35
40
|
return triplet if triplet?
|
41
|
+
|
36
42
|
rfc_uri
|
37
43
|
end
|
38
44
|
|
@@ -40,7 +46,7 @@ module Triplets
|
|
40
46
|
# if this is a valid triplet.
|
41
47
|
def triplet?
|
42
48
|
# False if self matches a normal URI scheme
|
43
|
-
|
49
|
+
rfc_uri !~ URI.parser.const_get(:SCHEME) &&
|
44
50
|
# False unless self matches a Triplet scheme
|
45
51
|
!!(triplet =~ URI.parser.const_get(:TRIPLET))
|
46
52
|
end
|
@@ -54,13 +60,14 @@ end
|
|
54
60
|
# they're passed.
|
55
61
|
module TripletInterruptus
|
56
62
|
# Determine if a string can be teased apart into URI-like components
|
57
|
-
TRIPLET = %r{\A(?:(?<userinfo>.+)[@]+)?(?<host>[\w.-]+):(?<path>.*)\z}
|
63
|
+
TRIPLET = %r{\A(?:(?<userinfo>.+)[@]+)?(?<host>[\w.-]+):(?<path>.*)\z}.freeze
|
58
64
|
|
59
65
|
# Determine if a string is prefixed with a URI scheme like http:// or ssh://
|
60
|
-
SCHEME = %r{\A(?:(?<scheme>[a-z]+)://)}
|
66
|
+
SCHEME = %r{\A(?:(?<scheme>[a-z]+)://)}.freeze
|
61
67
|
|
62
68
|
def parse(uri)
|
63
69
|
return build_triplet(uri) if triplet?(uri)
|
70
|
+
|
64
71
|
super(uri)
|
65
72
|
end
|
66
73
|
|
@@ -79,6 +86,7 @@ module TripletInterruptus
|
|
79
86
|
def build_triplet(address)
|
80
87
|
values = parse_triplet(address)
|
81
88
|
return nil unless values
|
89
|
+
|
82
90
|
URI.scheme_list[URI.default_triplet_type].build(values)
|
83
91
|
end
|
84
92
|
private :build_triplet
|
@@ -86,13 +94,14 @@ module TripletInterruptus
|
|
86
94
|
def parse_triplet(address)
|
87
95
|
parts = address.match(TRIPLET)
|
88
96
|
return nil unless parts
|
97
|
+
|
89
98
|
Hash[parts.names.map(&:to_sym).zip(parts.captures)]
|
90
99
|
end
|
91
100
|
private :parse_triplet
|
92
101
|
end
|
93
102
|
|
94
103
|
module TripletHandling
|
95
|
-
TRIPLET_CLASSES = %w
|
104
|
+
TRIPLET_CLASSES = %w[Git SCP SSH].freeze
|
96
105
|
|
97
106
|
def self.included(base)
|
98
107
|
base.extend(TripletHandling)
|
@@ -103,15 +112,15 @@ module TripletHandling
|
|
103
112
|
end
|
104
113
|
|
105
114
|
def default_triplet_type=(value)
|
106
|
-
unless TRIPLET_CLASSES.include?(value)
|
107
|
-
|
108
|
-
end
|
115
|
+
raise ArgumentError, "'#{value}' is not one of: #{TRIPLET_CLASSES.join(', ')}" unless TRIPLET_CLASSES.include?(value)
|
116
|
+
|
109
117
|
@default_triplet_type = value
|
110
118
|
end
|
111
119
|
|
112
120
|
def parser
|
113
121
|
return URI::RFC3986_Parser if
|
114
122
|
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.0")
|
123
|
+
|
115
124
|
URI::Parser
|
116
125
|
end
|
117
126
|
end
|
@@ -129,10 +138,11 @@ module URI
|
|
129
138
|
# fall through to the original URI::Parser.parse method.
|
130
139
|
#
|
131
140
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.0")
|
132
|
-
# rubocop:disable
|
141
|
+
# rubocop:disable Naming/ClassAndModuleCamelCase
|
133
142
|
class RFC3986_Parser
|
134
143
|
prepend TripletInterruptus
|
135
144
|
end
|
145
|
+
# rubocop:enable Naming/ClassAndModuleCamelCase
|
136
146
|
else
|
137
147
|
class Parser
|
138
148
|
prepend TripletInterruptus
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bundler/setup"
|
2
4
|
require "minitest/spec"
|
3
5
|
require "minitest/autorun"
|
@@ -10,7 +12,7 @@ if ENV["COVERAGE"]
|
|
10
12
|
require "simplecov"
|
11
13
|
SimpleCov.start do
|
12
14
|
# exclude common Bundler locations
|
13
|
-
%w
|
15
|
+
%w[.bundle vendor].each { |dir| add_filter dir }
|
14
16
|
# exclude test code
|
15
17
|
add_filter "spec"
|
16
18
|
end
|
data/spec/uri/fustigit_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
require "fustigit"
|
3
5
|
|
@@ -7,7 +9,7 @@ describe URI do # rubocop:disable Metrics/BlockLength
|
|
7
9
|
repos.each do |repo|
|
8
10
|
describe %(#parse takes given URI "#{repo}") do
|
9
11
|
it "returns URI::#{protocol}" do
|
10
|
-
URI.parse(repo).is_a?(URI.const_get(protocol)).must_equal true
|
12
|
+
_(URI.parse(repo).is_a?(URI.const_get(protocol))).must_equal true
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
@@ -16,7 +18,7 @@ describe URI do # rubocop:disable Metrics/BlockLength
|
|
16
18
|
@git_repos["paths"].each do |repo|
|
17
19
|
describe %(#parse takes path "#{repo}") do
|
18
20
|
it "returns URI::Generic" do
|
19
|
-
URI.parse(repo).is_a?(URI::Generic).must_equal true
|
21
|
+
_(URI.parse(repo).is_a?(URI::Generic)).must_equal true
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -24,11 +26,11 @@ describe URI do # rubocop:disable Metrics/BlockLength
|
|
24
26
|
@git_repos["triplets"].each do |repo|
|
25
27
|
describe %(#parse takes triplet "#{repo}") do
|
26
28
|
it "returns URI::#{URI.default_triplet_type}" do
|
27
|
-
URI.parse(repo).is_a?(URI.const_get(URI.default_triplet_type)).must_equal true
|
29
|
+
_(URI.parse(repo).is_a?(URI.const_get(URI.default_triplet_type))).must_equal true
|
28
30
|
end
|
29
31
|
|
30
32
|
it "recognizes URI::#{URI.default_triplet_type} as a triplet" do
|
31
|
-
URI.parse(repo).triplet
|
33
|
+
_(URI.parse(repo).triplet?).must_equal true
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fustigit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan McKern
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: '"Parse" SCP-like address triplets with the Standard Ruby URI Library.'
|
14
14
|
email: ryan@orangefort.com
|
@@ -41,15 +41,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
41
41
|
requirements:
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: 2.
|
44
|
+
version: 2.5.0
|
45
45
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0'
|
50
50
|
requirements: []
|
51
|
-
|
52
|
-
rubygems_version: 2.6.10
|
51
|
+
rubygems_version: 3.0.6
|
53
52
|
signing_key:
|
54
53
|
specification_version: 3
|
55
54
|
summary: Use URI to "parse" SCP-like triplets
|