taketo 0.0.8 → 0.0.9

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/README.md CHANGED
@@ -33,6 +33,7 @@ puts a config into ```~/.taketo.rc.rb```:
33
33
  port 10001
34
34
  user "app"
35
35
  localtion "/var/app"
36
+ default_command "tmux attach"
36
37
  env :TERM => "xterm-256color"
37
38
  command :console do
38
39
  execute "rails c"
@@ -44,7 +45,9 @@ puts a config into ```~/.taketo.rc.rb```:
44
45
  ```
45
46
 
46
47
  Then execute ```taketo my_project:staging:server -c console``` to execute the "rails c" with corresponding environment variables set on desired server
47
- or just ```taketo my_project:staging:server``` to open bash
48
+ or just ```taketo my_project:staging:server``` to attach to tmux on the server
49
+
50
+ ```default_command``` can be either name of defined server command, or explicit command string. Initially, default command is 'bash'.
48
51
 
49
52
  To have a brief overview of the config run ```taketo [destination] --view```
50
53
 
@@ -105,7 +108,7 @@ You can use shared server configs to reduce duplication:
105
108
 
106
109
  server :s2 do
107
110
  host :s2 do
108
- include_shared_server_config(:my_staging, :some_other_shared_config => "qux")
111
+ include_shared_server_configs(:my_staging, :some_other_shared_config => "qux")
109
112
  end
110
113
  end
111
114
  end
@@ -113,9 +116,34 @@ You can use shared server configs to reduce duplication:
113
116
 
114
117
  This will give you ```console``` commands available both on s1 and s2
115
118
 
119
+ Also it's possible to specify default server configuration for any scope (whole config, project or an environment):
120
+
121
+ ```ruby
122
+ default_server_config do
123
+ env :TERM => "xterm-256color"
124
+ end
125
+
126
+ project :my_project do
127
+ default_server_config do # will also include global default server config
128
+ location '/var/apps'
129
+ end
130
+
131
+ ...
132
+ end
133
+
134
+ project :my_project2 do
135
+ ...
136
+ end
137
+ ```
138
+
139
+ Default configs are merged appropriately.
140
+
116
141
  The Changelog:
117
142
  --------------
118
143
 
144
+ ### v0.0.9 (17.11.2012) ###
145
+ * Add default_command server config option
146
+
119
147
  ### v0.0.8 (17.11.2012) ###
120
148
  * Add per-config, per-project and per-environment default server config support, i.e.
121
149
  ```ruby
@@ -175,8 +203,6 @@ The Changelog:
175
203
  TO-DO:
176
204
  ------
177
205
 
178
- * Shared server configs without arguments
179
- * Global server defaults
180
206
  * Override default commands per server
181
207
  * Define servers outside projects and environments
182
208
  * Export SSH config (i.e. for scp)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.0.9
@@ -34,9 +34,3 @@ Feature:
34
34
  ssh -t 1.2.3.4 "cd /var/apps/slots; RAILS_ENV=staging rails c"
35
35
  """
36
36
 
37
- Scenario: Override default location specified for server
38
- When I run taketo --dry-run --directory /var/www slots:staging
39
- Then the output should contain
40
- """
41
- ssh -t 1.2.3.4 "cd /var/www; RAILS_ENV=staging bash"
42
- """
@@ -118,3 +118,60 @@ Feature: taketo config
118
118
  ssh -t 2.3.4.5 "RAILS_ENV=staging bash"
119
119
  """
120
120
 
121
+ Scenario: Override default location specified for server
122
+ When I have the following config
123
+ """
124
+ project :slots do
125
+ environment :staging do
126
+ server do
127
+ location '/var/foo'
128
+ host "1.2.3.4"
129
+ end
130
+ end
131
+ end
132
+ """
133
+ When I run taketo --dry-run --directory /var/www slots:staging
134
+ Then the output should contain
135
+ """
136
+ ssh -t 1.2.3.4 "cd /var/www; RAILS_ENV=staging bash"
137
+ """
138
+
139
+ Scenario: Default server command
140
+ When I have the following config
141
+ """
142
+ project :slots do
143
+ environment :staging do
144
+ server do
145
+ host "1.2.3.4"
146
+
147
+ default_command :tmux
148
+
149
+ command :tmux do
150
+ execute "tmux attach || tmux new-session"
151
+ end
152
+ end
153
+ end
154
+ end
155
+ """
156
+ When I run taketo --dry-run slots:staging
157
+ Then the output should contain
158
+ """
159
+ ssh -t 1.2.3.4 "RAILS_ENV=staging tmux attach || tmux new-session"
160
+ """
161
+ When I have the following config
162
+ """
163
+ project :slots do
164
+ environment :staging do
165
+ server do
166
+ host "1.2.3.4"
167
+ default_command "do_something"
168
+ end
169
+ end
170
+ end
171
+ """
172
+ When I run taketo --dry-run slots:staging
173
+ Then the output should contain
174
+ """
175
+ ssh -t 1.2.3.4 "RAILS_ENV=staging do_something"
176
+ """
177
+
@@ -21,8 +21,9 @@ Feature:
21
21
  environment :qux do
