trav3 0.1.1 → 0.2.0

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
  SHA256:
3
- metadata.gz: fa4cd27e0c1a0343759dbcf4b96ababd0fcf179a99caa526b95e8e4b6fdf120e
4
- data.tar.gz: 6b27403fca5fc20c3134b661b76e4747c60eb23973b6ee764468dc98ecf3d41b
3
+ metadata.gz: 83ffd60222c59e6dec4482f0dc8cf8f77084b6818522466ffc6459aa5609962a
4
+ data.tar.gz: 27bc3cd5c536d6b01214c722405f2fe443611041899cdcccb14cf1e555c04d29
5
5
  SHA512:
6
- metadata.gz: 6ea902e6238e08d1708cd7f5f076cf1fca860c1ca82c0425d5a0e16b902f5771e641274c23daccf0f65b9fb38e2ba991c084528031e3053dce306fd8a627d781
7
- data.tar.gz: 8fcf193c13837169146b79048c93cd38acd6435035543f35ed98e8e3e14aabca696382fb691323aac7ee529f376bbb32671fa8f2e9df2f8e0973f56eb8275ff2
6
+ metadata.gz: 99c350cc9fac49deacbfc369e04e3a671bf35e2ec4c2e015440091d929774701636131a71a78c13f783efe72ae613a0af57d0a06aa0b4c70467a681830464710
7
+ data.tar.gz: 6f765eff36c2ba82d592ee21e88bdf7609736f82b245893575a9f349b43db69f48962a6e21e0a0bb3f8b438e64f179b2c3ff9831899b86e90411d0d2480558d8
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
  **/*.swp
10
10
  /Gemfile.lock
11
11
  .byebug_history
12
+ spec/examples.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper --tty --color
data/.travis.yml CHANGED
@@ -1,7 +1,20 @@
1
1
  language: ruby
2
+
2
3
  rvm:
3
- - 2.3.6
4
- - 2.4.3
5
- - 2.5.0
4
+ - 2.4.5
5
+ - 2.5.3
6
+ - 2.6.0
7
+
6
8
  env:
7
- script: bundle exec rake test
9
+ global:
10
+ - CC_TEST_REPORTER_ID=bbc65a7f5858b221fbbb49617e4118dcce44703366ea64a49687214aed252cf3
11
+
12
+ before_script:
13
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
14
+ - chmod +x ./cc-test-reporter
15
+ - ./cc-test-reporter before-build
16
+
17
+ script: bundle exec rake
18
+
19
+ after_script:
20
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/Gemfile CHANGED
@@ -4,14 +4,11 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in trav3.gemspec
6
6
  gemspec
7
- group :test do
8
- gem 'simplecov'
9
- gem 'codeclimate-test-reporter', '~> 1.0.0'
10
- end
11
7
 
12
8
  group :test do
13
- gem 'minitest', '~> 5.10'
14
- gem 'minitest-reporters', '~> 1.1'
15
- gem 'color_pound_spec_reporter', '~> 0.0.6'
9
+ gem 'simplecov', require: false, group: :test
10
+ gem 'codeclimate-test-reporter', '~> 1.0.0'
11
+ gem 'webmock', '~> 3.5'
12
+ gem 'vcr', '~> 4.0'
13
+ gem 'byebug'
16
14
  end
17
-
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018 Daniel P. Clark
3
+ Copyright (c) 2018-2019 Daniel P. Clark
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/trav3.svg)](http://badge.fury.io/rb/trav3)
2
2
  [![Build Status](https://travis-ci.org/danielpclark/trav3.svg?branch=master)](https://travis-ci.org/danielpclark/trav3)
3
+ [![Maintainability](https://api.codeclimate.com/v1/badges/1ed07a4baea3832b6207/maintainability)](https://codeclimate.com/github/danielpclark/trav3/maintainability)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/1ed07a4baea3832b6207/test_coverage)](https://codeclimate.com/github/danielpclark/trav3/test_coverage)
5
+ [![Red The Docs](https://img.shields.io/badge/Read-the%20docs-blue.svg)](http://www.rubydoc.info/github/danielpclark/trav3/master/Trav3/Travis)
3
6
  [![SayThanks.io](https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg)](https://saythanks.io/to/danielpclark)
4
7
 
5
8
  # Trav3
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
- require "rake/testtask"
3
2
 
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- end
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
9
7
 
10
- task :default => :test
8
+ task :default => :spec
9
+ rescue LoadError # no rspec available
10
+ end
data/lib/trav3/get.rb CHANGED
@@ -5,20 +5,22 @@ require 'json'
5
5
 
6
6
  module Trav3
7
7
  module GET
8
- def self.call(url, headers = {})
8
+ def self.call(travis, url, raw_reply = false)
9
9
  uri = URI(url)
10
10
  req = Net::HTTP::Get.new(uri.request_uri)
11
- headers.each_pair { |header, value|
11
+ travis.headers.each_pair { |header, value|
12
12
  req[header] = value
13
13
  }
14
14
  http = Net::HTTP.new(uri.host, uri.port)
15
15
  http.use_ssl = (uri.scheme == "https")
16
16
  response = http.request(req)
17
17
 
18
- if Net::HTTPOK == response.code_type
19
- Success.new(response)
18
+ if raw_reply
19
+ response.body
20
+ elsif Net::HTTPOK == response.code_type
21
+ Success.new(travis, response)
20
22
  else
21
- RequestError.new(response)
23
+ RequestError.new(travis, response)
22
24
  end
23
25
  end
24
26
  end
data/lib/trav3/headers.rb CHANGED
@@ -15,6 +15,8 @@ module Trav3
15
15
  for (key, value) in args
16
16
  @heads[key] = value
17
17
  end
18
+
19
+ self
18
20
  end
19
21
 
20
22
  def remove(key)
@@ -24,6 +26,8 @@ module Trav3
24
26
  def +(other)
25
27
  raise ArgumentError, "Invalid type provided." unless other.is_a?(Headers)
26
28
  @heads.merge(other.instance_variable_get(:@heads))
29
+
30
+ self
27
31
  end
28
32
 
29
33
  def to_h
data/lib/trav3/options.rb CHANGED
@@ -6,7 +6,7 @@ module Trav3
6
6
 
7
7
  def opts
8
8
  if @opts.empty?
9
- ""
9
+ ''
10
10
  else
11
11
  "?#{@opts.join('&')}"
12
12
  end
@@ -19,6 +19,8 @@ module Trav3
19
19
  remove(key)
20
20
  @opts.push("#{key}=#{value}")
21
21
  end
22
+
23
+ self
22
24
  end
23
25
 
24
26
  def remove(key)
@@ -29,7 +31,10 @@ module Trav3
29
31
 
30
32
  def +(other)
31
33
  raise ArgumentError, "Invalid type provided." unless other.is_a?(Options)
34
+
32
35
  @opts += other.instance_variable_get(:@opts)
36
+
37
+ self
33
38
  end
34
39
 
35
40
  def to_s
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  module Trav3
3
3
  class Pagination
4
- def initialize(result)
4
+ def initialize(travis, result)
5
+ @travis = travis
5
6
  @result = result
6
7
  end
7
8
 
@@ -22,8 +23,11 @@ module Trav3
22
23
  end
23
24
 
24
25
  def get(x)
25
- Trav3::GET.(x)
26
+ Trav3::GET.(travis, x)
26
27
  end
27
28
  private :get
29
+
30
+ attr_reader :travis
31
+ private :travis
28
32
  end
29
33
  end
data/lib/trav3/post.rb CHANGED
@@ -5,21 +5,21 @@ require 'json'
5
5
 
6
6
  module Trav3
7
7
  module POST
8
- def self.call(url, headers = {}, fields={})
8
+ def self.call(travis, url, fields={})
9
9
  uri = URI( url.sub(/\?.*$/, '') )
10
10
  req = Net::HTTP::Post.new(uri.request_uri)
11
- headers.each_pair { |header, value|
11
+ travis.headers.each_pair { |header, value|
12
12
  req[header] = value
13
13
  }
14
- req.set_form_data(**fields)
14
+ req.set_form_data(**fields) unless fields.empty?
15
15
  http = Net::HTTP.new(uri.host, uri.port)
16
16
  http.use_ssl = (uri.scheme == "https")
17
17
  response = http.request(req)
18
-
19
- if Net::HTTPOK == response.code_type
20
- Success.new(response)
18
+
19
+ if [Net::HTTPAccepted, Net::HTTPOK].include? response.code_type
20
+ Success.new(travis, response)
21
21
  else
22
- RequestError.new(response)
22
+ RequestError.new(travis, response)
23
23
  end
24
24
  end
25
25
  end
data/lib/trav3/result.rb CHANGED
@@ -10,21 +10,31 @@ module Trav3
10
10
  end
11
11
  end
12
12
 
13
+ class InvalidAPIEndpoint < StandardError
14
+ def message
15
+ "The API endpoint must be either
16
+ 'https://api.travis-ci.com' or
17
+ 'https://api.travis-ci.org'"
18
+ end
19
+ end
20
+
13
21
  class Unimplemented < StandardError
14
22
  def message
15
- "You need to implement this method"
23
+ "This feature is not implemented."
16
24
  end
17
25
  end
18
26
 
19
27
  class Response
20
28
  extend Forwardable
29
+ attr_reader :travis
21
30
  def_delegators :@json, :[], :dig, :keys, :values, :has_key?
22
31
  def_delegators :@response, :code, :code_type, :uri, :message, :read_header,
23
32
  :header, :value, :entity, :response, :body,
24
33
  :decode_content, :msg, :reading_body, :read_body,
25
34
  :http_version, :connection_close?, :connection_keep_alive?,
26
35
  :initialize_http_header, :get_fields, :each_header
27
- def initialize(response)
36
+ def initialize(travis, response)
37
+ @travis = travis
28
38
  @response = response
29
39
  @json = JSON.parse(response.body)
30
40
  end
@@ -35,11 +45,12 @@ module Trav3
35
45
 
36
46
  def success?; raise Unimplemented end
37
47
  def failure?; raise Unimplemented end
48
+ private :travis
38
49
  end
39
50
 
40
51
  class Success < Response
41
52
  def page
42
- Trav3::Pagination.new(self)
53
+ Trav3::Pagination.new(travis, self)
43
54
  end
44
55
 
45
56
  def success?; true end
data/lib/trav3/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Trav3
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/trav3.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'trav3/version'
3
+ require 'trav3/pagination'
3
4
  require 'trav3/options'
4
5
  require 'trav3/headers'
5
6
  require 'trav3/result'
@@ -13,12 +14,15 @@ module Trav3
13
14
  # An abstraction for the Travis CI v3 API
14
15
  #
15
16
  # @author Daniel P. Clark https://6ftdan.com
17
+ # @!attribute [r] api_endpoint
18
+ # @return [String] API endpoint
16
19
  # @!attribute [r] options
17
20
  # @return [Options] Request options object
18
21
  # @!attribute [r] headers
19
22
  # @return [Headers] Request headers object
20
23
  class Travis
21
24
  API_ENDPOINT = API_ROOT
25
+ attr_reader :api_endpoint
22
26
  attr_reader :options
23
27
  attr_reader :headers
24
28
 
@@ -30,9 +34,25 @@ module Trav3
30
34
  raise InvalidRepository unless repo.is_a?(String) and
31
35
  Regexp.new(/(^\d+$)|(^\w+(?:\/|%2F){1}\w+$)/) === repo
32
36
 
37
+ @api_endpoint = API_ENDPOINT
33
38
  @repo = repo.gsub(/\//, '%2F')
34
39
  defaults(limit: 25)
35
- h("Travis-API-Version": 3)
40
+ h('Content-Type': 'application/json')
41
+ h('Accept': 'application/json')
42
+ h('Travis-API-Version': 3)
43
+ end
44
+
45
+ # @overload api_endpoint=(endpoint)
46
+ # Set as the API endpoint
47
+ # @param endpoint [String] name for value to set
48
+ # @return [self]
49
+ def api_endpoint= endpoint
50
+ if /^https:\/\/api\.travis-ci\.(?:org|com)$/ === endpoint
51
+ @api_endpoint = endpoint
52
+ else
53
+ raise InvalidAPIEndpoint
54
+ end
55
+ self
36
56
  end
37
57
 
38
58
  # @overload defaults(key: value, ...)
@@ -135,7 +155,7 @@ module Trav3
135
155
  # @param owner [String] username or github ID
136
156
  # @return [Success, RequestError]
137
157
  def owner(owner = username)
138
- if /^\d+$/ === owner
158
+ if /^\d+$/ === "#{owner}"
139
159
  get("#{self[]}/owner/github_id/#{owner}")
140
160
  else
141
161
  get("#{self[]}/owner/#{owner}")
@@ -281,7 +301,7 @@ module Trav3
281
301
  # @param owner [String] username or github ID
282
302
  # @return [Success, RequestError]
283
303
  def repositories(owner = username)
284
- if /^\d+$/ === owner
304
+ if /^\d+$/ === "#{owner}"
285
305
  get("#{self[]}/owner/github_id/#{owner}/repos#{opts}")
286
306
  else
287
307
  get("#{self[]}/owner/#{owner}/repos#{opts}")
@@ -885,11 +905,11 @@ module Trav3
885
905
  #
886
906
  # @param id [String, Integer] the job id number
887
907
  # @param option [Symbol] options for :text or :delete
888
- # @return [Success, RequestError]
908
+ # @return [Success, String, RequestError]
889
909
  def log(id, option = nil)
890
910
  case option
891
911
  when :text
892
- get("#{self[]}/job/#{id}/log.txt")
912
+ get("#{self[]}/job/#{id}/log.txt", true)
893
913
  when :delete
894
914
  raise Unimplemented
895
915
  else
@@ -899,7 +919,7 @@ module Trav3
899
919
 
900
920
  private # @private
901
921
  def [](repository = false)
902
- [API_ENDPOINT].tap {|a| a.push("repo/#{@repo}") if repository }.join('/')
922
+ [api_endpoint()].tap {|a| a.push("repo/#{@repo}") if repository }.join('/')
903
923
  end
904
924
 
905
925
  def repository_name
@@ -910,12 +930,12 @@ module Trav3
910
930
  @options
911
931
  end
912
932
 
913
- def get(x)
914
- Trav3::GET.(x, headers())
933
+ def get(x, raw_reply = false)
934
+ Trav3::GET.(self, x, raw_reply)
915
935
  end
916
936
 
917
937
  def post(x, fields = {})
918
- Trav3::POST.(x, headers(), fields)
938
+ Trav3::POST.(self, x, fields)
919
939
  end
920
940
 
921
941
  def username
data/trav3.gemspec CHANGED
@@ -26,5 +26,6 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 1.16"
28
28
  spec.add_development_dependency "rake", "~> 10.0"
29
- spec.add_development_dependency "minitest", "~> 5.0"
29
+ spec.add_development_dependency "rspec", "~> 3.8"
30
+ spec.add_development_dependency "factory_bot", "~> 4.11"
30
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trav3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel P. Clark
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-25 00:00:00.000000000 Z
11
+ date: 2019-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,19 +39,33 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
47
+ version: '3.8'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.0'
54
+ version: '3.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_bot
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.11'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.11'
55
69
  description: A Simple client abstraction for the Travis V3 API
56
70
  email:
57
71
  - 6ftdan@gmail.com
@@ -60,6 +74,7 @@ extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
76
  - ".gitignore"
77
+ - ".rspec"
63
78
  - ".travis.yml"
64
79
  - ".yardopts"
65
80
  - Gemfile
@@ -97,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
112
  - !ruby/object:Gem::Version
98
113
  version: '0'
99
114
  requirements: []
100
- rubygems_version: 3.0.0
115
+ rubygems_version: 3.0.1
101
116
  signing_key:
102
117
  specification_version: 4
103
118
  summary: Simple Travis V3 API Client