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 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