codestatus 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/codestatus.rb +10 -1
- data/lib/codestatus/package_resolvers/base.rb +24 -5
- data/lib/codestatus/package_resolvers/npm_resolver.rb +15 -4
- data/lib/codestatus/package_resolvers/package_not_found_error.rb +6 -0
- data/lib/codestatus/package_resolvers/repository_not_found_error.rb +6 -0
- data/lib/codestatus/package_resolvers/rubygems_resolver.rb +14 -4
- data/lib/codestatus/repositories/base.rb +18 -0
- data/lib/codestatus/repositories/bitbucket_repository.rb +5 -7
- data/lib/codestatus/repositories/github_repository.rb +8 -8
- data/lib/codestatus/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 296b1f49ece050248a9b6e46bfca68be9b534e97
|
4
|
+
data.tar.gz: 9ce227d541dc631e227564dfafb7f8bcfa64bfdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64bb41856739e0a7830e70030d424cd062b944853b1d4c93b4ffe2628c66240f8ba5df31a881669c9ca177e800777bcecc1f9d0fef0123cea9b2a6b1b47dbc75
|
7
|
+
data.tar.gz: 44e451ae94f63f2e5cc824e62be62370046b40f3f667a35313d3b379ac6d1c215ae64c29bf7ef91badba1f5340287d8d30eb15dca4bd7ebf7d7d7cacc524428a
|
data/Gemfile.lock
CHANGED
data/lib/codestatus.rb
CHANGED
@@ -4,13 +4,22 @@ require "codestatus/cli"
|
|
4
4
|
require "codestatus/package_resolvers/base"
|
5
5
|
require "codestatus/package_resolvers/rubygems_resolver"
|
6
6
|
require "codestatus/package_resolvers/npm_resolver"
|
7
|
+
require "codestatus/package_resolvers/repository_not_found_error"
|
8
|
+
require "codestatus/package_resolvers/package_not_found_error"
|
9
|
+
require "codestatus/repositories/base"
|
7
10
|
require "codestatus/repositories/github_repository"
|
8
11
|
require "codestatus/repositories/bitbucket_repository"
|
9
12
|
|
10
13
|
module Codestatus
|
11
14
|
def self.status(repository: nil, registry: nil, package: nil)
|
12
15
|
if !repository && registry && package
|
13
|
-
|
16
|
+
begin
|
17
|
+
repository = resolver(registry).resolve!(package)
|
18
|
+
rescue PackageResolvers::PackageNotFoundError
|
19
|
+
abort "#{package}: Package not found"
|
20
|
+
rescue PackageResolvers::RepositoryNotFoundError
|
21
|
+
abort "#{package}: Repository not found"
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
16
25
|
if repository
|
@@ -4,24 +4,43 @@ module Codestatus
|
|
4
4
|
GITHUB_REPOSITORY_REGEXP = %r{(https?|git)://github.com/(?<owner>[^/]*)/(?<repo>[^/]*)(\.git)?/?.*}.freeze
|
5
5
|
BITBUCKET_REPOSITORY_REGEXP = %r{(https?|git)://bitbucket.org/(?<owner>[^/]*)/(?<repo>[^/]*)(\.git)?/?.*}.freeze
|
6
6
|
|
7
|
-
def self.resolve(package
|
8
|
-
self.new(package
|
7
|
+
def self.resolve(package)
|
8
|
+
self.new(package).resolve
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def self.resolve!(package)
|
12
|
+
self.new(package).resolve!
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(package)
|
12
16
|
@package = package
|
13
17
|
end
|
14
18
|
|
15
19
|
attr_reader :package
|
16
20
|
|
17
21
|
def resolve
|
18
|
-
|
22
|
+
detect_repository
|
23
|
+
rescue PackageNotFoundError, RepositoryNotFoundError
|
24
|
+
# noop
|
25
|
+
end
|
19
26
|
|
20
|
-
|
27
|
+
def resolve!
|
28
|
+
detect_repository
|
21
29
|
end
|
22
30
|
|
23
31
|
private
|
24
32
|
|
33
|
+
def detect_repository
|
34
|
+
raise PackageNotFoundError unless found?
|
35
|
+
repository = github_repository || bitbucket_repository
|
36
|
+
raise RepositoryNotFoundError unless repository
|
37
|
+
repository
|
38
|
+
end
|
39
|
+
|
40
|
+
def found?
|
41
|
+
raise NotImplementedError
|
42
|
+
end
|
43
|
+
|
25
44
|
def github_repository
|
26
45
|
urls.map { |url|
|
27
46
|
matched = GITHUB_REPOSITORY_REGEXP.match(url)
|
@@ -7,6 +7,10 @@ module Codestatus
|
|
7
7
|
|
8
8
|
private
|
9
9
|
|
10
|
+
def found?
|
11
|
+
package_info
|
12
|
+
end
|
13
|
+
|
10
14
|
def urls
|
11
15
|
[
|
12
16
|
bugs_url,
|
@@ -16,19 +20,26 @@ module Codestatus
|
|
16
20
|
end
|
17
21
|
|
18
22
|
def bugs_url
|
19
|
-
package_info
|
23
|
+
package_info&.dig('bugs', 'url')
|
20
24
|
end
|
21
25
|
|
22
26
|
def homepage_url
|
23
|
-
package_info
|
27
|
+
package_info&.dig('homepage')
|
24
28
|
end
|
25
29
|
|
26
30
|
def repository_url
|
27
|
-
package_info
|
31
|
+
package_info&.dig('repository', 'url')
|
28
32
|
end
|
29
33
|
|
30
34
|
def package_info
|
31
|
-
@package_info ||=
|
35
|
+
@package_info ||= request(package_uri)
|
36
|
+
end
|
37
|
+
|
38
|
+
def request(uri)
|
39
|
+
response = client.get(uri)
|
40
|
+
JSON.parse(response)
|
41
|
+
rescue RestClient::NotFound
|
42
|
+
nil
|
32
43
|
end
|
33
44
|
|
34
45
|
def client
|
@@ -5,6 +5,10 @@ module Codestatus
|
|
5
5
|
class RubygemsResolver < Base
|
6
6
|
private
|
7
7
|
|
8
|
+
def found?
|
9
|
+
gem_info
|
10
|
+
end
|
11
|
+
|
8
12
|
def urls
|
9
13
|
[
|
10
14
|
source_code_uri,
|
@@ -14,19 +18,25 @@ module Codestatus
|
|
14
18
|
end
|
15
19
|
|
16
20
|
def homepage_uri
|
17
|
-
gem_info
|
21
|
+
gem_info&.dig('homepage_uri')
|
18
22
|
end
|
19
23
|
|
20
24
|
def source_code_uri
|
21
|
-
gem_info
|
25
|
+
gem_info&.dig('source_code_uri')
|
22
26
|
end
|
23
27
|
|
24
28
|
def bug_tracker_uri
|
25
|
-
gem_info
|
29
|
+
gem_info&.dig('bug_tracker_uri')
|
26
30
|
end
|
27
31
|
|
28
32
|
def gem_info
|
29
|
-
@info ||=
|
33
|
+
@info ||= begin
|
34
|
+
Gems.info(package)
|
35
|
+
rescue JSON::ParserError
|
36
|
+
# When the package is not found on rubygems,
|
37
|
+
# Gems does try to parse html as json and raise JSON::ParserError :sob:
|
38
|
+
nil
|
39
|
+
end
|
30
40
|
end
|
31
41
|
end
|
32
42
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Codestatus
|
2
|
+
module Repositories
|
3
|
+
class Base
|
4
|
+
def initialize(slug)
|
5
|
+
@slug = slug
|
6
|
+
end
|
7
|
+
attr_reader :slug
|
8
|
+
|
9
|
+
def status(ref)
|
10
|
+
raise NotImplementedError
|
11
|
+
end
|
12
|
+
|
13
|
+
def html_url
|
14
|
+
raise NotImplementedError
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -2,13 +2,8 @@ require 'rest-client'
|
|
2
2
|
|
3
3
|
module Codestatus
|
4
4
|
module Repositories
|
5
|
-
class BitbucketRepository
|
5
|
+
class BitbucketRepository < Base
|
6
6
|
BITBUCKET_API_ENDPOINT = 'https://api.bitbucket.org/2.0/' #repositories/atlassian/aui
|
7
|
-
def initialize(slug)
|
8
|
-
# 'atlassian/aui'
|
9
|
-
@slug = slug
|
10
|
-
end
|
11
|
-
|
12
7
|
# This combined status is generated by the rule of GitHub's
|
13
8
|
# https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
|
14
9
|
def status(ref = main_branch)
|
@@ -30,7 +25,10 @@ module Codestatus
|
|
30
25
|
BuildStatus.new(sha: sha, status: state)
|
31
26
|
end
|
32
27
|
|
33
|
-
|
28
|
+
# https://bitbucket.org/atlassian/aui
|
29
|
+
def html_url
|
30
|
+
repository.dig('links', 'html', 'href')
|
31
|
+
end
|
34
32
|
|
35
33
|
private
|
36
34
|
|
@@ -2,20 +2,20 @@ require "octokit"
|
|
2
2
|
|
3
3
|
module Codestatus
|
4
4
|
module Repositories
|
5
|
-
class GitHubRepository
|
6
|
-
def initialize(slug)
|
7
|
-
# 'influitive/apartment'
|
8
|
-
@repo = slug
|
9
|
-
end
|
10
|
-
|
5
|
+
class GitHubRepository < Base
|
11
6
|
# combined status on github
|
12
7
|
# https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
|
13
8
|
def status(ref = default_branch)
|
14
|
-
response = client.combined_status(
|
9
|
+
response = client.combined_status(slug, ref)
|
15
10
|
|
16
11
|
BuildStatus.new(sha: response.sha, status: response.state)
|
17
12
|
end
|
18
13
|
|
14
|
+
# https://github.com/meganemura/codestatus
|
15
|
+
def html_url
|
16
|
+
repository['html_url']
|
17
|
+
end
|
18
|
+
|
19
19
|
private
|
20
20
|
|
21
21
|
def default_branch
|
@@ -23,7 +23,7 @@ module Codestatus
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def repository
|
26
|
-
@repository ||= client.repository(
|
26
|
+
@repository ||= client.repository(slug)
|
27
27
|
end
|
28
28
|
|
29
29
|
def client
|
data/lib/codestatus/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codestatus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- meganemura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -161,7 +161,10 @@ files:
|
|
161
161
|
- lib/codestatus/cli.rb
|
162
162
|
- lib/codestatus/package_resolvers/base.rb
|
163
163
|
- lib/codestatus/package_resolvers/npm_resolver.rb
|
164
|
+
- lib/codestatus/package_resolvers/package_not_found_error.rb
|
165
|
+
- lib/codestatus/package_resolvers/repository_not_found_error.rb
|
164
166
|
- lib/codestatus/package_resolvers/rubygems_resolver.rb
|
167
|
+
- lib/codestatus/repositories/base.rb
|
165
168
|
- lib/codestatus/repositories/bitbucket_repository.rb
|
166
169
|
- lib/codestatus/repositories/github_repository.rb
|
167
170
|
- lib/codestatus/version.rb
|