Sha256: 00871cd7c9dc27eccdd31f9e3e3f408a8dfbdce5d5af202ebb7db76a5ba28804

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 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?
        result = update
        puts "Updated `#{file_path}` to #{result.html_url}"
      elsif GistUpdater.debug
        puts "There is no update for `#{file_path}`."
      end

      result
    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

    # 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.3.1 lib/gist_updater/content.rb