Class: Dependabot::Source
- Inherits:
-
Object
- Object
- Dependabot::Source
- Defined in:
- lib/dependabot/source.rb
Constant Summary collapse
- GITHUB_SOURCE =
%r{ (?<provider>github) (?:\.com)[/:] (?<repo>[\w.-]+/(?:(?!\.git|\.\s)[\w.-])+) (?:(?:/tree|/blob)/(?<branch>[^/]+)/(?<directory>.*)[\#|/])? }x.freeze
- GITLAB_SOURCE =
%r{ (?<provider>gitlab) (?:\.com)[/:] (?<repo>[^/\s]+/(?:(?!\.git|\.\s)[^/\s#"',])+) (?:(?:/tree|/blob)/(?<branch>[^/]+)/(?<directory>.*)[\#|/])? }x.freeze
- BITBUCKET_SOURCE =
%r{ (?<provider>bitbucket) (?:\.org)[/:] (?<repo>[^/\s]+/(?:(?!\.git|\.\s)[^/\s#"',])+) (?:(?:/src)/(?<branch>[^/]+)/(?<directory>.*)[\#|/])? }x.freeze
- AZURE_SOURCE =
%r{ (?<provider>azure) (?:\.com)[/:] (?<repo>[^/\s]+/([^/\s]+/)?(?:_git/)(?:(?!\.git|\.\s)[^/\s#?"',])+) }x.freeze
- SOURCE_REGEX =
/ (?:#{GITHUB_SOURCE})| (?:#{GITLAB_SOURCE})| (?:#{BITBUCKET_SOURCE})| (?:#{AZURE_SOURCE}) /x.freeze
Instance Attribute Summary collapse
-
#api_endpoint ⇒ Object
Returns the value of attribute api_endpoint.
-
#branch ⇒ Object
Returns the value of attribute branch.
-
#directory ⇒ Object
Returns the value of attribute directory.
-
#hostname ⇒ Object
Returns the value of attribute hostname.
-
#provider ⇒ Object
Returns the value of attribute provider.
-
#repo ⇒ Object
Returns the value of attribute repo.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(provider:, repo:, directory: nil, branch: nil, hostname: nil, api_endpoint: nil) ⇒ Source
constructor
A new instance of Source.
- #organization ⇒ Object
- #project ⇒ Object
- #unscoped_repo ⇒ Object
- #url ⇒ Object
- #url_with_directory ⇒ Object
Constructor Details
#initialize(provider:, repo:, directory: nil, branch: nil, hostname: nil, api_endpoint: nil) ⇒ Source
Returns a new instance of Source.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/dependabot/source.rb', line 55 def initialize(provider:, repo:, directory: nil, branch: nil, hostname: nil, api_endpoint: nil) if hostname.nil? ^ api_endpoint.nil? msg = "Both hostname and api_endpoint must be specified if either "\ "are. Alternatively, both may be left blank to use the "\ "provider's defaults." raise msg end @provider = provider @repo = repo @directory = directory @branch = branch @hostname = hostname || default_hostname(provider) @api_endpoint = api_endpoint || default_api_endpoint(provider) end |
Instance Attribute Details
#api_endpoint ⇒ Object
Returns the value of attribute api_endpoint.
39 40 41 |
# File 'lib/dependabot/source.rb', line 39 def api_endpoint @api_endpoint end |
#branch ⇒ Object
Returns the value of attribute branch.
39 40 41 |
# File 'lib/dependabot/source.rb', line 39 def branch @branch end |
#directory ⇒ Object
Returns the value of attribute directory.
39 40 41 |
# File 'lib/dependabot/source.rb', line 39 def directory @directory end |
#hostname ⇒ Object
Returns the value of attribute hostname.
39 40 41 |
# File 'lib/dependabot/source.rb', line 39 def hostname @hostname end |
#provider ⇒ Object
Returns the value of attribute provider.
39 40 41 |
# File 'lib/dependabot/source.rb', line 39 def provider @provider end |
#repo ⇒ Object
Returns the value of attribute repo.
39 40 41 |
# File 'lib/dependabot/source.rb', line 39 def repo @repo end |
Class Method Details
.from_url(url_string) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/dependabot/source.rb', line 42 def self.from_url(url_string) return unless url_string&.match?(SOURCE_REGEX) captures = url_string.match(SOURCE_REGEX).named_captures new( provider: captures.fetch("provider"), repo: captures.fetch("repo"), directory: captures.fetch("directory"), branch: captures.fetch("branch") ) end |
Instance Method Details
#organization ⇒ Object
100 101 102 |
# File 'lib/dependabot/source.rb', line 100 def organization repo.split("/").first end |
#project ⇒ Object
104 105 106 107 108 109 110 111 |
# File 'lib/dependabot/source.rb', line 104 def project raise "Project is an Azure DevOps concept only" unless provider == "azure" parts = repo.split("/_git/") return parts.first.split("/").last if parts.first.split("/").count == 2 parts.last end |
#unscoped_repo ⇒ Object
113 114 115 |
# File 'lib/dependabot/source.rb', line 113 def unscoped_repo repo.split("/").last end |
#url ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/dependabot/source.rb', line 72 def url case provider when "github" then "https://github.com/" + repo when "bitbucket" then "https://bitbucket.org/" + repo when "gitlab" then "https://gitlab.com/" + repo when "azure" then "https://dev.azure.com/" + repo else raise "Unexpected repo provider '#{provider}'" end end |
#url_with_directory ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/dependabot/source.rb', line 82 def url_with_directory return url if [nil, ".", "/"].include?(directory) case provider when "github", "gitlab" path = Pathname.new(File.join("tree/#{branch || 'HEAD'}", directory)). cleanpath.to_path url + "/" + path when "bitbucket" path = Pathname.new(File.join("src/#{branch || 'default'}", directory)). cleanpath.to_path url + "/" + path when "azure" url + "?path=#{directory}" else raise "Unexpected repo provider '#{provider}'" end end |