stuff
This commit is contained in:
parent
afbdee688a
commit
234a6734b3
8
.screenie
Normal file
8
.screenie
Normal file
@ -0,0 +1,8 @@
|
||||
session :first do
|
||||
screen "bundle exec autotest", :title => 'autotest'
|
||||
screen!
|
||||
end
|
||||
|
||||
session :second do
|
||||
screen %{echo "cats"}
|
||||
end
|
54
Gemfile.lock
Normal file
54
Gemfile.lock
Normal file
@ -0,0 +1,54 @@
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
screenie (0.0.1)
|
||||
thor
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
ZenTest (4.4.1)
|
||||
aruba (0.2.7)
|
||||
background_process
|
||||
cucumber (~> 0.10.0)
|
||||
autotest (4.4.6)
|
||||
ZenTest (>= 4.4.1)
|
||||
background_process (1.2)
|
||||
builder (3.0.0)
|
||||
cucumber (0.10.0)
|
||||
builder (>= 2.1.2)
|
||||
diff-lcs (~> 1.1.2)
|
||||
gherkin (~> 2.3.2)
|
||||
json (~> 1.4.6)
|
||||
term-ansicolor (~> 1.0.5)
|
||||
diff-lcs (1.1.2)
|
||||
gherkin (2.3.2)
|
||||
json (~> 1.4.6)
|
||||
term-ansicolor (~> 1.0.5)
|
||||
json (1.4.6)
|
||||
mocha (0.9.10)
|
||||
rake
|
||||
rake (0.8.7)
|
||||
rspec (2.2.0)
|
||||
rspec-core (~> 2.2)
|
||||
rspec-expectations (~> 2.2)
|
||||
rspec-mocks (~> 2.2)
|
||||
rspec-core (2.2.1)
|
||||
rspec-expectations (2.2.0)
|
||||
diff-lcs (~> 1.1.2)
|
||||
rspec-mocks (2.2.0)
|
||||
term-ansicolor (1.0.5)
|
||||
thor (0.14.6)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
aruba
|
||||
autotest
|
||||
bundler (>= 1.0.0)
|
||||
cucumber
|
||||
mocha
|
||||
rspec
|
||||
screenie!
|
||||
thor
|
@ -0,0 +1 @@
|
||||
Autotest.add_discovery { "rspec2" }
|
33
bin/screenie
Executable file
33
bin/screenie
Executable file
@ -0,0 +1,33 @@
|
||||
#!which ruby
|
||||
|
||||
require 'getoptlong'
|
||||
require 'screenie/dsl/builder'
|
||||
|
||||
opt = GetoptLong.new(
|
||||
[ '--input', '-i', GetoptLong::REQUIRED_ARGUMENT ]
|
||||
)
|
||||
|
||||
files = %w{.screenie ~/.screenie}
|
||||
|
||||
opt.each do |key, value|
|
||||
case key
|
||||
when '--input'
|
||||
files = [ value ]
|
||||
end
|
||||
end
|
||||
|
||||
session_name = ARGV.shift
|
||||
|
||||
files.each do |path|
|
||||
if File.exist?(target = File.expand_path(path))
|
||||
sessions = Screenie::DSL::Builder.new(File.read(target))
|
||||
|
||||
if !session_name || session_name.empty?
|
||||
session = sessions.first
|
||||
else
|
||||
session = sessions[session_name.to_sym]
|
||||
end
|
||||
|
||||
session.to_cmd.each { |cmd| system cmd }
|
||||
end
|
||||
end
|
0
lib/screenie/cli.rb
Normal file
0
lib/screenie/cli.rb
Normal file
35
lib/screenie/dsl/builder.rb
Normal file
35
lib/screenie/dsl/builder.rb
Normal file
@ -0,0 +1,35 @@
|
||||
require 'screenie/dsl/session'
|
||||
|
||||
module Screenie
|
||||
module DSL
|
||||
class Builder
|
||||
attr_reader :sessions
|
||||
|
||||
def initialize(code = '', &block)
|
||||
@sessions = []
|
||||
|
||||
if !code.empty?
|
||||
instance_eval(code)
|
||||
else
|
||||
instance_eval(&block)
|
||||
end
|
||||
end
|
||||
|
||||
def session(name = nil, &block)
|
||||
name ||= "screenie-#{Time.now.to_i}"
|
||||
|
||||
session = Session.new(name.to_sym, &block)
|
||||
|
||||
@sessions << session
|
||||
end
|
||||
|
||||
def first
|
||||
@sessions.first
|
||||
end
|
||||
|
||||
def [](key)
|
||||
@sessions.find { |session| session.name == key }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
47
lib/screenie/dsl/screen.rb
Normal file
47
lib/screenie/dsl/screen.rb
Normal file
@ -0,0 +1,47 @@
|
||||
module Screenie
|
||||
module DSL
|
||||
class Screen
|
||||
attr_accessor :screen_id
|
||||
|
||||
def initialize(*options)
|
||||
@options = options
|
||||
@screen_id = nil
|
||||
|
||||
if @options.first.kind_of?(::Fixnum)
|
||||
@screen_id = @options.shift
|
||||
end
|
||||
end
|
||||
|
||||
def stuff
|
||||
output = [ %{-p #{@screen_id || 0} stuff} ]
|
||||
|
||||
if @options.first.kind_of?(::String)
|
||||
output << %{"#{@options.first}\n"}
|
||||
end
|
||||
|
||||
output * ' '
|
||||
end
|
||||
|
||||
def screen
|
||||
title = nil
|
||||
if @options.last.kind_of?(::Hash)
|
||||
opts = @options.last
|
||||
title = opts[:title]
|
||||
end
|
||||
|
||||
if @screen_id == 0
|
||||
output = []
|
||||
output << %{-p 0 title "#{title}"} if title
|
||||
else
|
||||
output = %w{screen}
|
||||
|
||||
output << %{-t "#{title}"} if title
|
||||
|
||||
output << (@screen_id || 0)
|
||||
end
|
||||
|
||||
output * ' '
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
54
lib/screenie/dsl/session.rb
Normal file
54
lib/screenie/dsl/session.rb
Normal file
@ -0,0 +1,54 @@
|
||||
require 'screenie/dsl/screen'
|
||||
|
||||
module Screenie
|
||||
module DSL
|
||||
class Session
|
||||
attr_accessor :name
|
||||
|
||||
def initialize(name = '', code = '', &block)
|
||||
@name = name
|
||||
@screens = []
|
||||
@start_screen = 0
|
||||
|
||||
@start_screen_to_use = nil
|
||||
|
||||
if !code.empty?
|
||||
instance_eval(code)
|
||||
else
|
||||
instance_eval(&block)
|
||||
end
|
||||
end
|
||||
|
||||
def screen(*opts)
|
||||
@screens << Screen.new(*opts)
|
||||
end
|
||||
|
||||
def screen!(*opts)
|
||||
@start_screen_to_use = Screen.new(*opts)
|
||||
@screens << @start_screen_to_use
|
||||
end
|
||||
|
||||
def to_cmd
|
||||
output = [ %{screen -dmS "#{@name}"} ]
|
||||
|
||||
available_screen_ids = (0..9).to_a
|
||||
|
||||
output += @screens.collect { |screen|
|
||||
if !screen.screen_id
|
||||
screen.screen_id = available_screen_ids.shift
|
||||
end
|
||||
|
||||
commands = []
|
||||
commands << %{screen -X -S "#{@name}" #{screen.screen}} if !screen.screen.empty?
|
||||
commands << %{screen -X -S "#{@name}" #{screen.stuff}}
|
||||
}.flatten
|
||||
|
||||
@start_screen = @start_screen_to_use.screen_id if @start_screen_to_use
|
||||
|
||||
output << %{screen -x "#{@name}" -p #{@start_screen}}
|
||||
|
||||
output
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -17,6 +17,9 @@ Gem::Specification.new do |s|
|
||||
s.add_development_dependency "rspec"
|
||||
s.add_development_dependency "mocha"
|
||||
s.add_development_dependency "autotest"
|
||||
s.add_development_dependency "cucumber"
|
||||
s.add_development_dependency "aruba"
|
||||
s.add_dependency 'thor'
|
||||
|
||||
s.files = `git ls-files`.split("\n")
|
||||
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
||||
|
24
spec/lib/screenie/dsl/builder_spec.rb
Normal file
24
spec/lib/screenie/dsl/builder_spec.rb
Normal file
@ -0,0 +1,24 @@
|
||||
require 'spec_helper'
|
||||
require 'screenie/dsl/builder'
|
||||
|
||||
describe Screenie::DSL::Builder do
|
||||
describe '#sessions' do
|
||||
context 'from block' do
|
||||
subject { Screenie::DSL::Builder.new { session("cats") { } }}
|
||||
|
||||
specify { subject[:cats].should_not be_nil }
|
||||
end
|
||||
|
||||
context 'from code' do
|
||||
subject { Screenie::DSL::Builder.new(%{session("cats") { } })}
|
||||
|
||||
specify { subject[:cats].should_not be_nil }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#first' do
|
||||
subject { Screenie::DSL::Builder.new { session do; end }}
|
||||
|
||||
its(:first) { should be_a_kind_of(Screenie::DSL::Session) }
|
||||
end
|
||||
end
|
48
spec/lib/screenie/dsl/screen_spec.rb
Normal file
48
spec/lib/screenie/dsl/screen_spec.rb
Normal file
@ -0,0 +1,48 @@
|
||||
require 'spec_helper'
|
||||
require 'screenie/dsl/screen'
|
||||
|
||||
describe Screenie::DSL::Screen do
|
||||
describe '#to_cmd' do
|
||||
let(:screen) { Screenie::DSL::Screen.new(*params) }
|
||||
|
||||
subject { screen }
|
||||
|
||||
context 'blank' do
|
||||
let(:params) { [] }
|
||||
|
||||
its(:screen) { should == 'screen 0' }
|
||||
end
|
||||
|
||||
context 'with command' do
|
||||
let(:params) { ["command"] }
|
||||
|
||||
its(:screen) { should == 'screen 0' }
|
||||
its(:stuff) { should == %{-p 0 stuff "command
|
||||
"} }
|
||||
end
|
||||
|
||||
context 'with number id' do
|
||||
let(:params) { [ 1 ] }
|
||||
|
||||
its(:screen) { should == "screen 1" }
|
||||
|
||||
specify { screen.screen_id.should == 1 }
|
||||
end
|
||||
|
||||
context 'with number id and command' do
|
||||
let(:params) { [ 1, "command" ] }
|
||||
|
||||
its(:screen) { should == "screen 1" }
|
||||
its(:stuff) { should == %{-p 1 stuff "command
|
||||
"} }
|
||||
specify { screen.screen_id.should == 1 }
|
||||
end
|
||||
|
||||
context 'with title' do
|
||||
let(:params) { [ { :title => 'My title' } ] }
|
||||
|
||||
its(:screen) { should == %{screen -t "My title" 0} }
|
||||
specify { screen.screen_id.should == nil }
|
||||
end
|
||||
end
|
||||
end
|
66
spec/lib/screenie/dsl/session_spec.rb
Normal file
66
spec/lib/screenie/dsl/session_spec.rb
Normal file
@ -0,0 +1,66 @@
|
||||
require 'spec_helper'
|
||||
require 'screenie/dsl/session'
|
||||
|
||||
describe Screenie::DSL::Session do
|
||||
describe '#to_cmd' do
|
||||
context 'one screen' do
|
||||
subject {
|
||||
Screenie::DSL::Session.new("my-session") { screen "test" }.to_cmd
|
||||
}
|
||||
|
||||
it { should == [
|
||||
%{screen -dmS "my-session"},
|
||||
%{screen -X -S "my-session" -p 0 stuff "test
|
||||
"},
|
||||
%{screen -x "my-session" -p 0}
|
||||
] }
|
||||
end
|
||||
|
||||
context 'two screens' do
|
||||
subject {
|
||||
Screenie::DSL::Session.new("my-session") { screen "test"; screen "test2" }.to_cmd
|
||||
}
|
||||
|
||||
it { should == [
|
||||
%{screen -dmS "my-session"},
|
||||
%{screen -X -S "my-session" -p 0 stuff "test
|
||||
"},
|
||||
%{screen -X -S "my-session" screen 1},
|
||||
%{screen -X -S "my-session" -p 1 stuff "test2
|
||||
"},
|
||||
%{screen -x "my-session" -p 0}
|
||||
] }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'from string' do
|
||||
subject {
|
||||
Screenie::DSL::Session.new("my-session", <<-EOR).to_cmd
|
||||
screen "test"
|
||||
EOR
|
||||
}
|
||||
|
||||
it { should == [
|
||||
%{screen -dmS "my-session"},
|
||||
%{screen -X -S "my-session" -p 0 stuff "test
|
||||
"},
|
||||
%{screen -x "my-session" -p 0}
|
||||
] }
|
||||
end
|
||||
|
||||
describe 'screen!' do
|
||||
subject {
|
||||
Screenie::DSL::Session.new("my-session") { screen "test"; screen! "test2" }.to_cmd
|
||||
}
|
||||
|
||||
it { should == [
|
||||
%{screen -dmS "my-session"},
|
||||
%{screen -X -S "my-session" -p 0 stuff "test
|
||||
"},
|
||||
%{screen -X -S "my-session" screen 1},
|
||||
%{screen -X -S "my-session" -p 1 stuff "test2
|
||||
"},
|
||||
%{screen -x "my-session" -p 1}
|
||||
] }
|
||||
end
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Screenie do
|
||||
|
||||
end
|
@ -0,0 +1,3 @@
|
||||
RSpec.configure do |config|
|
||||
config.mock_with :mocha
|
||||
end
|
7
test/screenie.config
Normal file
7
test/screenie.config
Normal file
@ -0,0 +1,7 @@
|
||||
session :testing do
|
||||
screen %{bundle exec autotest}, :name => 'autotest'
|
||||
screen %{rails s}, :name => 'rails'
|
||||
screen :name => 'command prompt'
|
||||
|
||||
select :first
|
||||
end
|
Loading…
Reference in New Issue
Block a user