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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c422e70b25fb0d3623d7b93e15695d30efae525f
4
- data.tar.gz: 8624d34d7925435b19f9bb9b5a6961b2fd61894b
3
+ metadata.gz: 296b1f49ece050248a9b6e46bfca68be9b534e97
4
+ data.tar.gz: 9ce227d541dc631e227564dfafb7f8bcfa64bfdd
5
5
  SHA512:
6
- metadata.gz: 6cf171f0b406a442f15596b4ad0d681c5bafc7d75055d4024a2ce5a1577756ee938aaafc292f51fc5af532f8028692cdba416788ea96c25c801536bf448b6239
7
- data.tar.gz: 35b775075e73d08eb83a3c3a12ae89a9d6b022ac49ca6ac9b50d5344a554a4f47eaa8aa73d3db97e6607d41b41040b478b859bd62d5b5bf0b6da06b45493c036
6
+ metadata.gz: 64bb41856739e0a7830e70030d424cd062b944853b1d4c93b4ffe2628c66240f8ba5df31a881669c9ca177e800777bcecc1f9d0fef0123cea9b2a6b1b47dbc75
7
+ data.tar.gz: 44e451ae94f63f2e5cc824e62be62370046b40f3f667a35313d3b379ac6d1c215ae64c29bf7ef91badba1f5340287d8d30eb15dca4bd7ebf7d7d7cacc524428a
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codestatus (0.1.2)
4
+ codestatus (0.1.3)
5
5
  gems
6
6
  octokit
7
7
  rest-client
@@ -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
- repository = resolver(registry).resolve(package: package)
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: package).resolve
7
+ def self.resolve(package)
8
+ self.new(package).resolve
9
9
  end
10
10
 
11
- def initialize(package:)
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
- @package = package
22
+ detect_repository
23
+ rescue PackageNotFoundError, RepositoryNotFoundError
24
+ # noop
25
+ end
19
26
 
20
- github_repository || bitbucket_repository
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.dig('bugs', 'url')
23
+ package_info&.dig('bugs', 'url')
20
24
  end
21
25
 
22
26
  def homepage_url
23
- package_info.dig('homepage')
27
+ package_info&.dig('homepage')
24
28
  end
25
29
 
26
30
  def repository_url
27
- package_info.dig('repository', 'url')
31
+ package_info&.dig('repository', 'url')
28
32
  end
29
33
 
30
34
  def package_info
31
- @package_info ||= JSON.parse(client.get(package_uri))
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
@@ -0,0 +1,6 @@
1
+ module Codestatus
2
+ module PackageResolvers
3
+ class PackageNotFoundError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Codestatus
2
+ module PackageResolvers
3
+ class RepositoryNotFoundError < StandardError
4
+ end
5
+ end
6
+ end
@@ -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['homepage_uri']
21
+ gem_info&.dig('homepage_uri')
18
22
  end
19
23
 
20
24
  def source_code_uri
21
- gem_info['source_code_uri']
25
+ gem_info&.dig('source_code_uri')
22
26
  end
23
27
 
24
28
  def bug_tracker_uri
25
- gem_info['bug_tracker_uri']
29
+ gem_info&.dig('bug_tracker_uri')
26
30
  end
27
31
 
28
32
  def gem_info
29
- @info ||= Gems.info(package)
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
- attr_reader :slug
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(@repo, ref)
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(@repo)
26
+ @repository ||= client.repository(slug)
27
27
  end
28
28
 
29
29
  def client
@@ -1,3 +1,3 @@
1
1
  module Codestatus
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
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.2
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-03 00:00:00.000000000 Z
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