lib/k_ext/github/api.rb in k_ext-github-0.0.2 vs lib/k_ext/github/api.rb in k_ext-github-0.0.3
- old
+ new
@@ -1,124 +1,124 @@
-# frozen_string_literal: true
-
-module KExt
- module Github
- # Print formatted log for GitHub data such as repositories
- require 'octokit'
-
- # The API provides a limited set of service methods for working against GitHub
- class Api
- include KLog::Logging
- include Virtus.model
-
- # attribute :client_id, String, :writer => :private
- # attribute :secret, String, :writer => :private
-
- # attribute :sites, Array[Netlify::Site], :writer => :private
- attribute :client, Octokit::Client, writer: :private
-
- def self.instance(access_token)
- GithubApi.new(token: access_token)
- end
-
- # Create API for communicating with GitHub
- #
- # Provide token OR login/password
- #
- # Create a token here
- # https://github.com/settings/tokens/new
- #
- # @param [String] token
- # @param [String] login
- # @param [String] password
- def initialize(token: nil, login: nil, password: nil)
- auth(token: token, login: login, password: password) if token || login || password
- end
-
- # Authenticate against GitHub with username and password or token
- #
- # Provide token OR login/password
- #
- # Create a token here
- # https://github.com/settings/tokens/new
- # @param [String] token
- # @param [String] login
- # @param [String] password
- def auth(token: nil, login: nil, password: nil)
- raise 'Provide credentials. Token or username/password' if token.nil? && (login.nil? || password.nil?)
-
- self.client = if token.nil?
- Octokit::Client.new(login: login, password: password)
- else
- Octokit::Client.new(access_token: token)
- end
-
- # Fetch the current user
- log.kv 'GitHub User', client.user.name
- end
-
- # --------------------------------------------------------------------------------
- # Service Actions
- # --------------------------------------------------------------------------------
-
- # list of repositories for this user
- #
- def repositories
- items = @client.repositories({}, query: { per_page: 100 })
-
- items.map { |item| KExt::Github::Models::Repository.new(item) }
- end
-
- # create repository
- #
- # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
- def create_repository(repository_name, **options)
- @client.create_repository(repository_name, options)
- end
-
- # delete repository
- #
- # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
- def delete_repository(repository_name, **options)
- @client.delete_repository(repository_name, **options)
- end
-
- # list of hooks for repository
- #
- # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
- def hooks(repository_name)
- items = @client.hooks(repository_name)
-
- items.map { |item| KExt::Github::Models::Hook.new(item) }
- end
-
- # list of repositories for organization
- #
- # @param [String] org_name Organization name
- def organization_repositories(org_name)
- items = @client.repositories(org_name, query: { per_page: 100 })
-
- items.map { |item| KExt::Github::Models::Repository.new(item) }
- end
- # organization_repositories(org, options = {}) => Array<Sawyer::Resource> (also: #org_repositories, #org_repos)
-
- # remove hook from repository by id
- #
- # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
- # @param [Integer] id hook ID
- def remove_hook(repository_name, id)
- @client.remove_hook(repository_name, id)
- end
-
- # remove all hooks in a repository
- #
- # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
- def remove_hooks(repository_name)
- hooks = hooks(repository_name)
-
- hooks.each do |hook|
- @client.remove_hook(repository_name, hook.id)
- end
- end
- end
- end
-end
+# frozen_string_literal: true
+
+module KExt
+ module Github
+ # Print formatted log for GitHub data such as repositories
+ require 'octokit'
+
+ # The API provides a limited set of service methods for working against GitHub
+ class Api
+ include KLog::Logging
+ include Virtus.model
+
+ # attribute :client_id, String, :writer => :private
+ # attribute :secret, String, :writer => :private
+
+ # attribute :sites, Array[Netlify::Site], :writer => :private
+ attribute :client, Octokit::Client, writer: :private
+
+ def self.instance(access_token)
+ GithubApi.new(token: access_token)
+ end
+
+ # Create API for communicating with GitHub
+ #
+ # Provide token OR login/password
+ #
+ # Create a token here
+ # https://github.com/settings/tokens/new
+ #
+ # @param [String] token
+ # @param [String] login
+ # @param [String] password
+ def initialize(token: nil, login: nil, password: nil)
+ auth(token: token, login: login, password: password) if token || login || password
+ end
+
+ # Authenticate against GitHub with username and password or token
+ #
+ # Provide token OR login/password
+ #
+ # Create a token here
+ # https://github.com/settings/tokens/new
+ # @param [String] token
+ # @param [String] login
+ # @param [String] password
+ def auth(token: nil, login: nil, password: nil)
+ raise 'Provide credentials. Token or username/password' if token.nil? && (login.nil? || password.nil?)
+
+ self.client = if token.nil?
+ Octokit::Client.new(login: login, password: password)
+ else
+ Octokit::Client.new(access_token: token)
+ end
+
+ # Fetch the current user
+ log.kv 'GitHub User', client.user.name
+ end
+
+ # --------------------------------------------------------------------------------
+ # Service Actions
+ # --------------------------------------------------------------------------------
+
+ # list of repositories for this user
+ #
+ def repositories
+ items = @client.repositories({}, query: { per_page: 100 })
+
+ items.map { |item| KExt::Github::Models::Repository.new(item) }
+ end
+
+ # create repository
+ #
+ # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
+ def create_repository(repository_name, **options)
+ @client.create_repository(repository_name, options)
+ end
+
+ # delete repository
+ #
+ # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
+ def delete_repository(repository_name, **options)
+ @client.delete_repository(repository_name, **options)
+ end
+
+ # list of hooks for repository
+ #
+ # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
+ def hooks(repository_name)
+ items = @client.hooks(repository_name)
+
+ items.map { |item| KExt::Github::Models::Hook.new(item) }
+ end
+
+ # list of repositories for organization
+ #
+ # @param [String] org_name Organization name
+ def organization_repositories(org_name)
+ items = @client.repositories(org_name, query: { per_page: 100 })
+
+ items.map { |item| KExt::Github::Models::Repository.new(item) }
+ end
+ # organization_repositories(org, options = {}) => Array<Sawyer::Resource> (also: #org_repositories, #org_repos)
+
+ # remove hook from repository by id
+ #
+ # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
+ # @param [Integer] id hook ID
+ def remove_hook(repository_name, id)
+ @client.remove_hook(repository_name, id)
+ end
+
+ # remove all hooks in a repository
+ #
+ # @param [String] repository_name e.g. klueless-io/z-test-aerial.com
+ def remove_hooks(repository_name)
+ hooks = hooks(repository_name)
+
+ hooks.each do |hook|
+ @client.remove_hook(repository_name, hook.id)
+ end
+ end
+ end
+ end
+end