codestatus 0.1.2 → 0.1.3
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.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
|