lib/trav3.rb in trav3-0.2.0 vs lib/trav3.rb in trav3-0.2.1

- old
+ new

@@ -1,27 +1,29 @@ # frozen_string_literal: true + require 'trav3/version' require 'trav3/pagination' require 'trav3/options' require 'trav3/headers' require 'trav3/result' require 'trav3/post' require 'trav3/get' # Trav3 project namespace module Trav3 - API_ROOT = 'https://api.travis-ci.org' + API_ROOT = 'https://api.travis-ci.org'.freeze # An abstraction for the Travis CI v3 API # # @author Daniel P. Clark https://6ftdan.com # @!attribute [r] api_endpoint # @return [String] API endpoint # @!attribute [r] options # @return [Options] Request options object # @!attribute [r] headers # @return [Headers] Request headers object + # rubocop:disable Metrics/ClassLength class Travis API_ENDPOINT = API_ROOT attr_reader :api_endpoint attr_reader :options attr_reader :headers @@ -29,33 +31,31 @@ # @param repo [String] github_username/repository_name # @raise [InvalidRepository] if given input does not # conform to valid repository identifier format # @return [Travis] def initialize(repo) - raise InvalidRepository unless repo.is_a?(String) and - Regexp.new(/(^\d+$)|(^\w+(?:\/|%2F){1}\w+$)/) === repo + raise InvalidRepository unless repo_slug_or_id? repo @api_endpoint = API_ENDPOINT - @repo = repo.gsub(/\//, '%2F') - defaults(limit: 25) - h('Content-Type': 'application/json') - h('Accept': 'application/json') - h('Travis-API-Version': 3) + @repo = sanitize_repo_name repo + + initial_defaults end # @overload api_endpoint=(endpoint) # Set as the API endpoint # @param endpoint [String] name for value to set # @return [self] - def api_endpoint= endpoint - if /^https:\/\/api\.travis-ci\.(?:org|com)$/ === endpoint - @api_endpoint = endpoint - else - raise InvalidAPIEndpoint - end + # rubocop:disable Lint/Void + def api_endpoint=(endpoint) + raise InvalidAPIEndpoint unless /^https:\/\/api\.travis-ci\.(?:org|com)$/.match? endpoint + + @api_endpoint = endpoint + self end + # rubocop:enable Lint/Void # @overload defaults(key: value, ...) # Set as many options as you'd like for collections queried via an API request # @param key [Symbol, String] name for value to set # @param value [Symbol, String, Integer] value for key @@ -64,412 +64,250 @@ (@options ||= Options.new).build(**args) self end # Set as many headers as you'd like for API requests - # + # # h("Authorization": "token xxxxxxxxxxxxxxxxxxxxxx") - # + # # @overload h(key: value, ...) # @param key [Symbol, String] name for value to set # @param value [Symbol, String, Integer] value for key # @return [self] def h(**args) (@headers ||= Headers.new).build(**args) self end - # This will be either a user or organization. - # + # The branch of a GitHub repository. Useful for obtaining information about the last build on a given branch. + # + # **If querying using the repository slug, it must be formatted using {http://www.w3schools.com/tags/ref_urlencode.asp standard URL encoding}, including any special characters.** + # # ## Attributes # # **Minimal Representation** # # Included when the resource is returned as part of another resource. - # - # Name Type Description - # id Integer Value uniquely identifying the owner. - # login String User or organization login set on GitHub. # + # Name Type Description + # name String Name of the git branch. + # # **Standard Representation** # - # Included when the resource is the main response of a request, or is eager loaded. - # - # Name Type Description - # id Integer Value uniquely identifying the owner. - # login String User or organization login set on GitHub. - # name String User or organization name set on GitHub. - # github_id Integer User or organization id set on GitHub. - # avatar_url String Link to user or organization avatar (image) set on GitHub. + # Included when the resource is the main response of a request, or is {https://developer.travis-ci.com/eager-loading eager loaded}. # + # Name Type Description + # name String Name of the git branch. + # repository Repository GitHub user or organization the branch belongs to. + # default_branch Boolean Whether or not this is the resposiotry's default branch. + # exists_on_github Boolean Whether or not the branch still exists on GitHub. + # last_build Build Last build on the branch. + # # **Additional Attributes** - # - # Name Type Description - # repositories [Repository] Repositories belonging to this account. # + # Name Type Description + # recent_builds [Build] Last 10 builds on the branch (when `include=branch.recent_builds` is used). + # # ## Actions # # **Find** # - # This returns an individual owner. It is possible to use the GitHub login or github_id in the request. - # - # GET <code>/owner/{owner.login}</code> - # - # Template Variable Type Description - # owner.login String User or organization login set on GitHub. + # This will return information about an individual branch. The request can include either the repository id or slug. # - # Query Parameter Type Description - # include [String] List of attributes to eager load. + # GET <code>/repo/{repository.id}/branch/{branch.name}</code> # - # Example: GET /owner/danielpclark - # - # GET <code>/owner/{user.login}</code> - # - # Template Variable Type Description - # user.login String Login set on Github. - # - # Query Parameter Type Description - # include [String] List of attributes to eager load. - # - # Example: GET /owner/danielpclark - # - # GET <code>/owner/{organization.login}</code> - # - # Template Variable Type Description - # organization.login String Login set on GitHub. - # - # Query Parameter Type Description - # include [String] List of attributes to eager load. - # - # Example: GET /owner/travis-ci - # - # GET <code>/owner/github_id/{owner.github_id}</code> - # - # Template Variable Type Description - # owner.github_id Integer User or organization id set on GitHub. - # - # Query Parameter Type Description - # include [String] List of attributes to eager load. - # - # Example: GET /owner/github_id/639823 + # Template Variable Type Description + # repository.id Integer Value uniquely identifying the repository. + # branch.name String Name of the git branch. + # Query Parameter Type Description + # include [String] List of attributes to eager load. # - # @param owner [String] username or github ID + # Example:GET /repo/891/branch/master + # + # GET <code>/repo/{repository.slug}/branch/{branch.name}</code> + # + # Template Variable Type Description + # repository.slug String Same as {repository.owner.name}/{repository.name}. + # branch.name String Name of the git branch. + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example:GET /repo/rails%2Frails/branch/master + # + # @param id [String] the branch name for the current repository # @return [Success, RequestError] - def owner(owner = username) - if /^\d+$/ === "#{owner}" - get("#{self[]}/owner/github_id/#{owner}") - else - get("#{self[]}/owner/#{owner}") - end + def branch(name) + get("#{with_repo}/branch/#{name}#{opts}") end - # A list of repositories for the current user. - # - # ## Attributes - # - # Name Type Description - # repositories [Repository] List of repositories. - # + # A list of branches. + # + # **If querying using the repository slug, it must be formatted using {http://www.w3schools.com/tags/ref_urlencode.asp standard URL encoding}, including any special characters.** + # + # ##Attributes + # + # Name Type Description + # branches [Branch] List of branches. + # # **Collection Items** # - # Each entry in the repositories array has the following attributes: - # - # Name Type Description - # id Integer Value uniquely identifying the repository. - # name String The repository's name on GitHub. - # slug String Same as {repository.owner.name}/{repository.name}. - # description String The repository's description from GitHub. - # github_language String The main programming language used according to GitHub. - # active Boolean Whether or not this repository is currently enabled on Travis CI. - # private Boolean Whether or not this repository is private. - # owner Owner GitHub user or organization the repository belongs to. - # default_branch Branch The default branch on GitHub. - # starred Boolean Whether or not this repository is starred. - # current_build Build The most recently started build (this excludes builds that have been created but have not yet started). - # last_started_build Build Alias for current_build. - # + # Each entry in the **branches** array has the following attributes: + # + # Name Type Description + # name String Name of the git branch. + # repository Repository GitHub user or organization the branch belongs to. + # default_branch Boolean Whether or not this is the resposiotry's default branch. + # exists_on_github Boolean Whether or not the branch still exists on GitHub. + # last_build Build Last build on the branch. + # recent_builds [Build] Last 10 builds on the branch (when `include=branch.recent_builds` is used). + # # ## Actions # - # **For Owner** + # **Find** # - # This returns a list of repositories an owner has access to. - # - # GET <code>/owner/{owner.login}/repos</code> - # - # Template Variable Type Description - # owner.login String User or organization login set on GitHub. - # - # Query Parameter Type Description - # active [Boolean] Alias for repository.active. - # include [String] List of attributes to eager load. - # limit Integer How many repositories to include in the response. Used for pagination. - # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. - # private [Boolean] Alias for repository.private. - # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. - # repository.private [Boolean] Filters repositories by whether or not this repository is private. - # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. - # sort_by [String] Attributes to sort repositories by. Used for pagination. - # starred [Boolean] Alias for repository.starred. - # - # Example: GET /owner/danielpclark/repos?limit=5&sort_by=active,name - # - # **Sortable by:** id, github_id, owner_name, name, active, default_branch.last_build, append :desc to any attribute to reverse order. - # - # GET <code>/owner/{user.login}/repos</code> - # - # Template Variable Type Description - # user.login String Login set on Github. + # This will return a list of branches a repository has on GitHub. # - # Query Parameter Type Description - # active [Boolean] Alias for repository.active. - # include [String] List of attributes to eager load. - # limit Integer How many repositories to include in the response. Used for pagination. - # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. - # private [Boolean] Alias for repository.private. - # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. - # repository.private [Boolean] Filters repositories by whether or not this repository is private. - # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. - # sort_by [String] Attributes to sort repositories by. Used for pagination. - # starred [Boolean] Alias for repository.starred. - # - # Example: GET /owner/danielpclark/repos?limit=5&sort_by=active,name - # - # **Sortable by:** id, github_id, owner_name, name, active, default_branch.last_build, append :desc to any attribute to reverse order. - # - # GET <code>/owner/{organization.login}/repos</code> - # - # Template Variable Type Description - # organization.login String Login set on GitHub. + # GET <code>/repo/{repository.id}/branches</code> # - # Query Parameter Type Description - # active [Boolean] Alias for repository.active. - # include [String] List of attributes to eager load. - # limit Integer How many repositories to include in the response. Used for pagination. - # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. - # private [Boolean] Alias for repository.private. - # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. - # repository.private [Boolean] Filters repositories by whether or not this repository is private. - # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. - # sort_by [String] Attributes to sort repositories by. Used for pagination. - # starred [Boolean] Alias for repository.starred. - # - # Example: GET /owner/travis-ci/repos?limit=5&sort_by=active,name - # - # **Sortable by:** id, github_id, owner_name, name, active, default_branch.last_build, append :desc to any attribute to reverse order. - # - # GET <code>/owner/github_id/{owner.github_id}/repos</code> - # # Template Variable Type Description - # owner.github_id Integer User or organization id set on GitHub. + # repository.id Integer Value uniquely identifying the repository. + # Query Parameter Type Description + # branch.exists_on_github [Boolean] Filters branches by whether or not the branch still exists on GitHub. + # exists_on_github [Boolean] Alias for branch.exists_on_github. + # include [String] List of attributes to eager load. + # limit Integer How many branches to include in the response. Used for pagination. + # offset Integer How many branches to skip before the first entry in the response. Used for pagination. + # sort_by [String] Attributes to sort branches by. Used for pagination. # - # Query Parameter Type Description - # active [Boolean] Alias for repository.active. - # include [String] List of attributes to eager load. - # limit Integer How many repositories to include in the response. Used for pagination. - # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. - # private [Boolean] Alias for repository.private. - # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. - # repository.private [Boolean] Filters repositories by whether or not this repository is private. - # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. - # sort_by [String] Attributes to sort repositories by. Used for pagination. - # starred [Boolean] Alias for repository.starred. - # - # Example: GET /owner/github_id/639823/repos?limit=5&sort_by=active,name - # - # **Sortable by:** id, github_id, owner_name, name, active, default_branch.last_build, append :desc to any attribute to reverse order. - # - # **For Current User**<br /> - # This returns a list of repositories the current user has access to. - # - # GET <code>/repos</code> - # - # Query Parameter Type Description - # active [Boolean] Alias for repository.active. - # include [String] List of attributes to eager load. - # limit Integer How many repositories to include in the response. Used for pagination. - # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. - # private [Boolean] Alias for repository.private. - # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. - # repository.private [Boolean] Filters repositories by whether or not this repository is private. - # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. - # sort_by [String] Attributes to sort repositories by. Used for pagination. - # starred [Boolean] Alias for repository.starred. + # Example:GET /repo/891/branches?limit=5&exists_on_github=true # - # Example: GET /repos?limit=5&sort_by=active,name - # - # **Sortable by:** id, github_id, owner_name, name, active, default_branch.last_build, append :desc to any attribute to reverse order. + # **Sortable by:** <code>name</code>, <code>last_build</code>, <code>exists_on_github</code>, <code>default_branch</code>, append <code>:desc</code> to any attribute to reverse order. + # The default value is <code>default_branch</code>,<code>exists_on_github</code>,<code>last_build:desc</code>. # - # @param owner [String] username or github ID + # GET <code>/repo/{repository.slug}/branches</code> + # + # Template Variable Type Description + # repository.slug String Same as {repository.owner.name}/{repository.name}. + # Query Parameter Type Description + # branch.exists_on_github [Boolean] Filters branches by whether or not the branch still exists on GitHub. + # exists_on_github [Boolean] Alias for branch.exists_on_github. + # include [String] List of attributes to eager load. + # limit Integer How many branches to include in the response. Used for pagination. + # offset Integer How many branches to skip before the first entry in the response. Used for pagination. + # sort_by [String] Attributes to sort branches by. Used for pagination. + # + # Example:GET /repo/rails%2Frails/branches?limit=5&exists_on_github=true + # + # **Sortable by:** <code>name</code>, <code>last_build</code>, <code>exists_on_github</code>, <code>default_branch</code>, append <code>:desc</code> to any attribute to reverse order. + # The default value is <code>default_branch</code>,<code>exists_on_github</code>,<code>last_build:desc</code>. + # # @return [Success, RequestError] - def repositories(owner = username) - if /^\d+$/ === "#{owner}" - get("#{self[]}/owner/github_id/#{owner}/repos#{opts}") - else - get("#{self[]}/owner/#{owner}/repos#{opts}") - end + def branches + get("#{with_repo}/branches#{opts}") end - # An individual repository. - # + # An individual build. + # # ## Attributes # # **Minimal Representation** # # Included when the resource is returned as part of another resource. - # - # Name Type Description - # id Integer Value uniquely identifying the repository. - # name String The repository's name on GitHub. - # slug String Same as {repository.owner.name}/{repository.name}. - # + # + # Name Type Description + # id Integer Value uniquely identifying the build. + # number String Incremental number for a repository's builds. + # state String Current state of the build. + # duration Integer Wall clock time in seconds. + # event_type String Event that triggered the build. + # previous_state String State of the previous build (useful to see if state changed). + # pull_request_title String Title of the build's pull request. + # pull_request_number Integer Number of the build's pull request. + # started_at String When the build started. + # finished_at String When the build finished. + # # **Standard Representation** # # Included when the resource is the main response of a request, or is eager loaded. - # - # Name Type Description - # id Integer Value uniquely identifying the repository. - # name String The repository's name on GitHub. - # slug String Same as {repository.owner.name}/{repository.name}. - # description String The repository's description from GitHub. - # github_language String The main programming language used according to GitHub. - # active Boolean Whether or not this repository is currently enabled on Travis CI. - # private Boolean Whether or not this repository is private. - # owner Owner GitHub user or organization the repository belongs to. - # default_branch Branch The default branch on GitHub. - # starred Boolean Whether or not this repository is starred. - # + # + # Name Type Description + # id Integer Value uniquely identifying the build. + # number String Incremental number for a repository's builds. + # state String Current state of the build. + # duration Integer Wall clock time in seconds. + # event_type String Event that triggered the build. + # previous_state String State of the previous build (useful to see if state changed). + # pull_request_title String Title of the build's pull request. + # pull_request_number Integer Number of the build's pull request. + # started_at String When the build started. + # finished_at String When the build finished. + # repository Repository GitHub user or organization the build belongs to. + # branch Branch The branch the build is associated with. + # tag Unknown The build's tag. + # commit Commit The commit the build is associated with. + # jobs Jobs List of jobs that are part of the build's matrix. + # stages [Stage] The stages of a build. + # created_by Owner The User or Organization that created the build. + # updated_at Unknown The build's updated_at. + # # ## Actions # # **Find** # - # This returns an individual repository. - # - # GET <code>/repo/{repository.id}</code> - # + # This returns a single build. + # + # GET <code>/build/{build.id}</code> + # # Template Variable Type Description - # repository.id Integer Value uniquely identifying the repository. - # + # build.id Integer Value uniquely identifying the build. + # # Query Parameter Type Description # include [String] List of attributes to eager load. - # - # Example: GET /repo/891 - # - # GET <code>/repo/{repository.slug}</code> - # - # Template Variable Type Description - # repository.slug String Same as {repository.owner.name}/{repository.name}. - # - # Query Parameter Type Description - # include [String] List of attributes to eager load. - # - # Example: GET /repo/rails%2Frails - # - # **Activate** # - # This will activate a repository, allowing its tests to be run on Travis CI. - # - # POST <code>/repo/{repository.id}/activate</code> - # - # Template Variable Type Description - # repository.id Integer Value uniquely identifying the repository. - # - # Example: POST /repo/891/activate - # - # POST <code>/repo/{repository.slug}/activate</code> - # - # Template Variable Type Description - # repository.slug String Same as {repository.owner.name}/{repository.name}. - # - # Example: POST /repo/rails%2Frails/activate - # - # **Deactivate** - # - # This will deactivate a repository, preventing any tests from running on Travis CI. - # - # POST <code>/repo/{repository.id}/deactivate</code> - # - # Template Variable Type Description - # repository.id Integer Value uniquely identifying the repository. - # - # Example: POST /repo/891/deactivate - # - # POST <code>/repo/{repository.slug}/deactivate</code> - # - # Template Variable Type Description - # repository.slug String Same as {repository.owner.name}/{repository.name}. - # - # Example: POST /repo/rails%2Frails/deactivate - # - # **Star** + # Example: GET /build/86601346 # - # This will star a repository based on the currently logged in user. - # - # POST <code>/repo/{repository.id}/star</code> - # + # **Cancel** + # + # This cancels a currently running build. It will set the build and associated jobs to "state": "canceled". + # + # POST <code>/build/{build.id}/cancel</code> + # # Template Variable Type Description - # repository.id Integer Value uniquely identifying the repository. - # - # Example: POST /repo/891/star - # - # POST <code>/repo/{repository.slug}/star</code> - # - # Template Variable Type Description - # repository.slug String Same as {repository.owner.name}/{repository.name}. - # - # Example: POST /repo/rails%2Frails/star - # - # **Unstar** + # build.id Integer Value uniquely identifying the build. # - # This will unstar a repository based on the currently logged in user. - # - # POST <code>/repo/{repository.id}/unstar</code> - # + # Example: POST /build/86601346/cancel + # + # **Restart** + # + # This restarts a build that has completed or been canceled. + # + # POST <code>/build/{build.id}/restart</code> + # # Template Variable Type Description - # repository.id Integer Value uniquely identifying the repository. - # - # Example: POST /repo/891/unstar - # - # POST <code>/repo/{repository.slug}/unstar</code> - # - # Template Variable Type Description - # repository.slug String Same as {repository.owner.name}/{repository.name}. - # - # Example: POST /repo/rails%2Frails/unstar - # + # build.id Integer Value uniquely identifying the build. + # + # Example: POST /build/86601346/restart + # # @note POST requests require an authorization token set in the headers. See: {h} # - # @param repo [String] github_username/repository_name - # @param action [String, Symbol] Optional argument for star/unstar/activate/deactivate - # @raise [InvalidRepository] if given input does not - # conform to valid repository identifier format + # @param id [String, Integer] the build id number # @return [Success, RequestError] - def repository(repo = repository_name, action = nil) - raise InvalidRepository unless repo.is_a?(String) and - Regexp.new(/(^\d+$)|(^\w+(?:\/|%2F){1}\w+$)/) === repo - - repo = repo.gsub(/\//, '%2F') - - action = '' if !%w(star unstar activate deavtivate).include? "#{action}" - - if action.empty? - get("#{self[]}/repo/#{repo}") - else - post("#{self[]}/repo/#{repo}/#{action}") - end + def build(id) + get("#{without_repo}/build/#{id}") end # A list of builds. - # + # # ## Attributes - # + # # Name Type Description # builds [Build] List of builds. - # + # # **Collection Items** # # Each entry in the builds array has the following attributes: - # + # # Name Type Description # id Integer Value uniquely identifying the build. # number String Incremental number for a repository's builds. # state String Current state of the build. # duration Integer Wall clock time in seconds. @@ -486,38 +324,38 @@ # jobs Jobs List of jobs that are part of the build's matrix. # stages [Stage] The stages of a build. # created_by Owner The User or Organization that created the build. # updated_at Unknown The build's updated_at. # request Unknown The build's request. - # + # # ## Actions # # **For Current User** # # This returns a list of builds for the current user. The result is paginated. - # + # # GET <code>/builds</code> - # + # # Query Parameter Type Description # include [String] List of attributes to eager load. # limit Integer How many builds to include in the response. Used for pagination. # limit Integer How many builds to include in the response. Used for pagination. # offset Integer How many builds to skip before the first entry in the response. Used for pagination. # offset Integer How many builds to skip before the first entry in the response. Used for pagination. # sort_by [String] Attributes to sort builds by. Used for pagination. # sort_by [String] Attributes to sort builds by. Used for pagination. - # + # # Example: GET /builds?limit=5 - # - # **Sortable by:** id, started_at, finished_at, append :desc to any attribute to reverse order. - # + # + # **Sortable by:** <code>id</code>, <code>started_at</code>, <code>finished_at</code>, append <code>:desc</code> to any attribute to reverse order. + # # **Find** # # This returns a list of builds for an individual repository. It is possible to use the repository id or slug in the request. The result is paginated. Each request will return 25 results. - # + # # GET <code>/repo/{repository.id}/builds</code> - # + # # Template Variable Type Description # repository.id Integer Value uniquely identifying the repository. # # Query Parameter Type Description # branch.name [String] Filters builds by name of the git branch. @@ -533,15 +371,15 @@ # previous_state [String] Alias for build.previous_state. # sort_by [String] Attributes to sort builds by. Used for pagination. # state [String] Alias for build.state. # # Example: GET /repo/891/builds?limit=5 - # - # **Sortable by:** id, started_at, finished_at, append :desc to any attribute to reverse order. - # + # + # **Sortable by:** <code>id</code>, <code>started_at</code>, <code>finished_at</code>, append <code>:desc</code> to any attribute to reverse order. + # # GET <code>/repo/{repository.slug}/builds</code> - # + # # Template Variable Type Description # repository.slug String Same as {repository.owner.name}/{repository.name}. # # Query Parameter Type Description # branch.name [String] Filters builds by name of the git branch. @@ -557,119 +395,29 @@ # previous_state [String] Alias for build.previous_state. # sort_by [String] Attributes to sort builds by. Used for pagination. # state [String] Alias for build.state. # # Example: GET /repo/rails%2Frails/builds?limit=5 - # - # **Sortable by:** id, started_at, finished_at, append :desc to any attribute to reverse order. - # - # @return [Success, RequestError] - def builds - get("#{self[true]}/builds#{opts}") - end - - # An individual build. - # - # ## Attributes # - # **Minimal Representation** + # **Sortable by:** <code>id</code>, <code>started_at</code>, <code>finished_at</code>, append <code>:desc</code> to any attribute to reverse order. # - # Included when the resource is returned as part of another resource. - # - # Name Type Description - # id Integer Value uniquely identifying the build. - # number String Incremental number for a repository's builds. - # state String Current state of the build. - # duration Integer Wall clock time in seconds. - # event_type String Event that triggered the build. - # previous_state String State of the previous build (useful to see if state changed). - # pull_request_title String Title of the build's pull request. - # pull_request_number Integer Number of the build's pull request. - # started_at String When the build started. - # finished_at String When the build finished. - # - # **Standard Representation** - # - # Included when the resource is the main response of a request, or is eager loaded. - # - # Name Type Description - # id Integer Value uniquely identifying the build. - # number String Incremental number for a repository's builds. - # state String Current state of the build. - # duration Integer Wall clock time in seconds. - # event_type String Event that triggered the build. - # previous_state String State of the previous build (useful to see if state changed). - # pull_request_title String Title of the build's pull request. - # pull_request_number Integer Number of the build's pull request. - # started_at String When the build started. - # finished_at String When the build finished. - # repository Repository GitHub user or organization the build belongs to. - # branch Branch The branch the build is associated with. - # tag Unknown The build's tag. - # commit Commit The commit the build is associated with. - # jobs Jobs List of jobs that are part of the build's matrix. - # stages [Stage] The stages of a build. - # created_by Owner The User or Organization that created the build. - # updated_at Unknown The build's updated_at. - # - # ## Actions - # - # **Find** - # - # This returns a single build. - # - # GET <code>/build/{build.id}</code> - # - # Template Variable Type Description - # build.id Integer Value uniquely identifying the build. - # - # Query Parameter Type Description - # include [String] List of attributes to eager load. - # - # Example: GET /build/86601346 - # - # **Cancel** - # - # This cancels a currently running build. It will set the build and associated jobs to "state": "canceled". - # - # POST <code>/build/{build.id}/cancel</code> - # - # Template Variable Type Description - # build.id Integer Value uniquely identifying the build. - # - # Example: POST /build/86601346/cancel - # - # **Restart** - # - # This restarts a build that has completed or been canceled. - # - # POST <code>/build/{build.id}/restart</code> - # - # Template Variable Type Description - # build.id Integer Value uniquely identifying the build. - # - # Example: POST /build/86601346/restart - # - # @note POST requests require an authorization token set in the headers. See: {h} - # - # @param id [String, Integer] the build id number # @return [Success, RequestError] - def build(id) - get("#{self[]}/build/#{id}") + def builds + get("#{with_repo}/builds#{opts}") end # A list of jobs. - # + # # ## Attributes - # + # # Name Type Description # jobs [Job] List of jobs. - # + # # **Collection Items** # # Each entry in the jobs array has the following attributes: - # + # # Name Type Description # id Integer Value uniquely identifying the job. # allow_failure Unknown The job's allow_failure. # number String Incremental number for a repository's builds. # state String Current state of the job. @@ -682,33 +430,33 @@ # owner Owner GitHub user or organization the job belongs to. # stage [Stage] The stages of a job. # created_at String When the job was created. # updated_at String When the job was updated. # config Object The job's config. - # + # # ## Actions # # **Find** # # This returns a list of jobs belonging to an individual build. - # + # # GET <code>/build/{build.id}/jobs</code> - # + # # Template Variable Type Description # build.id Integer Value uniquely identifying the build. # # Query Parameter Type Description # include [String] List of attributes to eager load. - # + # # Example: GET /build/86601346/jobs - # + # # **For Current User** # # This returns a list of jobs a current user has access to. - # + # # GET <code>/jobs</code> - # + # # Query Parameter Type Description # active Unknown Alias for job.active. # created_by Unknown Alias for job.created_by. # include [String] List of attributes to eager load. # job.active Unknown Documentation missing. @@ -716,37 +464,37 @@ # job.state [String] Filters jobs by current state of the job. # limit Integer How many jobs to include in the response. Used for pagination. # offset Integer How many jobs to skip before the first entry in the response. Used for pagination. # sort_by [String] Attributes to sort jobs by. Used for pagination. # state [String] Alias for job.state. - # + # # Example: GET /jobs?limit=5 - # - # **Sortable by:** id, append :desc to any attribute to reverse order. + # + # **Sortable by:** <code>id</code>, append <code>:desc</code> to any attribute to reverse order. # The default value is id:desc. # # @param id [String, Integer] the build id number # @return [Success, RequestError] def build_jobs(id) - get("#{self[]}/build/#{id}/jobs") + get("#{without_repo}/build/#{id}/jobs") end # An individual job. - # + # # ## Attributes # # **Minimal Representation** # # Included when the resource is returned as part of another resource. - # + # # Name Type Description # id Integer Value uniquely identifying the job. - # + # # **Standard Representation** # # Included when the resource is the main response of a request, or is eager loaded. - # + # # Name Type Description # id Integer Value uniquely identifying the job. # allow_failure Unknown The job's allow_failure. # number String Incremental number for a repository's builds. # state String Current state of the job. @@ -758,188 +506,806 @@ # commit Commit The commit the job is associated with. # owner Owner GitHub user or organization the job belongs to. # stage [Stage] The stages of a job. # created_at String When the job was created. # updated_at String When the job was updated. - # + # # ## Actions # # **Find** # # This returns a single job. - # + # # GET <code>/job/{job.id}</code> - # + # # Template Variable Type Description # job.id Integer Value uniquely identifying the job. - # + # # Query Parameter Type Description # include [String] List of attributes to eager load. - # + # # Example: GET /job/86601347 - # + # # **Cancel** # # This cancels a currently running job. - # + # # POST <code>/job/{job.id}/cancel</code> - # + # # Template Variable Type Description # job.id Integer Value uniquely identifying the job. - # + # # Example: POST /job/86601347/cancel - # + # # **Restart** # # This restarts a job that has completed or been canceled. - # + # # POST <code>/job/{job.id}/restart</code> - # + # # Template Variable Type Description # job.id Integer Value uniquely identifying the job. - # + # # Example: POST /job/86601347/restart - # + # # **Debug** # # This restarts a job in debug mode, enabling the logged-in user to ssh into the build VM. Please note this feature is only available on the travis-ci.com domain, and those repositories on the travis-ci.org domain for which the debug feature is enabled. See this document for more details. - # + # # POST <code>/job/{job.id}/debug</code> - # + # # Template Variable Type Description # job.id Integer Value uniquely identifying the job. - # + # # Example: POST /job/86601347/debug - # + # # @note POST requests require an authorization token set in the headers. See: {h} # # @param id [String, Integer] the job id number # @param option [Symbol] options for :cancel, :restart, or :debug # @return [Success, RequestError] def job(id, option = nil) case option when :cancel - post("#{self[]}/job/#{id}/cancel") + post("#{without_repo}/job/#{id}/cancel") when :restart - post("#{self[]}/job/#{id}/restart") + post("#{without_repo}/job/#{id}/restart") when :debug - post("#{self[]}/job/#{id}/debug") + post("#{without_repo}/job/#{id}/debug") else - get("#{self[]}/job/#{id}") + get("#{without_repo}/job/#{id}") end end + # This validates the `.travis.yml` file and returns any warnings. + # + # The request body can contain the content of the .travis.yml file directly as a string, eg "foo: bar". + # + # ## Attributes + # + # Name Type Description + # warnings Array An array of hashes with keys and warnings. + # + # ## Actions + # + # **Lint** + # + # POST <code>/lint</code> + # + # Example:POST /lint + # + # @param yaml_content [String] the contents for the file `.travis.yml` + # @return [Success, RequestError] + def lint(yaml_content) + raise TypeError, "String expected, #{yaml_content.class} given" unless \ + yaml_content.is_a? String + + ct = headers.remove(:'Content-Type') + result = post("#{without_repo}/lint", body: yaml_content) + h('Content-Type': ct) if ct + result + end + # An individual log. - # + # # ## Attributes # # **Minimal Representation** # # Included when the resource is returned as part of another resource. - # + # # Name Type Description # id Unknown The log's id. - # + # # **Standard Representation** # # Included when the resource is the main response of a request, or is eager loaded. - # + # # Name Type Description # id Unknown The log's id. # content Unknown The log's content. # log_parts Unknown The log's log_parts. - # + # # ## Actions # # **Find** # # This returns a single log. - # + # # It's possible to specify the accept format of the request as text/plain if required. This will return the content of the log as a single blob of text. - # + # # curl -H "Travis-API-Version: 3" \ # -H "Accept: text/plain" \ # -H "Authorization: token xxxxxxxxxxxx" \ # https://api.travis-ci.org/job/{job.id}/log - # + # # The default response type is application/json, and will include additional meta data such as @type, @representation etc. (see [https://developer.travis-ci.org/format](https://developer.travis-ci.org/format)). - # + # # GET <code>/job/{job.id}/log</code> - # + # # Template Variable Type Description # job.id Integer Value uniquely identifying the job. # # Query Parameter Type Description # include [String] List of attributes to eager load. # log.token Unknown Documentation missing. # # Example: GET /job/86601347/log - # + # # GET <code>/job/{job.id}/log.txt</code> - # + # # Template Variable Type Description # job.id Integer Value uniquely identifying the job. - # + # # Query Parameter Type Description # include [String] List of attributes to eager load. # log.token Unknown Documentation missing. - # - # Example:GET/job/86601347/log.txt - # + # + # Example:GET /job/86601347/log.txt + # # **Delete** # # This removes the contents of a log. It gets replace with the message: Log removed by XXX at 2017-02-13 16:00:00 UTC. - # + # # curl -X DELETE \ # -H "Travis-API-Version: 3" \ # -H "Authorization: token xxxxxxxxxxxx" \ # https://api.travis-ci.org/job/{job.id}/log # # DELETE <code>/job/{job.id}/log</code> - # + # # Template Variable Type Description # job.id Integer Value uniquely identifying the job. - # + # # Example: DELETE /job/86601347/log - # + # # @note DELETE is unimplemented # # @param id [String, Integer] the job id number # @param option [Symbol] options for :text or :delete # @return [Success, String, RequestError] def log(id, option = nil) case option when :text - get("#{self[]}/job/#{id}/log.txt", true) + get("#{without_repo}/job/#{id}/log.txt", true) when :delete raise Unimplemented else - get("#{self[]}/job/#{id}/log") + get("#{without_repo}/job/#{id}/log") end end + # An individual organization. + # + # ## Attributes + # + # **Minimal Representation** + # + # Included when the resource is returned as part of another resource. + # + # Name Type Description + # id Integer Value uniquely identifying the organization. + # login String Login set on GitHub. + # + # **Standard Representation** + # + # Included when the resource is the main response of a request, or is {https://developer.travis-ci.com/eager-loading eager loaded}. + # + # Name Type Description + # id Integer Value uniquely identifying the organization. + # login String Login set on GitHub. + # name String Name set on GitHub. + # github_id Integer Id set on GitHub. + # avatar_url String Avatar_url set on GitHub. + # education Boolean Whether or not the organization has an education account. + # allow_migration Unknown The organization's allow_migration. + # + # **Additional Attributes** + # + # Name Type Description + # repositories [Repository] Repositories belonging to this organization. + # installation Installation Installation belonging to the organization. + # + # ## Actions + # + # **Find** + # + # This returns an individual organization. + # + # GET <code>/org/{organization.id}</code> + # + # Template Variable Type Description + # organization.id Integer Value uniquely identifying the organization. + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example:GET /org/87 + # + # @param org_id [String, Integer] the organization id + # @raise [TypeError] if given organization id is not a number + # @return [Success, RequestError] + def organization(org_id) + raise TypeError, 'Integer expected for organization id' unless /^\d+$/.match? org_id.to_s + + get("#{without_repo}/org/#{org_id}") + end + + # A list of organizations for the current user. + # + # ## Attributes + # + # Name Type Description + # organizations [Organization] List of organizations. + # + # **Collection Items** + # + # Each entry in the **organizations** array has the following attributes: + # + # Name Type Description + # id Integer Value uniquely identifying the organization. + # login String Login set on GitHub. + # name String Name set on GitHub. + # github_id Integer Id set on GitHub. + # avatar_url String Avatar_url set on GitHub. + # education Boolean Whether or not the organization has an education account. + # allow_migration Unknown The organization's allow_migration. + # repositories [Repository] Repositories belonging to this organization. + # installation Installation Installation belonging to the organization. + # + # ## Actions + # + # **For Current User** + # + # This returns a list of organizations the current user is a member of. + # + # GET <code>/orgs</code> + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # limit Integer How many organizations to include in the response. Used for pagination. + # offset Integer How many organizations to skip before the first entry in the response. Used for pagination. + # organization.role Unknown Documentation missing. + # role Unknown Alias for organization.role. + # sort_by [String] Attributes to sort organizations by. Used for pagination. + # + # Example:GET /orgs?limit=5 + # + # **Sortable by:** <code>id</code>, <code>login</code>, <code>name</code>, <code>github_id</code>, append <code>:desc</code> to any attribute to reverse order. + # + # @return [Success, RequestError] + def organizations + get("#{without_repo}/orgs") + end + + # This will be either a user or organization. + # + # ## Attributes + # + # **Minimal Representation** + # + # Included when the resource is returned as part of another resource. + # + # Name Type Description + # id Integer Value uniquely identifying the owner. + # login String User or organization login set on GitHub. + # + # **Standard Representation** + # + # Included when the resource is the main response of a request, or is eager loaded. + # + # Name Type Description + # id Integer Value uniquely identifying the owner. + # login String User or organization login set on GitHub. + # name String User or organization name set on GitHub. + # github_id Integer User or organization id set on GitHub. + # avatar_url String Link to user or organization avatar (image) set on GitHub. + # + # **Additional Attributes** + # + # Name Type Description + # repositories [Repository] Repositories belonging to this account. + # + # ## Actions + # + # **Find** + # + # This returns an individual owner. It is possible to use the GitHub login or github_id in the request. + # + # GET <code>/owner/{owner.login}</code> + # + # Template Variable Type Description + # owner.login String User or organization login set on GitHub. + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example: GET /owner/danielpclark + # + # GET <code>/owner/{user.login}</code> + # + # Template Variable Type Description + # user.login String Login set on Github. + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example: GET /owner/danielpclark + # + # GET <code>/owner/{organization.login}</code> + # + # Template Variable Type Description + # organization.login String Login set on GitHub. + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example: GET /owner/travis-ci + # + # GET <code>/owner/github_id/{owner.github_id}</code> + # + # Template Variable Type Description + # owner.github_id Integer User or organization id set on GitHub. + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example: GET /owner/github_id/639823 + # + # @param owner [String] username or github ID + # @return [Success, RequestError] + def owner(owner = username) + if /^\d+$/.match? owner.to_s + get("#{without_repo}/owner/github_id/#{owner}") + else + get("#{without_repo}/owner/#{owner}") + end + end + + # A list of repositories for the current user. + # + # ## Attributes + # + # Name Type Description + # repositories [Repository] List of repositories. + # + # **Collection Items** + # + # Each entry in the repositories array has the following attributes: + # + # Name Type Description + # id Integer Value uniquely identifying the repository. + # name String The repository's name on GitHub. + # slug String Same as {repository.owner.name}/{repository.name}. + # description String The repository's description from GitHub. + # github_language String The main programming language used according to GitHub. + # active Boolean Whether or not this repository is currently enabled on Travis CI. + # private Boolean Whether or not this repository is private. + # owner Owner GitHub user or organization the repository belongs to. + # default_branch Branch The default branch on GitHub. + # starred Boolean Whether or not this repository is starred. + # current_build Build The most recently started build (this excludes builds that have been created but have not yet started). + # last_started_build Build Alias for current_build. + # + # ## Actions + # + # **For Owner** + # + # This returns a list of repositories an owner has access to. + # + # GET <code>/owner/{owner.login}/repos</code> + # + # Template Variable Type Description + # owner.login String User or organization login set on GitHub. + # + # Query Parameter Type Description + # active [Boolean] Alias for repository.active. + # include [String] List of attributes to eager load. + # limit Integer How many repositories to include in the response. Used for pagination. + # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. + # private [Boolean] Alias for repository.private. + # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. + # repository.private [Boolean] Filters repositories by whether or not this repository is private. + # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. + # sort_by [String] Attributes to sort repositories by. Used for pagination. + # starred [Boolean] Alias for repository.starred. + # + # Example: GET /owner/danielpclark/repos?limit=5&sort_by=active,name + # + # **Sortable by:** <code>id</code>, <code>github_id</code>, <code>owner_name</code>, <code>name</code>, <code>active</code>, <code>default_branch.last_build</code>, append <code>:desc</code> to any attribute to reverse order. + # + # GET <code>/owner/{user.login}/repos</code> + # + # Template Variable Type Description + # user.login String Login set on Github. + # + # Query Parameter Type Description + # active [Boolean] Alias for repository.active. + # include [String] List of attributes to eager load. + # limit Integer How many repositories to include in the response. Used for pagination. + # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. + # private [Boolean] Alias for repository.private. + # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. + # repository.private [Boolean] Filters repositories by whether or not this repository is private. + # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. + # sort_by [String] Attributes to sort repositories by. Used for pagination. + # starred [Boolean] Alias for repository.starred. + # + # Example: GET /owner/danielpclark/repos?limit=5&sort_by=active,name + # + # **Sortable by:** <code>id</code>, <code>github_id</code>, <code>owner_name</code>, <code>name</code>, <code>active</code>, <code>default_branch.last_build</code>, append <code>:desc</code> to any attribute to reverse order. + # + # GET <code>/owner/{organization.login}/repos</code> + # + # Template Variable Type Description + # organization.login String Login set on GitHub. + # + # Query Parameter Type Description + # active [Boolean] Alias for repository.active. + # include [String] List of attributes to eager load. + # limit Integer How many repositories to include in the response. Used for pagination. + # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. + # private [Boolean] Alias for repository.private. + # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. + # repository.private [Boolean] Filters repositories by whether or not this repository is private. + # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. + # sort_by [String] Attributes to sort repositories by. Used for pagination. + # starred [Boolean] Alias for repository.starred. + # + # Example: GET /owner/travis-ci/repos?limit=5&sort_by=active,name + # + # **Sortable by:** <code>id</code>, <code>github_id</code>, <code>owner_name</code>, <code>name</code>, <code>active</code>, <code>default_branch.last_build</code>, append <code>:desc</code> to any attribute to reverse order. + # + # GET <code>/owner/github_id/{owner.github_id}/repos</code> + # + # Template Variable Type Description + # owner.github_id Integer User or organization id set on GitHub. + # + # Query Parameter Type Description + # active [Boolean] Alias for repository.active. + # include [String] List of attributes to eager load. + # limit Integer How many repositories to include in the response. Used for pagination. + # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. + # private [Boolean] Alias for repository.private. + # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. + # repository.private [Boolean] Filters repositories by whether or not this repository is private. + # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. + # sort_by [String] Attributes to sort repositories by. Used for pagination. + # starred [Boolean] Alias for repository.starred. + # + # Example: GET /owner/github_id/639823/repos?limit=5&sort_by=active,name + # + # **Sortable by:** <code>id</code>, <code>github_id</code>, <code>owner_name</code>, <code>name</code>, <code>active</code>, <code>default_branch.last_build</code>, append <code>:desc</code> to any attribute to reverse order. + # + # **For Current User**<br /> + # This returns a list of repositories the current user has access to. + # + # GET <code>/repos</code> + # + # Query Parameter Type Description + # active [Boolean] Alias for repository.active. + # include [String] List of attributes to eager load. + # limit Integer How many repositories to include in the response. Used for pagination. + # offset Integer How many repositories to skip before the first entry in the response. Used for pagination. + # private [Boolean] Alias for repository.private. + # repository.active [Boolean] Filters repositories by whether or not this repository is currently enabled on Travis CI. + # repository.private [Boolean] Filters repositories by whether or not this repository is private. + # repository.starred [Boolean] Filters repositories by whether or not this repository is starred. + # sort_by [String] Attributes to sort repositories by. Used for pagination. + # starred [Boolean] Alias for repository.starred. + # + # Example: GET /repos?limit=5&sort_by=active,name + # + # **Sortable by:** <code>id</code>, <code>github_id</code>, <code>owner_name</code>, <code>name</code>, <code>active</code>, <code>default_branch.last_build</code>, append <code>:desc</code> to any attribute to reverse order. + # + # @param owner [String] username or github ID + # @return [Success, RequestError] + def repositories(owner = username) + if /^\d+$/.match? owner.to_s + get("#{without_repo}/owner/github_id/#{owner}/repos#{opts}") + else + get("#{without_repo}/owner/#{owner}/repos#{opts}") + end + end + + # An individual repository. + # + # ## Attributes + # + # **Minimal Representation** + # + # Included when the resource is returned as part of another resource. + # + # Name Type Description + # id Integer Value uniquely identifying the repository. + # name String The repository's name on GitHub. + # slug String Same as {repository.owner.name}/{repository.name}. + # + # **Standard Representation** + # + # Included when the resource is the main response of a request, or is eager loaded. + # + # Name Type Description + # id Integer Value uniquely identifying the repository. + # name String The repository's name on GitHub. + # slug String Same as {repository.owner.name}/{repository.name}. + # description String The repository's description from GitHub. + # github_language String The main programming language used according to GitHub. + # active Boolean Whether or not this repository is currently enabled on Travis CI. + # private Boolean Whether or not this repository is private. + # owner Owner GitHub user or organization the repository belongs to. + # default_branch Branch The default branch on GitHub. + # starred Boolean Whether or not this repository is starred. + # + # ## Actions + # + # **Find** + # + # This returns an individual repository. + # + # GET <code>/repo/{repository.id}</code> + # + # Template Variable Type Description + # repository.id Integer Value uniquely identifying the repository. + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example: GET /repo/891 + # + # GET <code>/repo/{repository.slug}</code> + # + # Template Variable Type Description + # repository.slug String Same as {repository.owner.name}/{repository.name}. + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example: GET /repo/rails%2Frails + # + # **Activate** + # + # This will activate a repository, allowing its tests to be run on Travis CI. + # + # POST <code>/repo/{repository.id}/activate</code> + # + # Template Variable Type Description + # repository.id Integer Value uniquely identifying the repository. + # + # Example: POST /repo/891/activate + # + # POST <code>/repo/{repository.slug}/activate</code> + # + # Template Variable Type Description + # repository.slug String Same as {repository.owner.name}/{repository.name}. + # + # Example: POST /repo/rails%2Frails/activate + # + # **Deactivate** + # + # This will deactivate a repository, preventing any tests from running on Travis CI. + # + # POST <code>/repo/{repository.id}/deactivate</code> + # + # Template Variable Type Description + # repository.id Integer Value uniquely identifying the repository. + # + # Example: POST /repo/891/deactivate + # + # POST <code>/repo/{repository.slug}/deactivate</code> + # + # Template Variable Type Description + # repository.slug String Same as {repository.owner.name}/{repository.name}. + # + # Example: POST /repo/rails%2Frails/deactivate + # + # **Star** + # + # This will star a repository based on the currently logged in user. + # + # POST <code>/repo/{repository.id}/star</code> + # + # Template Variable Type Description + # repository.id Integer Value uniquely identifying the repository. + # + # Example: POST /repo/891/star + # + # POST <code>/repo/{repository.slug}/star</code> + # + # Template Variable Type Description + # repository.slug String Same as {repository.owner.name}/{repository.name}. + # + # Example: POST /repo/rails%2Frails/star + # + # **Unstar** + # + # This will unstar a repository based on the currently logged in user. + # + # POST <code>/repo/{repository.id}/unstar</code> + # + # Template Variable Type Description + # repository.id Integer Value uniquely identifying the repository. + # + # Example: POST /repo/891/unstar + # + # POST <code>/repo/{repository.slug}/unstar</code> + # + # Template Variable Type Description + # repository.slug String Same as {repository.owner.name}/{repository.name}. + # + # Example: POST /repo/rails%2Frails/unstar + # + # @note POST requests require an authorization token set in the headers. See: {h} + # + # @param repo [String] github_username/repository_name + # @param action [String, Symbol] Optional argument for star/unstar/activate/deactivate + # @raise [InvalidRepository] if given input does not + # conform to valid repository identifier format + # @return [Success, RequestError] + def repository(repo = repository_name, action = nil) + raise InvalidRepository unless repo_slug_or_id? repo + + repo = sanitize_repo_name repo + action = '' unless %w[star unstar activate deavtivate].include? action.to_s + + if action.empty? + get("#{without_repo}/repo/#{repo}") + else + post("#{without_repo}/repo/#{repo}/#{action}") + end + end + + # An individual user. + # + # ## Attributes + # + # **Minimal Representation** + # + # Included when the resource is returned as part of another resource. + # + # Name Type Description + # id Integer Value uniquely identifying the user. + # login String Login set on Github. + # + # **Standard Representation** + # + # Included when the resource is the main response of a request, or is {https://developer.travis-ci.com/eager-loading eager loaded}. + # + # Name Type Description + # id Integer Value uniquely identifying the user. + # login String Login set on Github. + # name String Name set on GitHub. + # github_id Integer Id set on GitHub. + # avatar_url String Avatar URL set on GitHub. + # education Boolean Whether or not the user has an education account. + # allow_migration Unknown The user's allow_migration. + # is_syncing Boolean Whether or not the user is currently being synced with Github. + # synced_at String The last time the user was synced with GitHub. + # + # **Additional Attributes** + # + # Name Type Description + # repositories [Repository] Repositories belonging to this user. + # installation Installation Installation belonging to the user. + # emails Unknown The user's emails. + # + # ## Actions + # + # **Find** + # + # This will return information about an individual user. + # + # GET <code>/user/{user.id}</code> + # + # Template Variable Type Description + # user.id Integer Value uniquely identifying the user. + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example:GET /user/119240 + # + # **Sync** + # + # This triggers a sync on a user's account with their GitHub account. + # + # POST <code>/user/{user.id}/sync</code> + # + # Template Variable Type Description + # user.id Integer Value uniquely identifying the user. + # + # Example:POST /user/119240/sync + # + # **Current** + # + # This will return information about the current user. + # + # GET <code>/user</code> + # + # Query Parameter Type Description + # include [String] List of attributes to eager load. + # + # Example:GET /user + # + # @note sync feature may not be permitted + # @note POST requests require an authorization token set in the headers. See: {h} + # + # @param user_id [String, Integer] optional user id + # @param sync [Boolean] optional argument for syncing your Travis CI account with Github + # @raise [TypeError] if given user id is not a number + # @return [Success, RequestError] + def user(user_id = nil, sync = false) + return get("#{without_repo}/user") if !user_id && !sync + raise TypeError, 'Integer expected for user id' unless /^\d+$/.match? user_id.to_s + + if sync + get("#{without_repo}/user/#{user_id}/sync") + else + get("#{without_repo}/user/#{user_id}") + end + end + private # @private - def [](repository = false) - [api_endpoint()].tap {|a| a.push("repo/#{@repo}") if repository }.join('/') + + def get(url, raw_reply = false) + Trav3::GET.call(self, url, raw_reply) end - def repository_name - @repo + def initial_defaults + defaults(limit: 25) + h('Content-Type': 'application/json') + h('Accept': 'application/json') + h('Travis-API-Version': 3) end def opts @options end - def get(x, raw_reply = false) - Trav3::GET.(self, x, raw_reply) + def post(url, fields = {}) + Trav3::POST.call(self, url, fields) end - def post(x, fields = {}) - Trav3::POST.(self, x, fields) + def repo_slug_or_id?(repo) + Regexp.new(/(^\d+$)|(^\w+(?:\/|%2F){1}\w+$)/).match? repo end + def repository_name + @repo + end + + def sanitize_repo_name(repo) + repo.to_s.gsub(/\//, '%2F') + end + def username @repo[/.*?(?=(?:\/|%2F)|$)/] end + + def with_repo + "#{api_endpoint}/repo/#{@repo}" + end + + def without_repo + api_endpoint + end end + # rubocop:enable Metrics/ClassLength end