ona 0.1.26 → 0.2.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.26
1
+ 0.2.0
data/bin/ona CHANGED
@@ -13,20 +13,10 @@ eval File.read 'Onafile'
13
13
  cli = Ona::Cli.new(stack)
14
14
 
15
15
  loop do
16
- line = Readline.readline('Ona> ', true)
16
+ line = Readline.readline("Ona> ", true)
17
17
  if (line == 'quit') || (line == 'exit')
18
18
  puts 'bye.'
19
19
  break
20
20
  end
21
- cli.ls if line == 'ls'
22
- cli.help if line == 'help'
23
- cli.show line if line =~ /show/
24
- cli.setup line if line =~ /setup/
25
- cli.deploy line if line =~ /deploy/
26
- cli.ssh_root line if line =~ /ssh#/
27
- cli.ssh_deploy line if line =~ /ssh /
28
- cli.http line if line =~ /http/
29
- cli.key line if line =~ /key /
30
- cli.keys if line =~ /keys/
31
- cli.rake line if line =~ /rake /
21
+ cli.parse(line)
32
22
  end
data/lib/ona.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'ona_cli'
1
2
  require 'ona_stack'
2
3
  require 'ona_server'
3
- require 'ona_cli'
4
+ require 'ona_instructions'
data/lib/ona_cli.rb CHANGED
@@ -2,12 +2,62 @@ module Ona
2
2
 
3
3
  class Cli
4
4
 
5
+ TRANSLATION = {
6
+ 'show' => { :method => :show, :id_required => true },
7
+ 'setup' => { :method => :setup, :id_required => true },
8
+ 'deploy' => { :method => :deploy, :id_required => true },
9
+ 'ssh#' => { :method => :ssh_root, :id_required => true },
10
+ 'ssh' => { :method => :ssh_deploy,:id_required => true },
11
+ 'http' => { :method => :http, :id_required => true },
12
+ 'key' => { :method => :key, :id_required => true },
13
+ 'keys' => { :method => :keys, :id_required => true },
14
+ 'rake' => { :method => :rake, :id_required => true },
15
+ 'ls' => { :method => :ls, :id_required => false },
16
+ 'help' => { :method => :help, :id_required => false },
17
+ }
18
+
5
19
  def initialize(stack)
6
- @stack = stack
20
+ @stack = stack
21
+ @instructions = Ona::Instructions.new(/[a-z]+[#]*/, /\d+/)
7
22
  end
8
23
 
9
- def selected_servers string
10
- @stack.find_all(*string.scan(/\d+/).map { |id| id.to_i })
24
+ def parse command_string
25
+ # Handle this separately for now.
26
+ return run_instruction('ls', 0) if command_string == 'ls'
27
+ return run_instruction('help', 0) if command_string == 'help'
28
+
29
+ @instructions.define_command_string(command_string)
30
+ group = @instructions.group_targets_by_instruction
31
+ copy = group.dup
32
+ copy.pop
33
+
34
+ # Only last group has ids?
35
+ if copy.all? { |x| x.values == [[]] }
36
+ @instructions.instructions.each do |instruction|
37
+ @instructions.targets.each do |target|
38
+ run_instruction instruction, target
39
+ end
40
+ end
41
+ return
42
+ end
43
+
44
+ # Run by group.
45
+ group.each do |hash|
46
+ instruction, targets = hash.to_a[0][0], hash.to_a[0][1]
47
+ targets.each do |target|
48
+ run_instruction instruction, target
49
+ end
50
+ end
51
+ end
52
+
53
+ def run_instruction instruction, target
54
+ return unless TRANSLATION.keys.include?(instruction)
55
+ hash = TRANSLATION[instruction]
56
+ cmd = "#{TRANSLATION[instruction][:method]}"
57
+ if (hash[:id_required])
58
+ cmd << "(#{target.to_i})"
59
+ end
60
+ eval cmd
11
61
  end
12
62
 
13
63
  def help
@@ -37,21 +87,21 @@ module Ona
37
87
  "
38
88
  end
39
89
 
40
- def http string
41
- selected_servers(string).each do |server|
90
+ def http server_id
91
+ @stack.find_all(server_id).each do |server|
42
92
  system server.to_http
43
93
  end
44
94
  end
45
95
 
46
- def key string
47
- selected_servers(string).each do |server|
96
+ def key server_id
97
+ @stack.find_all(server_id).each do |server|
48
98
  puts 'Setting up key for root'
49
99
  system server.setup_ssh
50
100
  end
51
101
  end
52
102
 
53
- def show string
54
- selected_servers(string).each do |server|
103
+ def show server_id
104
+ @stack.find_all(server_id).each do |server|
55
105
  puts server.to_s
56
106
  end
57
107
  end
@@ -62,20 +112,20 @@ module Ona
62
112
  end
63
113
  end
64
114
 
65
- def ssh_deploy string
66
- selected_servers(string).each do |server|
115
+ def ssh_deploy server_id
116
+ @stack.find_all(server_id).each do |server|
67
117
  system server.to_ssh 'deploy'
68
118
  end
69
119
  end
70
120
 
71
- def ssh_root string
72
- selected_servers(string).each do |server|
121
+ def ssh_root server_id
122
+ @stack.find_all(server_id).each do |server|
73
123
  system server.to_ssh 'root'
74
124
  end
75
125
  end
76
126
 
77
- def deploy string
78
- selected_servers(string).each do |server|
127
+ def deploy server_id
128
+ @stack.find_all(server_id).each do |server|
79
129
  prompt_for_continuation server
80
130
  system server.say_sure_to_deploy
81
131
  line = gets
@@ -85,9 +135,9 @@ module Ona
85
135
  end
86
136
  end
87
137
 
88
- def setup string
89
- key string
90
- selected_servers(string).each do |server|
138
+ def setup server_id
139
+ key server_id
140
+ @stack.find_all(server_id).each do |server|
91
141
  prompt_for_continuation server
92
142
  system server.say_sure_to_setup
93
143
  line = gets
@@ -97,8 +147,8 @@ module Ona
97
147
  end
98
148
  end
99
149
 
100
- def rake string
101
- selected_servers(string).each do |server|
150
+ def rake server_id
151
+ @stack.find_all(server_id).each do |server|
102
152
  server.to_s
103
153
  server.rake.each do |task|
104
154
  puts task
@@ -0,0 +1,43 @@
1
+ module Ona
2
+
3
+ class Instructions
4
+
5
+ def initialize instruction_matcher, target_matcher
6
+ define_instruction_matcher instruction_matcher
7
+ define_target_matcher target_matcher
8
+ end
9
+
10
+ def define_command_string command_string
11
+ @command_string = command_string
12
+ end
13
+
14
+ def define_instruction_matcher matcher_regex
15
+ @instruction_matcher = matcher_regex
16
+ end
17
+
18
+ def define_target_matcher matcher_regex
19
+ @target_matcher = matcher_regex
20
+ end
21
+
22
+ def targets
23
+ @command_string.scan(@target_matcher)
24
+ end
25
+
26
+ def instructions
27
+ @command_string.scan(@instruction_matcher)
28
+ end
29
+
30
+ def group_targets_by_instruction
31
+ group = []
32
+ chunks = (@command_string.split(@instruction_matcher) - [""])
33
+ return group if chunks.size != instructions.size
34
+ chunks.each_with_index do |instruction_targets, index|
35
+ instruction_targets = (instruction_targets.scan(@target_matcher) - [])
36
+ group << { instructions[index] => instruction_targets }
37
+ end
38
+ group
39
+ end
40
+
41
+ end
42
+
43
+ end
data/ona.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ona}
8
- s.version = "0.1.26"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["kazuyoshi tlacaelel"]
12
- s.date = %q{2010-09-01}
12
+ s.date = %q{2011-10-27}
13
13
  s.default_executable = %q{ona}
14
14
  s.description = %q{Simple shell for deployment.}
15
15
  s.email = %q{kazu.dev@gmail.com}
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "bin/ona",
30
30
  "lib/ona.rb",
31
31
  "lib/ona_cli.rb",
32
+ "lib/ona_instructions.rb",
32
33
  "lib/ona_server.rb",
33
34
  "lib/ona_stack.rb",
34
35
  "ona.gemspec",
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ona
3
3
  version: !ruby/object:Gem::Version
4
- hash: 47
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 26
10
- version: 0.1.26
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - kazuyoshi tlacaelel
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-01 00:00:00 -05:00
18
+ date: 2011-10-27 00:00:00 -05:00
19
19
  default_executable: ona
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -52,6 +52,7 @@ files:
52
52
  - bin/ona
53
53
  - lib/ona.rb
54
54
  - lib/ona_cli.rb
55
+ - lib/ona_instructions.rb
55
56
  - lib/ona_server.rb
56
57
  - lib/ona_stack.rb
57
58
  - ona.gemspec