Sha256: 4c9f6074811d1e8dc286d350d9447c3337d985ed129b6ffdebff5dbdfd3bcea7

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

require 'octokit'

module GistUpdater
  # A content related to a gist file
  class Content
    # @param user [String] GitHub username
    # @param access_token [String] GitHub personal access token
    # @param gist_id [String] A gist id
    # @param file_path [String] A relative file path
    def initialize(user:, access_token:, gist_id:, file_path:)
      @user         = user
      @access_token = access_token
      @gist_id      = gist_id
      @file_path    = file_path
    end

    # Update the content if needed
    #
    # @return [Sawyer::Resource] an updated resource
    # @return [NilClass] isnot updated
    def update_if_need
      if need_to_update?
        resource = update
        puts "Updated `#{file_path}` to #{resource.html_url}"
      elsif GistUpdater.debug
        puts "There is no update for `#{file_path}`."
      end

      pick_a_file(resource)
    end

    private

    attr_reader :user, :access_token, :gist_id, :file_path

    def client
      @client ||= Octokit::Client.new(login: user, access_token: access_token)
    end

    def need_to_update?
      @need_to_update ||= gist != local
    end

    def gist
      @gist ||= client.gist(gist_id).files[file_name].content
    end

    def local
      @local ||= File.read(file_path)
    end

    def pick_a_file(resource)
      files = resource&.files
      files[file_name] if files
    end

    # Update a Gist file
    #
    # @return [Sawyer::Resource]
    def update
      client.edit_gist(
        gist_id,
        files: { file_name => { 'content' => local } }
      )
    end

    def file_name
      @file_name ||= File.basename(file_path)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gist_updater-0.4.6 lib/gist_updater/content.rb