terminitor 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- terminitor (0.2.2)
4
+ terminitor (0.3.1)
5
5
  github (~> 0.4.5)
6
6
  rb-appscript
7
7
  thor (~> 0.14.0)
data/README.md CHANGED
@@ -9,6 +9,29 @@ Installation
9
9
  $ gem install terminitor
10
10
  $ terminitor init
11
11
 
12
+ Development Setup
13
+ ---------------------
14
+
15
+ To begin development on Terminitor, run bundler:
16
+
17
+ $ gem install bundler
18
+ $ bundle install
19
+
20
+ The test suite uses ([Riot](https://www.github.com/thumblemonks/riot/)).
21
+ to run the test run:
22
+
23
+ $ rake test
24
+
25
+ or use watchr:
26
+
27
+ $ watchr test.watchr
28
+
29
+ or if you have terminitor installed,
30
+
31
+ $ terminitor fetch achiu terminitor
32
+
33
+ this will git clone the repo and bundle install.
34
+
12
35
  Usage
13
36
  -------
14
37
 
@@ -30,7 +53,7 @@ This will open your default editor (set through the $TERM_EDITOR or $EDITOR vari
30
53
  - cd ~/foo/bar
31
54
  - gitx
32
55
  - tab2:
33
- - mysql -u root
56
+ - mysql -u root)
34
57
  - use test;
35
58
  - show tables;
36
59
  - tab3: echo "hello world"
@@ -306,10 +329,12 @@ Contributors
306
329
 
307
330
  Thanks to the following people for their contributions so far:
308
331
 
309
- * Pat George ([pcg79](http://github.com/pcg79)) for contributing a patch for when a project is not found.
310
- * Flavio Castelli ([flavio](http://github.com/flavio)) for contributing Konsole(KDE) core.
311
- * Alexey Kuleshov ([kulesa](http://github.com/kulesa)) for contributing the terminal settings and terminal settings capture functionality
312
-
332
+ * Pat George ([pcg79](https://github.com/pcg79)) for contributing a patch for when a project is not found.
333
+ * Flavio Castelli ([flavio](https://github.com/flavio)) for contributing Konsole(KDE) core.
334
+ * Alexey Kuleshov ([kulesa](https://github.com/kulesa)) for contributing the terminal settings and terminal settings capture functionality
335
+ * Arthur Gunn ([gunn](https://github.com/gunn)) for contributing a path to support tab syntax and load path.
336
+ * Elliot Winkler ([mcmire](https://github.com/mcmire)) for adding 1.8.6 compatiblity and ensuring tabs open in order.
337
+
313
338
  Acknowledgements
314
339
  -----------------
315
340
 
data/Termfile CHANGED
@@ -1,11 +1,7 @@
1
1
  # Terminitor Termfile
2
2
 
3
- setup do
4
- run 'bundle install'
5
- end
3
+ setup 'bundle install'
6
4
 
7
- window do
8
- tab 'watchr test.watchr'
9
- tab "gitx", "irb"
10
- tab "open 'http://www.github.com/achiu/terminitor/issues'"
11
- end
5
+ run 'watchr test.watchr'
6
+ tab "irb"
7
+ tab "open 'http://www.github.com/achiu/terminitor/issues'"
data/lib/terminitor.rb CHANGED
@@ -1,3 +1,6 @@
1
+ lib_dir = File.expand_path("..", __FILE__)
2
+ $:.unshift( lib_dir ) unless $:.include?( lib_dir )
3
+
1
4
  require 'terminitor/yaml'
2
5
  require 'terminitor/dsl'
3
6
  require 'terminitor/runner'
@@ -33,4 +33,4 @@ module Terminitor
33
33
  dsl << margin + "end\n\n"
34
34
  end
35
35
  end
36
- end
36
+ end
@@ -29,15 +29,17 @@ module Terminitor
29
29
  def run_in_window(window_name, window_content, options = {})
30
30
  window_options = window_content[:options]
31
31
  first_tab = true
32
- window_content[:tabs].each_pair do |tab_key, tab_content|
32
+ window_content[:tabs].keys.sort.each do |tab_key|
33
+ tab_content = window_content[:tabs][tab_key]
33
34
  # Open window on first 'tab' statement
34
35
  # first tab is already opened in the new window, so first tab should be
35
36
  # opened as a new tab in default window only
36
37
  tab_options = tab_content[:options]
37
38
  tab_name = tab_options[:name] if tab_options
38
39
  if first_tab && !options[:default]
39
- first_tab = false
40
- window_options = Hash[window_options.to_a + tab_options.to_a] # safe merge
40
+ first_tab = false
41
+ combined_options = (window_options.to_a + tab_options.to_a).inject([]) {|arr, pair| arr += pair }
42
+ window_options = Hash[*combined_options] # safe merge
41
43
  tab = window_options.empty? ? open_window(nil) : open_window(window_options)
42
44
  else
43
45
  tab = ( tab_key == 'default' ? active_window : open_tab(tab_options) ) # give us the current window if its default, else open a tab.
@@ -128,7 +128,8 @@ module Terminitor
128
128
 
129
129
  # selects options allowed for window or tab
130
130
  def allowed_options(object_type, options)
131
- Hash[ options.select {|option, value| ALLOWED_OPTIONS[object_type].include?(option) }]
131
+ pairs = options.select {|option, value| ALLOWED_OPTIONS[object_type].include?(option) }.inject([]) {|arr, pair| arr += pair }
132
+ Hash[*pairs]
132
133
  end
133
134
 
134
135
  # Add option to the list of delayed options
@@ -34,12 +34,13 @@ module Terminitor
34
34
 
35
35
  # stores command in context
36
36
  # run 'brew update'
37
- def run(command)
37
+ def run(*commands)
38
38
  if @_context.is_a?(Hash) && @_context[:tabs] # if we are in a window context, append commands to default tab.
39
- @_context[:tabs]['default'][:commands]<<(command)
39
+ current = @_context[:tabs]['default'][:commands]
40
40
  else
41
- @_context<<(command)
41
+ current = @_context
42
42
  end
43
+ current << commands.join(" && ")
43
44
  end
44
45
 
45
46
  # runs commands before each tab in window context
@@ -58,15 +59,21 @@ module Terminitor
58
59
  # sets command context to be run inside specific tab
59
60
  # tab(:name => 'new tab', :settings => 'Grass') { run 'mate .' }
60
61
  # tab 'ls', 'gitx'
61
- def tab(options = {}, *commands, &block)
62
+ def tab(*args, &block)
62
63
  tabs = @_context[:tabs]
63
64
  tab_name = "tab#{tabs.keys.size}"
64
65
  if block_given?
65
66
  tab_contents = tabs[tab_name] = {:commands => []}
67
+
68
+ options = {}
69
+ options = args.pop if args.last.is_a? Hash
70
+ options[:name] = args.first if args.first.is_a?(String) || args.first.is_a?(Symbol)
71
+
66
72
  tab_contents[:options] = options unless options.empty?
73
+
67
74
  in_context tab_contents[:commands], &block
68
75
  else
69
- tabs[tab_name] = { :commands => [options] + commands}
76
+ tabs[tab_name] = { :commands => args}
70
77
  end
71
78
  end
72
79
 
@@ -1,3 +1,3 @@
1
1
  module Terminitor
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -17,20 +17,13 @@ context "AbstractCapture" do
17
17
  end
18
18
 
19
19
  setup { @capture.capture_settings() }
20
- asserts_topic.equivalent_to <<-OUTPUT
21
- window :size => [10, 20], :name => "main window" do
22
- tab :settings => "Grass" do
23
- end
24
-
25
- end
26
-
27
- window :size => [14, 30], :name => "another window" do
28
- tab :settings => "Yello" do
29
- end
30
-
31
- end
32
-
33
- OUTPUT
34
-
20
+ asserts_topic.matches %r{window .* do}
21
+ asserts_topic.matches %r{tab .* do\s+end}
22
+ asserts_topic.matches %r{\:name \=\> "main window"}
23
+ asserts_topic.matches %r{\:size \=\> \[10\, 20\]}
24
+ asserts_topic.matches %r{\:settings \=\> "Grass"}
25
+ asserts_topic.matches %r{\:name \=\> "another window"}
26
+ asserts_topic.matches %r{\:size \=\> \[14, 30\]}
27
+ asserts_topic.matches %r{\:settings \=\> "Yello"}
35
28
  end
36
- end
29
+ end
@@ -164,6 +164,39 @@ context "AbstractCore" do
164
164
  core.process!
165
165
  end
166
166
  end
167
+
168
+ should "execute tabs in order" do
169
+ any_instance_of(Terminitor::AbstractCore) do |core|
170
+ stub(core).load_termfile('/path/to') {
171
+ {:windows => {'default' => {:tabs => {'tab1' => {:commands => ['ls']},
172
+ 'tab2' => {:commands => ['ps']},
173
+ 'tab3' => {:commands => ['whoami']},
174
+ 'tab4' => {:commands => ['cd']},
175
+ 'tab5' => {:commands => ['clear']},
176
+ 'tab6' => {:commands => ['nmap']}}
177
+ }
178
+ }
179
+ }
180
+ }
181
+ end
182
+ stub(Dir).pwd { nil }
183
+ core = Terminitor::AbstractCore.new('/path/to')
184
+
185
+ mock(core).
186
+ open_tab(nil) { "first" }.then.
187
+ execute_command('ls', :in => "first").then.
188
+ open_tab(nil) { "second" }.then.
189
+ execute_command('ps', :in => "second").then.
190
+ open_tab(nil) { "third" }.then.
191
+ execute_command('whoami', :in => "third").then.
192
+ open_tab(nil) { "fourth" }.then.
193
+ execute_command('cd', :in => "fourth").then.
194
+ open_tab(nil) { "fifth" }.then.
195
+ execute_command('clear', :in => "fifth").then.
196
+ open_tab(nil) { "sixth" }.then.
197
+ execute_command('nmap', :in => "sixth")
198
+ core.process!
199
+ end
167
200
  end
168
201
 
169
202
 
@@ -81,7 +81,7 @@ if platform?("darwin") # Only run test if it's darwin
81
81
 
82
82
  context "set_options" do
83
83
  setup do
84
- @object, @terminal, @windows= 3.times.collect { Object.new }
84
+ @object, @terminal, @windows = Array.new(3) { Object.new }
85
85
  stub(@terminal).windows { @windows }
86
86
  any_instance_of(Terminitor::MacCore) do |core|
87
87
  stub(core).app('Terminal') { @terminal }
data/test/dsl_test.rb CHANGED
@@ -16,7 +16,9 @@ context "Dsl" do
16
16
  "tab1"=>{:commands=>["echo 'first tab'", "echo 'of window'", "echo 'than now'"]},
17
17
  "tab3"=>{:commands=>["top"],
18
18
  :options =>{:name => "a tab", :settings => "Pro"}},
19
- "default"=>{:commands=>['whoami']}
19
+ "tab4"=>{:commands=>["ls"],
20
+ :options =>{:name => "another named tab", :settings => "Grass"}},
21
+ "default"=>{:commands=>['whoami && who && ls']}
20
22
  },
21
23
  :before => ['cd /path'],
22
24
  :options => {:size=>[70,30]}},
@@ -9,7 +9,7 @@ window :size => [70,30] do
9
9
 
10
10
  before 'cd /path'
11
11
 
12
- run "whoami"
12
+ run "whoami","who", "ls"
13
13
  tab "echo 'first tab'", "echo 'of window'", "echo 'than now'"
14
14
 
15
15
  tab :name => "named tab", :settings => "Grass" do
@@ -17,9 +17,11 @@ window :size => [70,30] do
17
17
  run "ls"
18
18
  end
19
19
 
20
- tab :name => "a tab", :settings => "Pro" do
20
+ tab "a tab", :settings => "Pro" do
21
21
  run "top"
22
22
  end
23
+
24
+ tab("another named tab", :settings => 'Grass') { run "ls" }
23
25
  end
24
26
 
25
27
  window :name => 'server' do
data/test/teststrap.rb CHANGED
@@ -18,32 +18,28 @@ end
18
18
 
19
19
  module Kernel
20
20
  def capture(stream)
21
- begin
22
- stream = stream.to_s
23
- eval "$#{stream} = StringIO.new"
24
- yield
25
- result = eval("$#{stream}").string
26
- ensure
27
- eval("$#{stream} = #{stream.upcase}")
28
- end
29
- result
21
+ eval "$#{stream} = StringIO.new"
22
+ yield
23
+ eval("$#{stream}").string
24
+ ensure
25
+ eval("$#{stream} = #{stream.to_s.upcase}")
30
26
  end
31
27
  end
32
28
 
33
29
  # This is to silence the 'task' warning for the mocks.
34
30
  class Thor
35
31
  class << self
36
- def create_task(meth) #:nodoc:
37
- if @usage && @desc
38
- base_class = @hide ? Thor::HiddenTask : Thor::Task
39
- tasks[meth] = base_class.new(meth, @desc, @long_desc, @usage, method_options)
40
- @usage, @desc, @long_desc, @method_options, @hide = nil
41
- true
42
- elsif self.all_tasks[meth] || meth == "method_missing"
43
- true
44
- else
45
- false
46
- end
32
+ def create_task(meth) #:nodoc:
33
+ if @usage && @desc
34
+ base_class = @hide ? Thor::HiddenTask : Thor::Task
35
+ tasks[meth] = base_class.new(meth, @desc, @long_desc, @usage, method_options)
36
+ @usage, @desc, @long_desc, @method_options, @hide = nil
37
+ true
38
+ elsif self.all_tasks[meth] || meth == "method_missing"
39
+ true
40
+ else
41
+ false
47
42
  end
43
+ end
48
44
  end
49
45
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 1
9
- version: 0.3.1
8
+ - 2
9
+ version: 0.3.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Arthur Chiu
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-01 00:00:00 -08:00
18
+ date: 2011-01-11 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency