Sha256: 29e223769b7850740dd34c0a4524b7e48c902dc1df9546d72d823dd8d89c1b70

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module JekyllPush
  #
  #
  class Branch
    attr_reader :target

    # @param target [String] the name of the Git branch to deploy to
    def initialize(target)
      @target = JekyllPush::Utils.slugify target
      @time   = Time.now.strftime('%H:%M on %Y-%m-%d')

      (class << self; include JekyllPush::Travis; end) if on_travis?
      (class << self; include JekyllPush::Local; end)  if local?

      @commit = commit
      @origin = origin
      @msg    = msg

      raise JekyllPush::Error::NoOrigin, 'No remote origin was found for the project GitHub repository.' if @origin.empty?
    end

    #
    # @return [Boolean]
    def on_travis?
      !!ENV.fetch('CI', false)
    end

    #
    # @return [Boolean]
    def local?
      !on_travis?
    end

    #
    # @return [Array]
    def git_commands
      ['git init && git add .', "git commit -m '#{@commit}'", "git remote add origin #{@origin}", "git push origin master:refs/heads/#{@target} --force"]
    end

    #
    # @return [Nil]
    def push(dir)
      files = Dir.glob "#{dir}/**/*"
      raise JekyllPush::Error::NoFilesBuilt, "Found no files inside site directory '#{dir}' to push." if files.empty?

      puts Rainbow("\nFound the following _site files:").cyan
      pretty_list files
      puts Rainbow(@msg).cyan

      Dir.chdir dir
      File.open('.info', 'w') { |f| f.write @time }

      git_commands.each { |cmd| system_try cmd }
    end

    #
    # @return [Nil]
    def pretty_list(items)
      items.each { |i| puts "\t+ #{i.strip}" }
    end

    #
    # @return [Nil]
    def system_try(command)
      puts Rainbow("\nTrying `#{command}`").cyan
      success = system command
      return if success

      raise JekyllPush::Error::SystemCall, Rainbow("JekyllPush Failed on command '#{command}'.")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jekyll_push-0.1.1 lib/jekyll_push/branch.rb