22
22
  server :bart do
23
23
  host "2.3.4.5"
24
+ default_command :console
24
25
  command :console do
25
- execute "something_to_execute"
26
+ execute "rails c"
26
27
  end
27
28
  command :killall do
28
29
  execute "killall humans"
@@ -45,14 +46,16 @@ Feature:
45
46
  Port: 5678
46
47
  User: pivo
47
48
  Default location: /var/apps/vodka
49
+ Default command: bash
48
50
  Environment: RAILS_ENV=bar
49
- (No commands)
50
51
 
51
52
  Project: baz
52
53
  Environment: qux
53
54
  Server: bart
54
55
  Host: 2.3.4.5
56
+ Default command: rails c
55
57
  Environment: RAILS_ENV=qux
58
+ Commands:
56
59
  console
57
60
  killall - Kill ALL humans
58
61
 
@@ -67,7 +70,7 @@ Feature:
67
70
  Port: 5678
68
71
  User: pivo
69
72
  Default location: /var/apps/vodka
73
+ Default command: bash
70
74
  Environment: RAILS_ENV=bar
71
- (No commands)
72
75
 
73
76
  """
@@ -40,8 +40,9 @@ module Taketo
40
40
  put "Port: #{server.port}" if server.port
41
41
  put "User: #{server.username}" if server.username
42
42
  put "Default location: #{server.default_location}" if server.default_location
43
+ put "Default command: #{server.default_command}"
43
44
  put "Environment: " + server.environment_variables.map { |n, v| "#{n}=#{v}" }.join(" ")
44
- indent { put "(No commands)" unless server.has_commands? }
45
+ put "Commands:" if server.has_commands?
45
46
  end
46
47
  end
47
48
  end
@@ -13,13 +13,17 @@ module Taketo
13
13
  end
14
14
 
15
15
  def self.explicit_command(command_string)
16
- new(:explicit_command).tap { |cmd| cmd.command = command_string }
16
+ new(:explicit_command).tap { |cmd| cmd.command = command_string.to_s }
17
17
  end
18
18
 
19
19
  def render(server, options = {})
20
20
  %Q[#{location(server, options)} #{environment_variables(server)} #{command}].strip.squeeze(" ")
21
21
  end
22
22
 
23
+ def to_s
24
+ command.to_s
25
+ end
26
+
23
27
  private
24
28
 
25
29
  def location(server, options = {})
@@ -26,7 +26,11 @@ module Taketo
26
26
  end
27
27
 
28
28
  def default_command
29
- defined?(@default_command) ? @default_command : Command.default
29
+ if defined? @default_command
30
+ find_command(@default_command) || Command.explicit_command(@default_command)
31
+ else
32
+ Command.default
33
+ end
30
34
  end
31
35
  end
32
36
  end
data/lib/taketo/dsl.rb CHANGED
@@ -68,6 +68,7 @@ module Taketo
68
68
  define_method_in_scope(:global_alias,:server) { |alias_name| current_scope_object.global_alias = alias_name }
69
69
  define_method_in_scope(:env, :server) { |env| current_scope_object.env(env) }
70
70
  define_method_in_scope(:identity_file, :server) { |identity_file| current_scope_object.identity_file = identity_file }
71
+ define_method_in_scope(:default_command, :server) { |command| current_scope_object.default_command = command }
71
72
  define_method_in_scope(:execute, :command) { |command| current_scope_object.command = command }
72
73
  define_method_in_scope(:desc, :command) { |description| current_scope_object.description = description }
73
74
 
@@ -29,6 +29,7 @@ describe "ConfigPrinterVisitor" do
29
29
  :port => 8000,
30
30
  :username => "bob",
31
31
  :default_location => "/var/app",
32
+ :default_command => "tmux",
32
33
  :environment_variables => { :FOO => "bar", :BOO => "baz" })
33
34
  end
34
35
 
@@ -41,13 +42,20 @@ describe "ConfigPrinterVisitor" do
41
42
  Port: 8000
42
43
  User: bob
43
44
  Default location: /var/app
45
+ Default command: tmux
44
46
  Environment: (FOO=bar BOO=baz|BOO=baz FOO=bar)])
45
47
  end
46
48
 
47
- it "renders appropriate message if there are no commands" do
49
+ it "does not renders commands section header if there are no commands defined" do
48
50
  server.stub(:has_commands? => false)
49
51
  printer.visit_server(server)
50
- expect(printer.result).to include("(No commands)")
52
+ expect(printer.result).not_to match(/commands/i)
53
+ end
54
+
55
+ it "renders commands if defined" do
56
+ server.stub(:has_commands? => true)
57
+ printer.visit_server(server)
58
+ expect(printer.result).to include("Commands:")
51
59
  end
52
60
  end
53
61
 
@@ -38,5 +38,10 @@ describe "Command" do
38
38
  expect(Taketo::Constructs::Command.explicit_command("qq").command).to eq("qq")
39
39
  end
40
40
  end
41
+
42
+ specify "#to_s returns just command" do
43
+ command.command = "hello_there"
44
+ expect(command.to_s).to eq("hello_there")
45
+ end
41
46
  end
42
47
 
@@ -15,7 +15,6 @@ describe "Server" do
15
15
  it { should have_accessor(:port) }
16
16
  it { should have_accessor(:username) }
17
17
  it { should have_accessor(:default_location) }
18
- it { should have_accessor(:default_command) }
19
18
  it { should have_accessor(:global_alias) }
20
19
  it { should have_accessor(:identity_file) }
21
20
 
@@ -25,9 +24,27 @@ describe "Server" do
25
24
  end
26
25
  end
27
26
 
28
- it "has default command" do
29
- Taketo::Constructs::Command.should_receive(:default).and_return(:qux)
30
- expect(server.default_command).to eq(:qux)
27
+ describe "#default_command" do
28
+ before(:each) { stub_const("Taketo::Constructs::Command", Class.new) }
29
+
30
+ it "returns Command.default if nothing defined" do
31
+ Taketo::Constructs::Command.should_receive(:default).and_return(:qux)
32
+ expect(server.default_command).to eq(:qux)
33
+ end
34
+
35
+ it "returns existing defined command if default command name is set" do
36
+ command = stub(:Command, :name => :foo)
37
+ server.commands << command
38
+ server.default_command = :foo
39
+ expect(server.default_command).to eq(command)
40
+ end
41
+
42
+ it "returns explicit command if default command not found by name" do
43
+ command = stub(:Command)
44
+ Taketo::Constructs::Command.should_receive(:explicit_command).with("tmux attach || tmux new-session").and_return(command)
45
+ server.default_command = "tmux attach || tmux new-session"
46
+ expect(server.default_command).to eq(command)
47
+ end
31
48
  end
32
49
 
33
50
  describe "#parent=" do
@@ -219,6 +219,10 @@ describe "DSL" do
219
219
  it_behaves_like "a scoped method", :identity_file, :server, :identity_file=, "/home/gor/.ssh/qqq"
220
220
  end
221
221
 
222
+ describe "#default_command" do
223
+ it_behaves_like "a scoped method", :default_command, :server, :default_command=, :tmux
224
+ end
225
+
222
226
  describe "#command" do
223
227
  it_behaves_like "a scope", :command, :server
224
228
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taketo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -75,14 +75,9 @@ dependencies:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0.6'
78
- description: ! " The aim of the project is to aid quick access to often used servers
79
- for web-developers\n\n With config similar to the following, one could make his
80
- life easier:\n\n project :my_project do\n environment :staging do\n server
81
- do\n host \"192.168.1.1\"\n location \"/var/www/prj1\"\n env
82
- :TERM => \"xterm-256color\"\n end\n end\n end\n\n put it in ~/.taketo.rc.rb
83
- (or wherever you want using --config)\n and `taketo my_project` effectively becomes:\n
84
- \ `ssh -t 192.168.1.1 \"cd /var/www/prj1; TERM=xterm-256color RAILS_ENV=staging
85
- bash\"`\n\n see http://github.com/v-yarotsky/taketo for additional instructions\n"
78
+ description: ! " Taketo is an utility to aid quick access to often used servers
79
+ for web-developers.\n Taketo uses a config written in ruby using light DSL.\n
80
+ \ See http://github.com/v-yarotsky/taketo for additional instructions\n"
86
81
  email: vladimir.yarotksy@gmail.com
87
82
  executables:
88
83
  - taketo