Class: GemHadar::GitHub::ReleaseCreator
- Inherits:
 - 
      Object
      
        
- Object
 - GemHadar::GitHub::ReleaseCreator
 
 
- Defined in:
 - lib/gem_hadar/github.rb
 
Overview
A client for creating GitHub releases via the GitHub API.
This class provides functionality to interact with the GitHub Releases API, enabling the creation of new releases for a specified repository. It handles the HTTP request setup, including appropriate headers and authentication, and processes the API response to either return the created release data or raise an error if the creation fails.
Class Attribute Summary collapse
- 
  
    
      .github_api_url  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
Returns the value of attribute github_api_url.
 
Instance Method Summary collapse
- 
  
    
      #initialize(owner:, repo:, token:, api_version: '2022-11-28')  ⇒ ReleaseCreator 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
The initialize method sets up the ReleaseCreator instance with required GitHub API configuration.
 - 
  
    
      #perform(tag_name:, target_commitish:, body:, name: tag_name, draft: false, prerelease: false)  ⇒ JSON::GenericObject 
    
    
  
  
  
  
  
  
  
  
  
    
The perform method creates a new GitHub release using the GitHub API.
 
Constructor Details
#initialize(owner:, repo:, token:, api_version: '2022-11-28') ⇒ ReleaseCreator
The initialize method sets up the ReleaseCreator instance with required GitHub API configuration.
This method stores the owner, repository, and authentication token needed to interact with the GitHub Releases API. It also accepts an optional API version parameter to specify which version of the GitHub API to use.
      51 52 53 54 55 56  | 
    
      # File 'lib/gem_hadar/github.rb', line 51 def initialize(owner:, repo:, token:, api_version: '2022-11-28') @owner = owner @repo = repo @token = token @api_version = api_version end  | 
  
Class Attribute Details
.github_api_url ⇒ Object
Returns the value of attribute github_api_url.
      36 37 38  | 
    
      # File 'lib/gem_hadar/github.rb', line 36 def github_api_url @github_api_url end  | 
  
Instance Method Details
#perform(tag_name:, target_commitish:, body:, name: tag_name, draft: false, prerelease: false) ⇒ JSON::GenericObject
The perform method creates a new GitHub release using the GitHub API.
This method sends a POST request to the GitHub Releases API to create a new release for the specified repository. It constructs the appropriate HTTP headers including authentication and content type, prepares the release data with the provided parameters, and handles the API response by parsing successful responses or raising an error for failed requests.
      77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110  | 
    
      # File 'lib/gem_hadar/github.rb', line 77 def perform(tag_name:, target_commitish:, body:, name: tag_name, draft: false, prerelease: false) uri = URI("#{self.class.github_api_url}/repos/#@owner/#@repo/releases") headers = { "Accept" => "application/vnd.github+json", "Authorization" => "Bearer #@token", "Content-Type" => "application/json", "X-GitHub-Api-Version" => @api_version, "User-Agent" => [ GemHadar.name, GemHadar::VERSION ] * ?/, } data = { tag_name:, target_commitish:, body:, name:, draft:, prerelease:, }.compact response = Net::HTTP.post(uri, JSON(data), headers) case response when Net::HTTPSuccess JSON.parse(response.body, object_class: JSON::GenericObject) else error_data = begin JSON.pretty_generate(JSON.parse(response.body)) rescue response.body end raise "Failed to create release. Status: #{response.code}\n\n#{error_data}" end end  |