lib/git/semaphore/project.rb in git-semaphore-2.1.0 vs lib/git/semaphore/project.rb in git-semaphore-2.2.0

- old
+ new

@@ -1,176 +1,189 @@ -class Git::Semaphore::Project +module Git + module Semaphore + class Project - def self.env_overrides - ENV.to_h.select { |key, _| key.start_with? 'SEMAPHORE_' } - end + def self.env_overrides + ENV.to_h.select { |key, _| key.start_with? 'SEMAPHORE_' } + end - def self.from_repo git_repo - self.from_config({ - 'SEMAPHORE_PROJECT_NAME' => git_repo.full_name, - 'SEMAPHORE_BRANCH_NAME' => git_repo.head.name.split('/').last, - 'SEMAPHORE_COMMIT_SHA' => git_repo.head.target.oid, - 'SEMAPHORE_BUILD_NUMBER' => nil - }.merge(env_overrides)) - end + def self.from_repo(git_repo) + from_config({ + 'SEMAPHORE_PROJECT_NAME' => git_repo.full_name, + 'SEMAPHORE_BRANCH_NAME' => git_repo.head.name.split('/').last, + 'SEMAPHORE_COMMIT_SHA' => git_repo.head.target.oid, + 'SEMAPHORE_BUILD_NUMBER' => nil + }.merge(env_overrides)) + end - def self.from_config config - self.new( - config['SEMAPHORE_PROJECT_NAME'], - config['SEMAPHORE_BRANCH_NAME'], - { - commit_sha: config['SEMAPHORE_COMMIT_SHA'], - build_number: config['SEMAPHORE_BUILD_NUMBER'], - } - ) - end + def self.from_config(config) + new( + config['SEMAPHORE_PROJECT_NAME'], + config['SEMAPHORE_BRANCH_NAME'], + commit_sha: config['SEMAPHORE_COMMIT_SHA'], + build_number: config['SEMAPHORE_BUILD_NUMBER'], + ) + end - def initialize full_name, branch_name = nil, options = {} - @auth_token = Git::Semaphore.auth_token - @full_name = full_name - @owner, @name = full_name.split('/') - @branch_name = branch_name || 'master' - @commit_sha = options[:commit_sha] - @build_number = options[:build_number] - end + attr_accessor :owner, :name, :full_name - def settings - { - auth_token: @auth_token, - project_name: @full_name, - branch_name: @branch_name, - commit_sha: @commit_sha, - build_number: @build_number, - } - end + def initialize(full_name, branch_name = nil, options = {}) + @auth_token = Git::Semaphore.auth_token + @full_name = full_name + @owner, @name = full_name&.split('/') + @branch_name = branch_name || 'master' + @commit_sha = options[:commit_sha] + @build_number = options[:build_number] + end - def internals - settings.merge({ - project: { - owner: @owner, - name: @name, - full_name: @full_name, - hash_id: project_hash_id, - url: project_url, - }, - branch: { - name: @branch_name, - id: branch_id, - url: branch_url, - }, - build: { - number: build_number, - result: build_result, - url: build_url, - }, - }) - end + def exist? + !project_hash.nil? + end - # - # build-related queries: default to latest one... - # + def settings + { + auth_token: @auth_token, + project_name: @full_name, + branch_name: @branch_name, + commit_sha: @commit_sha, + build_number: @build_number, + } + end - def build_number - @build_number ||= history['builds'].first['build_number'].to_s - end + def internals + settings.merge( + project: { + owner: @owner, + name: @name, + full_name: @full_name, + hash_id: project_hash_id, + url: project_url, + }, + branch: { + name: @branch_name, + id: branch_id, + url: branch_url, + }, + build: { + number: build_number, + result: build_result, + url: build_url, + }, + ) + end - def build_result - @build_result ||= history['builds'].first['result'] - end + # + # build-related queries: default to latest one... + # - # - # direct links to semaphore.ci - # + def build_number + @build_number ||= history['builds'].first['build_number'].to_s + end - def project_url - project_hash['html_url'] - end + def build_result + @build_result ||= history['builds'].first['result'] + end - def branch_url - branch_hash = project_hash['branches'].find { |hash| - hash['branch_name'] == @branch_name - } - branch_hash['branch_url'] - end + # + # direct links to semaphore.ci + # - def build_url - build_hash = history['builds'].find { |hash| - hash['build_number'].to_s == @build_number - } - build_hash['build_url'] - end + def project_url + project_hash['html_url'] + end - # - # API related queries - # + def branch_url + branch_hash = project_hash['branches'].find { |hash| + hash['branch_name'] == @branch_name + } + branch_hash['branch_url'] + end - def self.all - Git::Semaphore::API::Cache.projects(Git::Semaphore.auth_token) - end + def build_url + build_hash = history['builds'].find { |hash| + hash['build_number'].to_s == @build_number + } + build_hash['build_url'] + end - class << self - alias_method :projects, :all - end + # + # API related queries + # - def branches - Git::Semaphore::API::Cache.branches(project_hash_id, @auth_token) - end + def self.all(refresh = false) + Git::Semaphore::API::Cache.projects(refresh, Git::Semaphore.auth_token) + end - def status - Git::Semaphore::API::Cache.status(project_hash_id, branch_id, @auth_token) - end + class << self + alias_method :projects, :all + end - def history - Git::Semaphore::API::Cache.history(project_hash_id, branch_id, @auth_token) - end + def branches(refresh = false) + Git::Semaphore::API::Cache.branches(project_hash_id, refresh, @auth_token) + end - def information - Git::Semaphore::API::Cache.information(project_hash_id, branch_id, build_number, @auth_token,) - end + def status(refresh = false) + Git::Semaphore::API::Cache.status(project_hash_id, branch_id, refresh, @auth_token) + end - def log - Git::Semaphore::API::Cache.log(project_hash_id, branch_id, build_number, @auth_token,) - end + def history(refresh = false) + Git::Semaphore::API::Cache.history(project_hash_id, branch_id, refresh, @auth_token) + end - def rebuild - Git::Semaphore::API.rebuild(project_hash_id, branch_id, @auth_token) - end + def information(refresh = false) + Git::Semaphore::API::Cache.information(project_hash_id, branch_id, build_number, refresh, @auth_token) + end - private + def log(refresh = false) + Git::Semaphore::API::Cache.log(project_hash_id, branch_id, build_number, refresh, @auth_token) + end - def project_hash_for owner, name - self.class.projects.find { |project_hash| - project_hash['owner'] == owner && project_hash['name'] == name - } - end + def rebuild + Git::Semaphore::API.rebuild(project_hash_id, branch_id, @auth_token) + end - def project_hash - project_hash_for(@owner, @name) - end + def browse + `open #{branch_url}` + { url: branch_url } + end - def project_hash_id_for owner, name - project_hash_for(owner, name)['hash_id'] - end + private - def project_hash_id - project_hash_id_for(@owner, @name) - end + def project_hash_for(owner, name) + self.class.projects.find { |project_hash| + project_hash['owner'] == owner && project_hash['name'] == name + } + end - def branch_hash_for branch_name - branches.find { |branch_hash| - branch_hash['name'] == branch_name - } - end + def project_hash + project_hash_for(@owner, @name) + end - def branch_hash - branch_hash_for(@branch_name) - end + def project_hash_id_for(owner, name) + project_hash_for(owner, name)['hash_id'] + end - def branch_id_for branch_name - branch_hash_for(branch_name)['id'].to_s - end + def project_hash_id + project_hash_id_for(@owner, @name) + end - def branch_id - branch_id_for(@branch_name) - end + def branch_hash_for(branch_name) + branches.find { |branch_hash| + branch_hash['name'] == branch_name + } + end + def branch_hash + branch_hash_for(@branch_name) + end + + def branch_id_for(branch_name) + branch_hash_for(branch_name)['id'].to_s + end + + def branch_id + branch_id_for(@branch_name) + end + + end + end end