class AutoGemsets::Application

Attributes

args[R]
command[R]
options[R]

Public Class Methods

new(output = $stdout, input = $stdin, args = Array.try_convert(ARGV)) click to toggle source
# File lib/auto-gemsets/application.rb, line 20
def initialize(output = $stdout, input = $stdin, args = Array.try_convert(ARGV))
  @output = output
  @input = input
  @args = args
  @command = @args.empty? ? :current : @args.shift.to_sym unless @args.first =~ /^-/
  parse_options
end

Public Instance Methods

create(gemset) click to toggle source
# File lib/auto-gemsets/application.rb, line 53
def create(gemset)
  touch(gemset)
end
current() click to toggle source
# File lib/auto-gemsets/application.rb, line 28
def current
  gemset = "-> #{ENV['GEMSET']}";
  gemset = "#{gemset}*" if ENV['GEMSET'] == default_gemset
  @output.puts gemset
end
edit() click to toggle source
# File lib/auto-gemsets/application.rb, line 114
def edit
  raise "You must set $EDITOR or $TERM_EDITOR to edit Gemfiles" unless ENV['EDITOR'] || ENV['TERM_EDITOR']
  %x{#{ENV['EDITOR'] || ENV['TERM_EDITOR']} #{ENV['GEMFILE']}} if File.exists ENV['GEMFILE']
end
init() click to toggle source
# File lib/auto-gemsets/application.rb, line 119
def init
  if File.exists? script_file
    @output.puts "auto-gemsets is already installed!"
    confirm("Do you wish overwrite this installation?", {
      accept: -> {
        install_auto_gemsets
      },
      deny: -> {
        @output.puts "Existing installation preserved."
      }
    })
  else
    install_auto_gemsets
  end
end
list() click to toggle source
# File lib/auto-gemsets/application.rb, line 43
def list
  ls
end
ls() click to toggle source
# File lib/auto-gemsets/application.rb, line 38
def ls
  gemsets = Dir.glob(File.join(ENV['HOME'], '.gemsets', '*')).map { |d| display_gemset d }
  @output.puts gemsets.join "\n"
end
mv(gemset, new_gemset) click to toggle source
# File lib/auto-gemsets/application.rb, line 57
def mv(gemset, new_gemset)
  if !File.exists?(gemset_path(new_gemset)) && FileUtils.mv(gemset_path(gemset), gemset_path(new_gemset))
    @output.puts "#{gemset} renamed to #{new_gemset}"
  else
    @output.puts "#{new_gemset} already exists!"
    confirm("Do you really wish to replace #{new_gemset} with #{gemset}?", {
      accept: -> {
        if FileUtils.rm_rf(gemset_path(new_gemset)) && FileUtils.mv(gemset_path(gemset), gemset_path(new_gemset))
          @output.puts "#{gemset} renamed to #{new_gemset}"
        end
      },
      deny: -> {
        @output.puts "No gemsets were harmed."
      }
    })
  end
end
open(gemset = nil) click to toggle source
# File lib/auto-gemsets/application.rb, line 96
def open(gemset = nil)
  command = case
  when AutoGemsets::on_OSX?
    'open'
  when AutoGemsets::on_linux?
    'xdg-open'
  when AutoGemsets::on_windows?
    'explorer'
  end

  if gemset
    %x{#{command} #{gemset_path(gemset)}} if File.exists?(gemset_path(gemset))
    @output.puts "No gemset named #{gemset}!" unless File.exists?(gemset_path(gemset))
  else
    %x{#{command} #{AutoGemsets::GEMSET_ROOT}}
  end
end
remove(gemset) click to toggle source
# File lib/auto-gemsets/application.rb, line 92
def remove(gemset)
  rm(gemset)
end
rename(gemset, new_gemset) click to toggle source
# File lib/auto-gemsets/application.rb, line 75
def rename(gemset, new_gemset)
  mv(gemset, new_gemset)
end
rm(gemset) click to toggle source
# File lib/auto-gemsets/application.rb, line 79
def rm(gemset)
  confirm("Are you sure you wish to delete the #{gemset} gemset?", {
    accept: -> {
      if File.exists?(gemset_path(gemset)) && FileUtils.rm_rf(gemset_path(gemset))
        @output.puts "#{gemset} gemset removed!"
      end
    },
    deny: -> {
      @output.puts "No gemsets were harmed."
    }
  })
end
run() click to toggle source
# File lib/auto-gemsets/application.rb, line 34
def run
  self.send @command, *@args
end
touch(gemset) click to toggle source
# File lib/auto-gemsets/application.rb, line 47
def touch(gemset)
  if !File.exists?(gemset_path(gemset)) && FileUtils.mkdir_p(gemset_path(gemset))
    @output.puts "#{gemset} gemset created"
  end
end

Private Instance Methods

confirm(question, callbacks = {}) click to toggle source
# File lib/auto-gemsets/application.rb, line 191
def confirm(question, callbacks = {})
  settings = {
    accept: -> { nil },
    deny: -> { nil }
  }.merge! callbacks

  @output.puts "#{question} y/n"
  @input.gets =~ /^y/i ? settings[:accept].call : settings[:deny].call
end
create_script(script) click to toggle source
# File lib/auto-gemsets/application.rb, line 209
def create_script(script)
  FileUtils.mkdir_p(AutoGemsets::INSTALL_ROOT) unless File.exists? AutoGemsets::INSTALL_ROOT
  FileUtils.cp(File.join(AutoGemsets::ROOT, 'lib', 'auto-gemsets', script), AutoGemsets::INSTALL_ROOT)
end
default_gems_file() click to toggle source
# File lib/auto-gemsets/application.rb, line 205
def default_gems_file
  File.join(AutoGemsets::INSTALL_ROOT, "default-gems.sh")
end
default_gemset() click to toggle source
# File lib/auto-gemsets/application.rb, line 175
def default_gemset
  File.basename(ENV['DEFAULT_GEMSET'])
end
display_gemset(gemset_dir) click to toggle source
# File lib/auto-gemsets/application.rb, line 179
def display_gemset(gemset_dir)
  case gemset = File.basename(gemset_dir)
  when default_gemset
    gemset = "   #{gemset}*"
  when ENV['GEMSET']
    gemset = "-> #{gemset}"
  else
    gemset = "   #{gemset}"
  end
  gemset
end
gemset_path(gemset) click to toggle source
# File lib/auto-gemsets/application.rb, line 171
def gemset_path(gemset)
  File.join(AutoGemsets::GEMSET_ROOT, gemset)
end
help() click to toggle source
# File lib/auto-gemsets/application.rb, line 163
def help
  @output.puts AutoGemsets::HELP
end
install_auto_gemsets() click to toggle source
# File lib/auto-gemsets/application.rb, line 136
def install_auto_gemsets
  create_script 'auto-gemsets.sh'
  create_script 'default-gems.sh'
  config_file = File.join(ENV['HOME'], '.auto-gemsets')
  default_gemset_dir = File.join(AutoGemsets::GEMSET_ROOT, 'default')
  FileUtils.cp(File.join(AutoGemsets::ROOT, 'lib', 'auto-gemsets', '.auto-gemsets'), config_file) unless File.exists? config_file
  FileUtils.mkdir_p(AutoGemsets::GEMSET_ROOT) unless File.exists?(AutoGemsets::GEMSET_ROOT)
  FileUtils.mkdir_p(default_gemset_dir) unless File.exists?(default_gemset_dir)
end
parse_options() click to toggle source
# File lib/auto-gemsets/application.rb, line 146
def parse_options
  @options = {}
  OptionParser.new do |opts|
    opts.on("-v", "--version", "Version info") do
      @options[:version] = true
      @command = :version
    end

    opts.on('-h', '--help', 'Display help') do
      @options[:help] = true
      @command = :help
    end
  end.parse!

  @args.reject! { |a| a =~ /^-/ }
end
script_file() click to toggle source
# File lib/auto-gemsets/application.rb, line 201
def script_file
  File.join(AutoGemsets::INSTALL_ROOT, "auto-gemsets.sh")
end
version() click to toggle source
# File lib/auto-gemsets/application.rb, line 167
def version
  @output.puts "auto-gemsets #{AutoGemsets::VERSION}"
end