github_urls 0.1.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f6613c312b7797a277b0c47bf6c9d5537843ea9
4
- data.tar.gz: 16d5a498f4af1291d1b249d3278cdbf90e5aa910
3
+ metadata.gz: 8c390218d35e75397d87eae2c93c3e3923fb6f5f
4
+ data.tar.gz: 053a741a0be43c4c7f6cf3e58d908e5e098e61a6
5
5
  SHA512:
6
- metadata.gz: 97e8c852ba26e2515ff33cb92eb6fe44b612fab425c9ac0e0ac7c8b3aecc20b87e22dd563a55b4b8cc3a5b36c71ea51ceedfc7ce8918d3bdf379a8f43d6d8459
7
- data.tar.gz: c3b62350c4411b1603ad02706436e27c58c8951c684145fc772d43bb9645b16e5f4b3dd7556b5ffdfec9ec43d5972171b78419ed8e88a31944c81e6751babfc6
6
+ metadata.gz: 8f049411671636b4eb972b8f9b82b30325b9cb6c7ee966e0712b98663d4f878e4f8c1f28617d07805cbeb688539b19d897bcb3bb07e97623fa9ee50058ee5d84
7
+ data.tar.gz: 5f905b289654b31d426fbca2e2e02ee930640d150240adb2d5415b08c98512a06e09be855ad443a2b0d738d0c50bad30618a3867b6bc87b51a111c1d83044ca3
@@ -0,0 +1,112 @@
1
+ module GithubUrls
2
+ class Parser
3
+ def self.parse(url)
4
+ new(url).parse
5
+ end
6
+
7
+ attr_accessor :url
8
+
9
+ def initialize(url)
10
+ @url = url
11
+ end
12
+
13
+ def parse
14
+ return nil unless parseable?
15
+
16
+ if url = extractable_early?
17
+ url
18
+ else
19
+ clean_url
20
+ end
21
+ end
22
+
23
+ def clean_url
24
+ remove_whitespace
25
+ remove_brackets
26
+ remove_anchors
27
+ remove_querystring
28
+ remove_auth_user
29
+ remove_equals_sign
30
+ remove_scheme
31
+ remove_subdomain
32
+ remove_github_domain
33
+ remove_git_extension
34
+ remove_git_scheme
35
+ remove_extra_segments
36
+ format_url
37
+ end
38
+
39
+ def extractable_early?
40
+ return false if github_website_url?
41
+
42
+ match = url.match(/([\w\.@\:\-_~]+)\.github\.(io|com|org)\/([\w\.@\:\-\_\~]+)/i)
43
+ if match && match.length == 4
44
+ return "#{match[1]}/#{match[3]}"
45
+ end
46
+
47
+ nil
48
+ end
49
+
50
+ def parseable?
51
+ !url.nil? && url.include?('github')
52
+ end
53
+
54
+ def remove_extra_segments
55
+ self.url = url.split('/').reject(&:blank?)[0..1]
56
+ end
57
+
58
+ def remove_brackets
59
+ url.gsub!(/>|<|\(|\)|\[|\]/, '')
60
+ end
61
+
62
+ def remove_querystring
63
+ url.gsub!(/(\?\S*)$/i, '')
64
+ end
65
+
66
+ def remove_anchors
67
+ url.gsub!(/(#\S*)$/i, '')
68
+ end
69
+
70
+ def remove_git_scheme
71
+ url.gsub!(/git\/\//i, '')
72
+ end
73
+
74
+ def remove_git_extension
75
+ url.gsub!(/(\.git|\/)$/i, '')
76
+ end
77
+
78
+ def remove_equals_sign
79
+ self.url = url.split('=')[-1]
80
+ end
81
+
82
+ def remove_auth_user
83
+ self.url = url.split('@')[-1]
84
+ end
85
+
86
+ def remove_whitespace
87
+ url.gsub!(/\s/, '')
88
+ end
89
+
90
+ def remove_scheme
91
+ url.gsub!(/(((git|ssh|hg|svn|scm|http|https)+?:)+?)/i, '')
92
+ end
93
+
94
+ def remove_subdomain
95
+ url.gsub!(/(www|ssh|raw|git|wiki)+?\./i, '')
96
+ end
97
+
98
+ def remove_github_domain
99
+ url.gsub!(/(github.io|github.com|github.org|raw.githubusercontent.com)+?(:|\/)?/i, '')
100
+ end
101
+
102
+ def github_website_url?
103
+ url.match(/www.github.(io|com|org)/i)
104
+ end
105
+
106
+ def format_url
107
+ return nil unless url.length == 2
108
+ url.join('/')
109
+ end
110
+ end
111
+ end
112
+
@@ -1,3 +1,3 @@
1
1
  module GithubUrls
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/github_urls.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "github_urls/version"
2
+ require "github_urls/parser"
2
3
 
3
4
  class Object
4
5
  def blank?
@@ -8,32 +9,6 @@ end
8
9
 
9
10
  module GithubUrls
10
11
  def self.parse(url_string)
11
- return nil if url_string.nil?
12
- return nil unless url_string.include?('github')
13
- if extract_github_io_name(url_string)
14
- return extract_github_io_name(url_string)
15
- end
16
- url_string = url_string.gsub(/\s/, '')
17
- url_string = url_string.split('@')[-1]
18
- url_string = url_string.split('=')[-1]
19
- url_string = url_string.gsub(/(((git|ssh|hg|svn|scm|http|https)+?:)+?)/i, '')
20
- url_string = url_string.gsub(/(www|ssh|raw|git|wiki)+?\./i, '')
21
- url_string = url_string.gsub(/(github.io|github.com|github.org|raw.githubusercontent.com)+?(:|\/)?/i, '')
22
- url_string = url_string.gsub(/(\.git|\/)$/i, '')
23
- url_string = url_string.gsub(/git\/\//i, '')
24
- url_string = url_string.gsub(/(#\S*)$/i, '')
25
- url_string = url_string.gsub(/(\?\S*)$/i, '')
26
- url_string = url_string.gsub(/>|<|(|)|[|]/, '')
27
- url_string = url_string.split('/').reject(&:blank?)[0..1]
28
- return nil unless url_string.length == 2
29
- url_string.join('/')
30
- end
31
-
32
- def self.extract_github_io_name(url)
33
- return nil if url.nil?
34
- return nil if url.match(/www.github.(io|com|org)/i)
35
- match = url.match(/([\w\.@\:\-_~]+)\.github\.(io|com|org)\/([\w\.@\:\-\_\~]+)/i)
36
- return nil unless match && match.length == 4
37
- "#{match[1]}/#{match[3]}"
12
+ Parser.new(url_string).parse
38
13
  end
39
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github_urls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-16 00:00:00.000000000 Z
11
+ date: 2016-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,6 +71,7 @@ files:
71
71
  - bin/setup
72
72
  - github_urls.gemspec
73
73
  - lib/github_urls.rb
74
+ - lib/github_urls/parser.rb
74
75
  - lib/github_urls/version.rb
75
76
  homepage: https://github.com/librariesio/github_urls
76
77
  licenses: