cog-rb 0.3.7 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5dddbe2bed2066466215effb2940091a6d55692
4
- data.tar.gz: 9f2d2c85e2d06f54499bc5084359c46ee2c3f5a5
3
+ metadata.gz: 5744ebdbff62117795615423fdf91979144923e0
4
+ data.tar.gz: 08b1acf07b9b2ac2c11caf3058564f0958a28366
5
5
  SHA512:
6
- metadata.gz: dd8e55bd8f0b1c8f88ba9ab7e0aba8a92365a7f744c4a23c0879f151c2f24dbd668ccc63247f4d558e55ca37fce5f56a586314c4fed844b171ce7628364abe93
7
- data.tar.gz: cd31b8d6cadd2424e60fca4c66b04bd9f5172a2e41b64c781fc12ae0d4cce42afaf58c708683773b876431e3cb448a383012d3c4b9ceb3cfa75b4318171ae102
6
+ metadata.gz: ee86e1b20780e65b553bdd6c5d4dd5169253778ab43895936ab18eca19f6b1a3cf6852cc6d451d91b62b1fb2a4018166a51e6d0c96c447ccf804eb6630628391
7
+ data.tar.gz: 1bed07fff46d61ba59291ec66f03626c7a3d496c8d6a144d4da2bab23e8c41b313fc9e1dbd9fdc85c136b035588cbd5212979225f435895f84e1a54593dd1a27
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+
2
+ ## 0.4.1
3
+
4
+ * Add exception handling support. You can now define a regular expression and a
5
+ block to be called when an exception whose class matches the pattern is
6
+ received. This should generally be defined in your `cog-command`. The block
7
+ will be called with the exception and `Cog::Command` instance that was
8
+ executing. Exceptions that are not matched by a pattern will be handled
9
+ normally. Here's an example:
10
+
11
+ ```
12
+ Cog.error_handler.add(/Aws::.*/) do |exception, command|
13
+ Cog.return_error("#{command.name} error: #{exception.message}")
14
+ end
15
+ ```
16
+
1
17
  ## 0.3.5
2
18
 
3
19
  * Bugfix for "warning: toplevel constant RSpec referenced by Cog::RSpec"
data/lib/cog.rb CHANGED
@@ -2,6 +2,7 @@
2
2
  require_relative 'cog/bundle'
3
3
  require_relative 'cog/config'
4
4
  require_relative 'cog/command'
5
+ require_relative 'cog/exception_handler'
5
6
  require_relative 'cog/request'
6
7
  require_relative 'cog/response'
7
8
  require_relative 'cog/version'
@@ -14,6 +15,24 @@ class Cog
14
15
  def self.bundle(name)
15
16
  bundle = Cog::Bundle.new(name)
16
17
  yield bundle if block_given?
17
- bundle.run_command
18
+
19
+ begin
20
+ bundle.run_command
21
+ rescue Exception => ex
22
+ error_handler.handle_exception(
23
+ exception: ex,
24
+ command: bundle.command
25
+ )
26
+ end
27
+ end
28
+
29
+ def self.error_handler
30
+ @@handler ||= Cog::ExceptionHandler.new
31
+ end
32
+
33
+ def self.return_error(message)
34
+ puts "COGCMD_ACTION: abort"
35
+ puts message
36
+ exit(0)
18
37
  end
19
38
  end
data/lib/cog/bundle.rb CHANGED
@@ -20,6 +20,10 @@ class Cog
20
20
  end
21
21
  end
22
22
 
23
+ def command
24
+ @command ||= command_instance(ENV['COG_COMMAND'])
25
+ end
26
+
23
27
  def command_instance(command_name)
24
28
  command_path = command_name.split('-')
25
29
  require File.join(@base_dir, 'lib', 'cog_cmd', @name, *command_path)
@@ -35,9 +39,7 @@ class Cog
35
39
  end
36
40
 
37
41
  def run_command
38
- command = ENV['COG_COMMAND']
39
- target = command_instance(command)
40
- target.execute
42
+ command.execute
41
43
  rescue Cog::Abort => exception
42
44
  # Abort will end command execution and abort the pipeline
43
45
  response = Cog::Response.new
data/lib/cog/command.rb CHANGED
@@ -5,6 +5,10 @@ class Cog
5
5
  class Command
6
6
  attr_writer :memory_key, :config
7
7
 
8
+ def name
9
+ ENV['COG_COMMAND']
10
+ end
11
+
8
12
  def request
9
13
  @request ||= Cog::Request.new
10
14
  end
@@ -0,0 +1,34 @@
1
+ class Cog::ExceptionHandler
2
+ attr_accessor :handlers
3
+
4
+ def initialize
5
+ @handlers = {}
6
+ end
7
+
8
+ def add(pattern, &block)
9
+ @handlers[pattern] = block
10
+ end
11
+
12
+ def handle_exception(exception:, command:)
13
+ handlers.keys.each do |pattern|
14
+ if pattern.match(exception.class.to_s)
15
+ log_exception(exception, command)
16
+ handlers[pattern].call(exception, command)
17
+ return
18
+ end
19
+ end
20
+
21
+ raise exception
22
+ end
23
+
24
+ private
25
+
26
+ def log_exception(exception, command)
27
+ log_message = {
28
+ command_name: command.name,
29
+ message: exception.message,
30
+ stack_trace: exception.backtrace
31
+ }
32
+ puts "COGCMD_ERROR: #{log_message.to_json}"
33
+ end
34
+ end
data/lib/cog/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Cog
2
- VERSION = "0.3.7"
2
+ VERSION = "0.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cog-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Imbriaco
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-10 00:00:00.000000000 Z
11
+ date: 2016-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -62,6 +62,7 @@ files:
62
62
  - lib/cog/bundle.rb
63
63
  - lib/cog/command.rb
64
64
  - lib/cog/config.rb
65
+ - lib/cog/exception_handler.rb
65
66
  - lib/cog/exceptions.rb
66
67
  - lib/cog/request.rb
67
68
  - lib/cog/response.rb