Add --list option to CLI class
This commit is contained in:
parent
490df3bd99
commit
124bdb1961
@ -5,7 +5,7 @@ module Teamocil
|
||||
# This class handles interaction with the `tmux` utility.
|
||||
class CLI
|
||||
|
||||
attr_accessor :layout
|
||||
attr_accessor :layout, :layouts
|
||||
|
||||
# Initialize a new run of `tmux`
|
||||
#
|
||||
@ -14,11 +14,18 @@ module Teamocil
|
||||
def initialize(argv, env) # {{{
|
||||
bail "You must be in a tmux session to use teamocil" unless env["TMUX"]
|
||||
|
||||
parse_options!
|
||||
parse_options! argv
|
||||
layout_path = File.join("#{env["HOME"]}", ".teamocil")
|
||||
|
||||
if @options.include?(:list)
|
||||
@layouts = get_layouts(layout_path)
|
||||
return print_layouts
|
||||
end
|
||||
|
||||
if @options.include?(:layout)
|
||||
file = @options[:layout]
|
||||
else
|
||||
file = ::File.join("#{env["HOME"]}/.teamocil", "#{argv[0]}.yml")
|
||||
file = ::File.join(layout_path, "#{argv[0]}.yml")
|
||||
end
|
||||
|
||||
if @options[:edit]
|
||||
@ -34,7 +41,7 @@ module Teamocil
|
||||
end # }}}
|
||||
|
||||
# Parse the command line options
|
||||
def parse_options! # {{{
|
||||
def parse_options!(args) # {{{
|
||||
@options = {}
|
||||
opts = ::OptionParser.new do |opts|
|
||||
opts.banner = "Usage: teamocil [options] <layout>
|
||||
@ -49,12 +56,29 @@ module Teamocil
|
||||
@options[:edit] = true
|
||||
end
|
||||
|
||||
opts.on("--layout [LAYOUT]", "Use a specific layout file, instead of ~/.teamocil/<layout>.yml") do |layout|
|
||||
opts.on("--layout [LAYOUT]", "Use a specific layout file, instead of `~/.teamocil/<layout>.yml`") do |layout|
|
||||
@options[:layout] = layout
|
||||
end
|
||||
|
||||
opts.on("--list", "List all available layouts in `~/.teamocil/`") do
|
||||
@options[:list] = true
|
||||
end
|
||||
|
||||
end
|
||||
opts.parse!
|
||||
opts.parse! args
|
||||
end # }}}
|
||||
|
||||
# Return an array of available layouts
|
||||
#
|
||||
# @param path [String] the path used to look for layouts
|
||||
def get_layouts(path) # {{{
|
||||
Dir.glob(File.join(path, "*.yml")).map { |file| File.basename(file).gsub(/\..+$/, "") }.sort
|
||||
end # }}}
|
||||
|
||||
# Print each layout on a single line
|
||||
def print_layouts # {{{
|
||||
STDOUT.puts @layouts.join("\n")
|
||||
exit 0
|
||||
end # }}}
|
||||
|
||||
# Print an error message and exit the utility
|
||||
|
@ -16,6 +16,11 @@ describe Teamocil::CLI do
|
||||
@cli.layout.session.windows.last.name.should == "bar"
|
||||
end # }}}
|
||||
|
||||
it "lists available layouts" do # {{{
|
||||
@cli = Teamocil::CLI.new(["--list"], @fake_env)
|
||||
@cli.layouts.should == ["sample", "sample-2"]
|
||||
end # }}}
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
20
spec/mock/cli.rb
Normal file
20
spec/mock/cli.rb
Normal file
@ -0,0 +1,20 @@
|
||||
module Teamocil
|
||||
module Mock
|
||||
module CLI
|
||||
|
||||
def self.included(base) # {{{
|
||||
base.class_eval do
|
||||
|
||||
# Do not print anything
|
||||
def print_layouts
|
||||
# Nothing
|
||||
end
|
||||
|
||||
end
|
||||
end # }}}
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Teamocil::CLI.send :include, Teamocil::Mock::CLI
|
@ -4,10 +4,12 @@ module Teamocil
|
||||
|
||||
def self.included(base) # {{{
|
||||
base.class_eval do
|
||||
|
||||
# Do not execute anything
|
||||
def execute_commands(commands)
|
||||
# Nothing
|
||||
end
|
||||
|
||||
end
|
||||
end # }}}
|
||||
|
||||
|
@ -3,6 +3,7 @@ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
||||
require 'yaml'
|
||||
require 'teamocil'
|
||||
require File.join(File.dirname(__FILE__), "./mock/layout.rb")
|
||||
require File.join(File.dirname(__FILE__), "./mock/cli.rb")
|
||||
|
||||
module Helpers
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user