# frozen_string_literal: true
module Gitlab
# Wrapper for the Gitlab REST API.
class Client < API
Dir[File.expand_path('client/*.rb', __dir__)].each { |f| require f }
# Please keep in alphabetical order
include AccessRequests
include ApplicationSettings
include Avatar
include AwardEmojis
include Boards
include Branches
include BroadcastMessages
include BuildVariables
include Builds
include Commits
include ContainerRegistry
include Deployments
include Environments
include EpicIssues
include Epics
include Events
include Features
include GroupBadges
include GroupBoards
include GroupLabels
include GroupMilestones
include Groups
include IssueLinks
include Issues
include Jobs
include Keys
include Labels
include Lint
include Markdown
include MergeRequestApprovals
include MergeRequests
include Milestones
include Namespaces
include Notes
include PipelineSchedules
include PipelineTriggers
include Pipelines
include ProjectBadges
include ProjectClusters
include ProjectReleaseLinks
include ProjectReleases
include Projects
include ProtectedTags
include Repositories
include RepositoryFiles
include RepositorySubmodules
include ResourceLabelEvents
include ResourceStateEvents
include Runners
include Search
include Services
include Sidekiq
include Snippets
include SystemHooks
include Tags
include Templates
include Todos
include Users
include UserSnippets
include Versions
include Wikis
# Text representation of the client, masking private token.
#
# @return [String]
def inspect
inspected = super
inspected.sub! @private_token, only_show_last_four_chars(@private_token) if @private_token
inspected
end
# Utility method for URL encoding of a string.
# Copied from https://ruby-doc.org/stdlib-2.7.0/libdoc/erb/rdoc/ERB/Util.html
#
# @return [String]
def url_encode(url)
url.to_s.b.gsub(/[^a-zA-Z0-9_\-.~]/n) { |m| sprintf('%%%02X', m.unpack1('C')) } # rubocop:disable Style/FormatString
end
private
def only_show_last_four_chars(token)
"#{'*' * (token.size - 4)}#{token[-4..-1]}"
end
end
end