Sha256: 3fc38633deb01bf546f9546d5708af97c45ba2565ad9ac881585eaf77e27fc98

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

# dependencies
require "active_support/core_ext/module/attribute_accessors"

# modules
require "archer/engine" if defined?(Rails)
require "archer/version"

module Archer
  autoload :History, "archer/history"

  mattr_accessor :limit
  self.limit = 200

  mattr_accessor :user
  self.user = ENV["USER"]

  mattr_accessor :history_file

  def self.clear
    quietly do
      Archer::History.where(user: user).delete_all
    end
    Readline::HISTORY.clear if defined?(Readline)
    Reline::HISTORY.clear if defined?(Reline)
    true
  end

  def self.start
    history = nil
    begin
      quietly do
        history = Archer::History.find_by(user: user)
      end
    rescue ActiveRecord::StatementInvalid
      warn "[archer] Create table to enable history"
    end

    if history
      commands = history.commands.split("\n")
      # can't use reline? yet, so push to all
      Readline::HISTORY.push(*commands) if defined?(Readline)
      Reline::HISTORY.push(*commands) if defined?(Reline)
    end
  end

  def self.save
    quietly do
      history = Archer::History.where(user: user).first_or_initialize
      history.commands = history_object.to_a.last(limit).join("\n")
      history.save!
    end
  rescue ActiveRecord::StatementInvalid
    warn "[archer] Unable to save history"
  end

  # private
  def self.history_object
    reline? ? Reline::HISTORY : Readline::HISTORY
  end

  # private
  def self.reline?
    IRB.CurrentContext.io.is_a?(IRB::ReidlineInputMethod)
  rescue
    false
  end

  # private
  def self.quietly
    ActiveRecord::Base.logger.silence do
      yield
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
archer-rails-0.2.0 lib/archer.rb