trav3 0.1.1 → 0.2.0

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