librariesio-url-parser 1.0.1 → 1.0.2
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/Gemfile +0 -2
- data/Gemfile.lock +1 -7
- data/README.md +1 -0
- data/lib/apache_svn_url_parser.rb +66 -0
- data/lib/librariesio-url-parser.rb +2 -1
- data/lib/url_parser.rb +5 -4
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39533f7a7c92f1b4bcccd5a9a46b3c2ae5d14f04da87b0d643339be188184dfc
|
4
|
+
data.tar.gz: bcf4fd5128de3343a11f46b25fadf2cf0f0daf479a9f37824f2d0ac93534753b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27401dad229d48fd32ec999b91ddf171a708b847fdbfbbb21b283cf6b72e1f8280731ccd2f51a012bdfcf7d73f9087a7c00ab8b8db3109b55913a434be70dba1
|
7
|
+
data.tar.gz: ed74167bc7f4b712209ecf9e0fddbafe7c5c9f77dcda9fcfb883b658d8e99ee8283d89a70f4ddecd2fd3a62912c5cb04c72358804dbedb44932e0adafae75594
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,17 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
librariesio-url-parser (1.0.
|
4
|
+
librariesio-url-parser (1.0.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
coderay (1.1.3)
|
10
9
|
diff-lcs (1.5.0)
|
11
|
-
method_source (1.0.0)
|
12
|
-
pry (0.14.1)
|
13
|
-
coderay (~> 1.1)
|
14
|
-
method_source (~> 1.0)
|
15
10
|
rake (12.3.3)
|
16
11
|
rspec (3.11.0)
|
17
12
|
rspec-core (~> 3.11.0)
|
@@ -34,7 +29,6 @@ PLATFORMS
|
|
34
29
|
|
35
30
|
DEPENDENCIES
|
36
31
|
librariesio-url-parser!
|
37
|
-
pry (~> 0.14.1)
|
38
32
|
rake (~> 12.0)
|
39
33
|
rspec (~> 3.0)
|
40
34
|
rspec_junit_formatter (~> 0.5)
|
data/README.md
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class ApacheSvnUrlParser < URLParser
|
3
|
+
SUBDIR_NAMES = %w[trunk tags branches].freeze
|
4
|
+
private
|
5
|
+
|
6
|
+
def full_domain
|
7
|
+
'https://svn.apache.org/viewvc'
|
8
|
+
end
|
9
|
+
|
10
|
+
def tlds
|
11
|
+
%w(org)
|
12
|
+
end
|
13
|
+
|
14
|
+
def domain
|
15
|
+
'svn.apache'
|
16
|
+
end
|
17
|
+
|
18
|
+
def domain_regex
|
19
|
+
# match only the viewvc endpoint at the domain
|
20
|
+
"#{domain.split("/").first}\.(#{tlds.join('|')})\/viewvc"
|
21
|
+
end
|
22
|
+
|
23
|
+
def remove_domain
|
24
|
+
# find the matches for any github domain characters in the url string
|
25
|
+
# and replace only the first match incase we find a repo with something like github.com as the name
|
26
|
+
url.sub!(/(apache\.org\/(viewvc|repos))+?(:|\/)?/i, '')
|
27
|
+
end
|
28
|
+
|
29
|
+
def extractable_early?
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
def remove_extra_segments
|
34
|
+
# split the url by / and remove any empty sections
|
35
|
+
self.url = url.split('/').reject{ |s| s.strip.empty? }
|
36
|
+
|
37
|
+
# check to see if any repository subdirectories are included in the segments
|
38
|
+
# this parser is parsing SVN projects, so any common folders used for branching should trip this
|
39
|
+
# truncate the array of segments to stop once we hit a top level sub directory typically seen in SVN repos
|
40
|
+
# and return everything up to that point
|
41
|
+
#
|
42
|
+
# for example apache.org/viewvnc/myproject/subproject/tags/my-1.0.0-release should stop at myproject/subproject
|
43
|
+
# since the tags are just part of that repository
|
44
|
+
subdir_index = url.index{ |s| SUBDIR_NAMES.include?(s) }
|
45
|
+
|
46
|
+
# it looks like the maven/pom directory on the Apache SVN server has a bunch of repositories stored under tags
|
47
|
+
# in this special case, grab the directory name under the subdirectory
|
48
|
+
# it looks like this is most likely to be the first directory under tags/
|
49
|
+
in_maven_pom_dir = url[0..1].join("/").downcase == "maven/pom"
|
50
|
+
|
51
|
+
if in_maven_pom_dir
|
52
|
+
self.url = url[0..subdir_index+1] if subdir_index
|
53
|
+
else
|
54
|
+
self.url = url[0..subdir_index-1] if subdir_index
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def format_url
|
59
|
+
# if this is an Array then the url has gone through all the clean up steps
|
60
|
+
#
|
61
|
+
# if this is just a string then the url was not cleaned up and I have no idea how to format it
|
62
|
+
return nil unless url.is_a?(Array) && url.length.positive?
|
63
|
+
|
64
|
+
url.join("/")
|
65
|
+
end
|
66
|
+
end
|
@@ -4,7 +4,8 @@ require_relative "url_parser"
|
|
4
4
|
require_relative "bitbucket_url_parser"
|
5
5
|
require_relative "github_url_parser"
|
6
6
|
require_relative "gitlab_url_parser"
|
7
|
+
require_relative "apache_svn_url_parser"
|
7
8
|
|
8
9
|
module LibrariesioURLParser
|
9
|
-
VERSION = "1.0.
|
10
|
+
VERSION = "1.0.2"
|
10
11
|
end
|
data/lib/url_parser.rb
CHANGED
@@ -30,12 +30,13 @@ class URLParser
|
|
30
30
|
def self.try_all(url)
|
31
31
|
GithubURLParser.parse_to_full_url(url) ||
|
32
32
|
GitlabURLParser.parse_to_full_url(url) ||
|
33
|
-
BitbucketURLParser.parse_to_full_url(url)
|
33
|
+
BitbucketURLParser.parse_to_full_url(url) ||
|
34
|
+
ApacheSvnUrlParser.parse_to_full_url(url)
|
34
35
|
end
|
35
36
|
|
36
37
|
def parse_to_full_url
|
37
38
|
path = parse
|
38
|
-
return nil
|
39
|
+
return nil if path.nil? || path.empty?
|
39
40
|
[full_domain, path].join('/')
|
40
41
|
end
|
41
42
|
|
@@ -151,11 +152,11 @@ class URLParser
|
|
151
152
|
end
|
152
153
|
|
153
154
|
def remove_scheme
|
154
|
-
url.gsub!(/(((git\+https|git|ssh|hg|svn|scm|http|https)+?:)
|
155
|
+
url.gsub!(/(((git\+https|git|ssh|hg|svn|scm|http|https)+?:)(\/\/)?)/i, '')
|
155
156
|
end
|
156
157
|
|
157
158
|
def remove_subdomain
|
158
|
-
url.gsub!(/(www|ssh|raw|git|wiki)+?\./i, '')
|
159
|
+
url.gsub!(/(www|ssh|raw|git|wiki|svn)+?\./i, '')
|
159
160
|
end
|
160
161
|
|
161
162
|
def remove_whitespace
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: librariesio-url-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Pace
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- Gemfile.lock
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
|
+
- lib/apache_svn_url_parser.rb
|
68
69
|
- lib/bitbucket_url_parser.rb
|
69
70
|
- lib/github_url_parser.rb
|
70
71
|
- lib/gitlab_url_parser.rb
|