carrasco 0.1.5 → 0.1.6
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.
- checksums.yaml +4 -4
- data/.carrasco.yml +18 -5
- data/.travis.yml +2 -0
- data/README.md +8 -3
- data/lib/carrasco/command.rb +10 -0
- data/lib/carrasco/command_builder.rb +17 -10
- data/lib/carrasco/group.rb +31 -0
- data/lib/carrasco/thor.rb +31 -0
- data/lib/carrasco/version.rb +1 -1
- data/lib/carrasco.rb +1 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e45dc01e5164f48798e8d8c62de5d1a6e78cda99
|
4
|
+
data.tar.gz: 6e793644e8aa7101f3a9de015a6db485b9c0f8ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac793a0777af3ee7acbf7e8b061dd124c460a977235ce3b9968adba6724932f96a70eed2081dc1555b601a3487819a1161929dcd4b68a969825c89ff793ff74b
|
7
|
+
data.tar.gz: 7c2c22877c0039e65de47adb9170dcdf26f31ee6f579951f82b512cd46f0bb60cf4e235dbfd14cffd13c7e3c5d3a0d8bd23ddbb40dca686979027062c66f4aa2
|
data/.carrasco.yml
CHANGED
@@ -12,14 +12,27 @@ commands:
|
|
12
12
|
|
13
13
|
ls:
|
14
14
|
description: List /tmp folder
|
15
|
-
command: ls /tmp
|
15
|
+
command: ls /tmp | head
|
16
|
+
|
17
|
+
ls_current:
|
18
|
+
description: List current dir
|
19
|
+
command: ls .
|
16
20
|
|
17
21
|
ls_with_error:
|
18
22
|
description: list folder that does not exist
|
19
23
|
command: ls /tmp/file_that_does_not_exist
|
20
24
|
|
21
|
-
# to be implemented
|
22
25
|
groups:
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
+
list_all:
|
27
|
+
description: list directories
|
28
|
+
break_on_failure: true
|
29
|
+
commands:
|
30
|
+
- ls
|
31
|
+
- ls_current
|
32
|
+
|
33
|
+
list_some:
|
34
|
+
description: list directories
|
35
|
+
break_on_failure: false
|
36
|
+
commands:
|
37
|
+
- ls
|
38
|
+
- ls_current
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
Heartless and easy script execution
|
4
4
|
|
5
5
|
[](https://travis-ci.org/mjacobus/carrasco)
|
6
|
-
[](https://coveralls.io/github/mjacobus/carrasco?branch=master)
|
7
7
|
[](https://codeclimate.com/github/mjacobus/carrasco)
|
8
8
|
[](https://scrutinizer-ci.com/g/mjacobus/carrasco/?branch=master)
|
9
9
|
[](https://gemnasium.com/mjacobus/carrasco)
|
@@ -49,8 +49,13 @@ commands:
|
|
49
49
|
# to be implemented
|
50
50
|
groups:
|
51
51
|
qa:
|
52
|
-
|
53
|
-
|
52
|
+
description: Runs qa tools
|
53
|
+
# if you want phpunit to run even if the test task fails
|
54
|
+
# defaults to true
|
55
|
+
break_on_failure: false
|
56
|
+
commands:
|
57
|
+
- test
|
58
|
+
- phpunit
|
54
59
|
```
|
55
60
|
|
56
61
|
You can execute:
|
data/lib/carrasco/command.rb
CHANGED
@@ -12,5 +12,15 @@ module Carrasco
|
|
12
12
|
@help = options[:help] || command_name
|
13
13
|
@description = options[:description] || "description not given"
|
14
14
|
end
|
15
|
+
|
16
|
+
def inject_into_class(klass)
|
17
|
+
command = self
|
18
|
+
klass.desc(help, description)
|
19
|
+
klass.class_eval do
|
20
|
+
define_method(command.command_name) do
|
21
|
+
execute_command(command)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
15
25
|
end
|
16
26
|
end
|
@@ -1,22 +1,29 @@
|
|
1
|
+
require "thor/core_ext/hash_with_indifferent_access"
|
2
|
+
|
1
3
|
module Carrasco
|
2
4
|
class CommandBuilder
|
3
5
|
def from_config(config)
|
6
|
+
config = Thor::CoreExt::HashWithIndifferentAccess.new(config)
|
4
7
|
klass = Class.new(Thor)
|
5
8
|
|
6
|
-
config[
|
7
|
-
|
8
|
-
inject_command_into_class(command, klass)
|
9
|
-
end
|
9
|
+
build_commands(config[:commands] || [], klass)
|
10
|
+
build_grups(config[:groups] || [], klass)
|
10
11
|
|
11
12
|
klass
|
12
13
|
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
private
|
16
|
+
|
17
|
+
def build_commands(commands, klass)
|
18
|
+
commands.each do |method, options|
|
19
|
+
command = Command.new(method, options)
|
20
|
+
command.inject_into_class(klass)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def build_grups(groups, klass)
|
25
|
+
groups.each do |group_name, options|
|
26
|
+
Group.new(group_name, options).inject_into_class(klass)
|
20
27
|
end
|
21
28
|
end
|
22
29
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "thor/core_ext/hash_with_indifferent_access"
|
2
|
+
|
3
|
+
module Carrasco
|
4
|
+
class Group
|
5
|
+
InvalidGroupError = Class.new(StandardError)
|
6
|
+
|
7
|
+
attr_reader :command_name, :commands, :description, :help, :break_on_failure
|
8
|
+
|
9
|
+
def initialize(group_name, options = {})
|
10
|
+
options = Thor::CoreExt::HashWithIndifferentAccess.new(options)
|
11
|
+
@command_name = group_name
|
12
|
+
@help = options[:help] || command_name
|
13
|
+
@description = options[:description] || "description not given"
|
14
|
+
@break_on_failure = options[:break_on_failure]
|
15
|
+
@break_on_failure = true if break_on_failure.nil?
|
16
|
+
@commands = options.fetch('commands') do
|
17
|
+
raise InvalidGroupError, "Commands not provided for group '#{group_name}'"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def inject_into_class(klass)
|
22
|
+
group = self
|
23
|
+
klass.desc(help, description)
|
24
|
+
klass.class_eval do
|
25
|
+
define_method(group.command_name) do
|
26
|
+
execute_commands(group.commands, group.break_on_failure)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/carrasco/thor.rb
CHANGED
@@ -2,6 +2,8 @@ require "thor"
|
|
2
2
|
|
3
3
|
module Carrasco
|
4
4
|
class Thor < ::Thor
|
5
|
+
CommandFailed = Class.new(StandardError)
|
6
|
+
|
5
7
|
no_commands do
|
6
8
|
def execute_command(command)
|
7
9
|
command_executer.execute!(command)
|
@@ -14,6 +16,35 @@ module Carrasco
|
|
14
16
|
def command_executer
|
15
17
|
@@command_executer ||= CommandExecuter.new
|
16
18
|
end
|
19
|
+
|
20
|
+
def execute_commands(commands, break_on_failure)
|
21
|
+
if break_on_failure
|
22
|
+
return execute_with_break_on_failure(commands)
|
23
|
+
end
|
24
|
+
|
25
|
+
errors = []
|
26
|
+
|
27
|
+
commands.each do |command|
|
28
|
+
begin
|
29
|
+
send(command)
|
30
|
+
rescue StandardError => e
|
31
|
+
errors << e.message
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
unless errors.empty?
|
36
|
+
messages = errors.map {|e| "'#{e}'"}
|
37
|
+
raise CommandFailed, "Failed with messages: #{messages.join(', ')}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def execute_with_break_on_failure(commands)
|
44
|
+
commands.each do |command|
|
45
|
+
send(command)
|
46
|
+
end
|
47
|
+
end
|
17
48
|
end
|
18
49
|
end
|
19
50
|
end
|
data/lib/carrasco/version.rb
CHANGED
data/lib/carrasco.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carrasco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Jacobus
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -161,6 +161,7 @@ files:
|
|
161
161
|
- lib/carrasco/command.rb
|
162
162
|
- lib/carrasco/command_builder.rb
|
163
163
|
- lib/carrasco/command_executer.rb
|
164
|
+
- lib/carrasco/group.rb
|
164
165
|
- lib/carrasco/thor.rb
|
165
166
|
- lib/carrasco/version.rb
|
166
167
|
homepage: https://github.com/mjacobus/carrasco
|
@@ -184,9 +185,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
185
|
version: '0'
|
185
186
|
requirements: []
|
186
187
|
rubyforge_project:
|
187
|
-
rubygems_version: 2.4.
|
188
|
+
rubygems_version: 2.4.8
|
188
189
|
signing_key:
|
189
190
|
specification_version: 4
|
190
191
|
summary: Command executor
|
191
192
|
test_files: []
|
192
|
-
has_rdoc:
|