teamocil 0.2 → 0.2.1

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
- teamocil (0.1.11)
4
+ teamocil (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -173,9 +173,7 @@ To get autocompletion when typing `teamocil <Tab>` in a zsh session, add this li
173
173
 
174
174
  ## Todo list
175
175
 
176
- * Support tmux options for windows and splits (eg. `synchronize-panes`)
177
- * Making sure the layout is valid before executing it
178
- * Refactor the `Layout` class to make it “test-friendly”
176
+ * Making sure the layout is valid before executing it (ie. throw exceptions).
179
177
 
180
178
  ## Contributors
181
179
 
@@ -184,6 +182,8 @@ Feel free to contribute and submit issues/pull requests [on GitHub](https://gith
184
182
  * Samuel Garneau ([garno](https://github.com/garno))
185
183
  * Jimmy Bourassa ([jbourassa](https://github.com/jbourassa))
186
184
 
185
+ Take a look at the `spec` folder before you do, and make sure `bundle exec rake spec` passes after your modifications :)
186
+
187
187
  ## License
188
188
 
189
189
  Teamocil is © 2011 [Rémi Prévost](http://exomel.com) and may be freely distributed under the [LITL license](http://litl.info/). See the `LICENSE` file.
data/lib/teamocil.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Teamocil
2
- VERSION = "0.2"
2
+ VERSION = "0.2.1"
3
3
  autoload :Layout, "teamocil/layout"
4
4
  autoload :CLI, "teamocil/cli"
5
5
  end
@@ -44,7 +44,8 @@ module Teamocil
44
44
  @root = attrs["root"]
45
45
  @options = attrs["options"]
46
46
  @filters = attrs["filters"]
47
- @splits = attrs["splits"].each_with_index.map { |split, index| Split.new(self, index, split) }
47
+ @splits = attrs["splits"] || []
48
+ @splits = @splits.each_with_index.map { |split, index| Split.new(self, index, split) }
48
49
  @index = index
49
50
  @session = session
50
51
 
@@ -104,15 +105,17 @@ module Teamocil
104
105
  commands = []
105
106
 
106
107
  # Is it a vertical or horizontal split?
108
+ init_command = ""
107
109
  unless @index == 0
108
110
  if !@width.nil?
109
- commands << "tmux split-window -h -p #{@width}"
111
+ init_command = "tmux split-window -h -p #{@width}"
110
112
  elsif !@height.nil?
111
- commands << "tmux split-window -p #{@height}"
113
+ init_command = "tmux split-window -p #{@height}"
112
114
  else
113
- commands << "tmux split-window"
115
+ init_command = "tmux split-window"
114
116
  end
115
- commands << " -t #{@target}" unless @target.nil?
117
+ init_command << " -t #{@target}" unless @target.nil?
118
+ commands << init_command
116
119
  end
117
120
 
118
121
  # Wrap all commands around filters
@@ -13,6 +13,7 @@ two-windows:
13
13
  - cmd:
14
14
  - "echo 'bar'"
15
15
  - "echo 'bar in an array'"
16
+ target: bottom-right
16
17
  - cmd: "echo 'bar again'"
17
18
  width: 50
18
19
 
@@ -32,3 +33,11 @@ two-windows-with-filters:
32
33
  - cmd: "echo 'foo'"
33
34
  - cmd: "echo 'foo again'"
34
35
  width: 50
36
+
37
+ three-windows-within-a-session:
38
+ session:
39
+ name: "my awesome session"
40
+ windows:
41
+ - name: "first window"
42
+ - name: "second window"
43
+ - name: "third window"
data/spec/layout_spec.rb CHANGED
@@ -2,15 +2,19 @@ require File.join(File.dirname(__FILE__), "spec_helper.rb")
2
2
 
3
3
  describe Teamocil::Layout do
4
4
 
5
- context "initializing" do
6
- end
7
-
8
5
  context "compiling" do
9
6
 
10
- before :each do # {{{
7
+ before do # {{{
11
8
  @layout = Teamocil::Layout.new(layouts["two-windows"], {})
12
9
  end # }}}
13
10
 
11
+ it "creates windows" do # {{{
12
+ session = @layout.compile!
13
+ session.windows.each do |window|
14
+ window.should be_an_instance_of Teamocil::Layout::Window
15
+ end
16
+ end # }}}
17
+
14
18
  it "creates windows with names" do # {{{
15
19
  session = @layout.compile!
16
20
  session.windows[0].name.should == "foo"
@@ -23,6 +27,13 @@ describe Teamocil::Layout do
23
27
  session.windows[1].root.should == "/bar"
24
28
  end # }}}
25
29
 
30
+ it "creates splits" do # {{{
31
+ session = @layout.compile!
32
+ session.windows.first.splits.each do |split|
33
+ split.should be_an_instance_of Teamocil::Layout::Split
34
+ end
35
+ end # }}}
36
+
26
37
  it "creates splits with dimensions" do # {{{
27
38
  session = @layout.compile!
28
39
  session.windows.first.splits[0].width.should == nil
@@ -57,5 +68,31 @@ describe Teamocil::Layout do
57
68
  session.windows.first.filters["after"].last.should == "echo second after filter"
58
69
  end # }}}
59
70
 
71
+ it "should handle blank filters" do # {{{
72
+ session = @layout.compile!
73
+ session.windows.first.filters.should have_key "after"
74
+ session.windows.first.filters.should have_key "before"
75
+ session.windows.first.filters["after"].should be_empty
76
+ session.windows.first.filters["before"].should be_empty
77
+ end # }}}
78
+
79
+ it "should handle splits without a target" do # {{{
80
+ session = @layout.compile!
81
+ session.windows.last.splits.last.target.should == nil
82
+ end # }}}
83
+
84
+ it "should handle splits with a target" do # {{{
85
+ session = @layout.compile!
86
+ session.windows.last.splits.first.target.should == "bottom-right"
87
+ end # }}}
88
+
89
+ it "should handle windows within a session" do # {{{
90
+ layout = Teamocil::Layout.new(layouts["three-windows-within-a-session"], {})
91
+ session = layout.compile!
92
+ session.windows.length.should == 3
93
+ session.name.should == "my awesome session"
94
+ end # }}}
95
+
60
96
  end
97
+
61
98
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teamocil
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- version: "0.2"
9
+ - 1
10
+ version: 0.2.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - "R\xC3\xA9mi Pr\xC3\xA9vost"
@@ -14,12 +15,12 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-10-23 00:00:00 Z
18
+ date: 2011-10-24 00:00:00 Z
18
19
  dependencies:
19
20
  - !ruby/object:Gem::Dependency
20
21
  name: rake
21
22
  prerelease: false
22
- requirement: &id001 !ruby/object:Gem::Requirement
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
24
  none: false
24
25
  requirements:
25
26
  - - ">="
@@ -29,11 +30,11 @@ dependencies:
29
30
  - 0
30
31
  version: "0"
31
32
  type: :development
32
- version_requirements: *id001
33
+ requirement: *id001
33
34
  - !ruby/object:Gem::Dependency
34
35
  name: rspec
35
36
  prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
37
38
  none: false
38
39
  requirements:
39
40
  - - ">="
@@ -43,11 +44,11 @@ dependencies:
43
44
  - 0
44
45
  version: "0"
45
46
  type: :development
46
- version_requirements: *id002
47
+ requirement: *id002
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: yard
49
50
  prerelease: false
50
- requirement: &id003 !ruby/object:Gem::Requirement
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
51
52
  none: false
52
53
  requirements:
53
54
  - - ">="
@@ -57,11 +58,11 @@ dependencies:
57
58
  - 0
58
59
  version: "0"
59
60
  type: :development
60
- version_requirements: *id003
61
+ requirement: *id003
61
62
  - !ruby/object:Gem::Dependency
62
63
  name: maruku
63
64
  prerelease: false
64
- requirement: &id004 !ruby/object:Gem::Requirement
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
65
66
  none: false
66
67
  requirements:
67
68
  - - ">="
@@ -71,7 +72,7 @@ dependencies:
71
72
  - 0
72
73
  version: "0"
73
74
  type: :development
74
- version_requirements: *id004
75
+ requirement: *id004
75
76
  description: Teamocil helps you set up window and splits layouts for tmux using YAML configuration files.
76
77
  email: remi@exomel.com
77
78
  executables: