asana_exception_notifier 0.0.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.
- checksums.yaml +7 -0
- data/.codeclimate.yml +26 -0
- data/.reek +11 -0
- data/.rubocop.yml +76 -0
- data/.travis.yml +16 -0
- data/CONTRIBUTING.md +46 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +180 -0
- data/LICENSE +20 -0
- data/README.md +225 -0
- data/Rakefile +37 -0
- data/asana_exception_notifier.gemspec +48 -0
- data/examples/sinatra/Gemfile +7 -0
- data/examples/sinatra/Gemfile.lock +124 -0
- data/examples/sinatra/Procfile +1 -0
- data/examples/sinatra/README.md +14 -0
- data/examples/sinatra/config.ru +3 -0
- data/examples/sinatra/sinatra_app.rb +46 -0
- data/init.rb +1 -0
- data/lib/asana_exception_notifier/classes/asana.rb +95 -0
- data/lib/asana_exception_notifier/classes/error_page.rb +134 -0
- data/lib/asana_exception_notifier/helpers/application_helper.rb +286 -0
- data/lib/asana_exception_notifier/initializers/zip.rb +14 -0
- data/lib/asana_exception_notifier/note_templates/asana_exception_notifier.html.erb +82 -0
- data/lib/asana_exception_notifier/note_templates/asana_exception_notifier.text.erb +24 -0
- data/lib/asana_exception_notifier/request/client.rb +85 -0
- data/lib/asana_exception_notifier/request/core.rb +132 -0
- data/lib/asana_exception_notifier/request/middleware.rb +41 -0
- data/lib/asana_exception_notifier/version.rb +27 -0
- data/lib/asana_exception_notifier.rb +45 -0
- data/lib/generators/asana_exception_notifier/install_generator.rb +14 -0
- data/lib/generators/asana_exception_notifier/templates/asana_exception_notifier.rb +20 -0
- data/spec/lib/asana_exception_notifier/classes/asana_spec.rb +23 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/test_notification.rb +20 -0
- metadata +467 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
require_relative '../helpers/application_helper'
|
2
|
+
module AsanaExceptionNotifier
|
3
|
+
module Request
|
4
|
+
# module that is used for formatting numbers using metrics
|
5
|
+
#
|
6
|
+
# @!attribute params
|
7
|
+
# @return [Hash] THe params received from URL
|
8
|
+
# @!attribute hostname
|
9
|
+
# @return [String] THe hostname from where the badges are fetched from
|
10
|
+
# @!attribute base_url
|
11
|
+
# @return [String] THe base_url of the API
|
12
|
+
module Core
|
13
|
+
include AsanaExceptionNotifier::ApplicationHelper
|
14
|
+
|
15
|
+
# Returns the connection options used for connecting to API's
|
16
|
+
#
|
17
|
+
# @return [Hash] Returns the connection options used for connecting to API's
|
18
|
+
def em_connection_options
|
19
|
+
{
|
20
|
+
connect_timeout: 1200, # default connection setup timeout
|
21
|
+
inactivity_timeout: 120, # default connection inactivity (post-setup) timeout
|
22
|
+
ssl: {
|
23
|
+
verify_peer: false
|
24
|
+
},
|
25
|
+
head: {
|
26
|
+
'ACCEPT' => '*/*',
|
27
|
+
'Connection' => 'keep-alive'
|
28
|
+
}
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns the request options used for connecting to API's
|
33
|
+
#
|
34
|
+
# @return [Hash] Returns the request options used for connecting to API's
|
35
|
+
def em_request_options(params = {})
|
36
|
+
{
|
37
|
+
redirects: 5, # follow 3XX redirects up to depth 5
|
38
|
+
keepalive: true, # enable keep-alive (don't send Connection:close header)
|
39
|
+
head: (params[:head] || {}).merge(
|
40
|
+
'ACCEPT' => '*/*',
|
41
|
+
'Connection' => 'keep-alive'
|
42
|
+
),
|
43
|
+
body: (params[:body] || {})
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
# instantiates an eventmachine http request object that will be used to make the htpp request
|
48
|
+
# @see EventMachine::HttpRequest#initialize
|
49
|
+
#
|
50
|
+
# @param [String] url The URL that will be used in the HTTP request
|
51
|
+
# @return [EventMachine::HttpRequest] Returns an http request object
|
52
|
+
def em_request(url, options)
|
53
|
+
uri = Addressable::URI.parse(url)
|
54
|
+
conn_options = em_connection_options.merge(ssl: { sni_hostname: uri.host })
|
55
|
+
em_request = EventMachine::HttpRequest.new(url, conn_options)
|
56
|
+
em_request.send(options.fetch(:http_method, 'get'), em_request_options)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Method that fetch the data from a URL and registers the error and success callback to the HTTP object
|
60
|
+
# @see #em_request
|
61
|
+
# @see #register_error_callback
|
62
|
+
# @see #register_success_callback
|
63
|
+
#
|
64
|
+
# @param [url] url The URL that is used to fetch data from
|
65
|
+
# @param [Lambda] callback The callback that will be called if the response is blank
|
66
|
+
# @param [Proc] block If the response is not blank, the block will receive the response
|
67
|
+
# @return [void]
|
68
|
+
def fetch_data(options = {}, &block)
|
69
|
+
options = options.symbolize_keys
|
70
|
+
if options[:multi_request] && multi_manager.present?
|
71
|
+
multi_fetch_data(options, &block)
|
72
|
+
else
|
73
|
+
register_error_callback(@http)
|
74
|
+
register_success_callback(@http, options, &block)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def multi_fetch_data(options = {}, &block)
|
79
|
+
multi_manager.add options[:request_name], @http
|
80
|
+
return unless options[:request_final]
|
81
|
+
register_error_callback(multi_manager)
|
82
|
+
register_success_callback(multi_manager, options, &block)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Method that is used to register a success callback to a http object
|
86
|
+
# @see #callback_before_success
|
87
|
+
# @see #dispatch_http_response
|
88
|
+
#
|
89
|
+
# @param [EventMachine::HttpRequest] http The HTTP object that will be used for registering the success callback
|
90
|
+
# @param [Lambda] callback The callback that will be called if the response is blank
|
91
|
+
# @param [Proc] block If the response is not blank, the block will receive the response
|
92
|
+
# @return [void]
|
93
|
+
def register_success_callback(http, options)
|
94
|
+
http.callback do
|
95
|
+
res = callback_before_success(get_response_from_request(http, options))
|
96
|
+
callback = options.fetch('callback', nil)
|
97
|
+
block_given? ? yield(res) : callback.call(res)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Callback that is used before returning the response the the instance
|
102
|
+
#
|
103
|
+
# @param [String] response The response that will be dispatched to the instance class that made the request
|
104
|
+
# @return [String] Returns the response
|
105
|
+
def callback_before_success(response)
|
106
|
+
response
|
107
|
+
end
|
108
|
+
|
109
|
+
# This method is used to reqister a error callback to a HTTP request object
|
110
|
+
# @see #callback_error
|
111
|
+
# @param [EventMachine::HttpRequest] http The HTTP object that will be used for reqisteringt the error callback
|
112
|
+
# @return [void]
|
113
|
+
def register_error_callback(http)
|
114
|
+
http.errback { |error| callback_error(error) }
|
115
|
+
end
|
116
|
+
|
117
|
+
def get_error_from_request(http, options)
|
118
|
+
http_response = http.respond_to?(:response) ? http.response : http.responses[:errback]
|
119
|
+
options[:multi_request].present? && http_response.is_a?(Hash) ? http_response.values.map(&:response) : http_response
|
120
|
+
end
|
121
|
+
|
122
|
+
# Method that is used to react when an error happens in a HTTP request
|
123
|
+
# and prints out an error message
|
124
|
+
#
|
125
|
+
# @param [Object] error The error that was raised by the HTTP request
|
126
|
+
# @return [void]
|
127
|
+
def callback_error(error)
|
128
|
+
log_exception(error)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative '../helpers/application_helper'
|
2
|
+
module AsanaExceptionNotifier
|
3
|
+
module Request
|
4
|
+
# middleware used only in development for testing purpose
|
5
|
+
class Middleware
|
6
|
+
include AsanaExceptionNotifier::ApplicationHelper
|
7
|
+
# Method that is used to debug requests to API's
|
8
|
+
# The method receives the request object and prints it content to console
|
9
|
+
#
|
10
|
+
# @param [EventMachine::HttpRequest] client The Http request made to an API
|
11
|
+
# @param [Hash] head The http headers sent to API
|
12
|
+
# @param [String, nil] body The body sent to API
|
13
|
+
# @return [Array<Hash,String>] Returns the http headers and the body
|
14
|
+
def request(client, head, body)
|
15
|
+
puts "############## HTTP REQUEST #####################\n"
|
16
|
+
puts JSON.pretty_generate(
|
17
|
+
headers: head,
|
18
|
+
url: client.req.uri,
|
19
|
+
body: force_utf8_encoding(body.to_s.inspect)
|
20
|
+
)
|
21
|
+
[head, body]
|
22
|
+
end
|
23
|
+
|
24
|
+
# Method that is used to debug responses from API's
|
25
|
+
# The method receives the response object and prints it content to console
|
26
|
+
#
|
27
|
+
# @param [EventMachine::HttpResponse] resp The Http response received from API
|
28
|
+
# @return [EventMachine::HttpResponse]
|
29
|
+
def response(resp)
|
30
|
+
puts "############## HTTP RESPONSE #####################\n"
|
31
|
+
headers = resp.response_header
|
32
|
+
puts JSON.pretty_generate(
|
33
|
+
headers: headers,
|
34
|
+
status: headers.status,
|
35
|
+
body: force_utf8_encoding(resp.response.to_s.inspect)
|
36
|
+
)
|
37
|
+
resp
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Returns the version of the gem as a <tt>Gem::Version</tt>
|
2
|
+
module AsanaExceptionNotifier
|
3
|
+
# it prints the gem version as a string
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
#
|
7
|
+
# @api public
|
8
|
+
def self.gem_version
|
9
|
+
Gem::Version.new VERSION::STRING
|
10
|
+
end
|
11
|
+
|
12
|
+
# module used to generate the version string
|
13
|
+
# provides a easy way of getting the major, minor and tiny
|
14
|
+
module VERSION
|
15
|
+
# major release version
|
16
|
+
MAJOR = 0
|
17
|
+
# minor release version
|
18
|
+
MINOR = 0
|
19
|
+
# tiny release version
|
20
|
+
TINY = 1
|
21
|
+
# prelease version ( set this only if it is a prelease)
|
22
|
+
PRE = nil
|
23
|
+
|
24
|
+
# generates the version string
|
25
|
+
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'active_support/core_ext/object/blank'
|
5
|
+
require 'active_support/core_ext/hash/keys'
|
6
|
+
|
7
|
+
require 'exception_notifier'
|
8
|
+
require 'exception_notification/rack'
|
9
|
+
if defined?(Rails)
|
10
|
+
require 'exception_notification/rails'
|
11
|
+
end
|
12
|
+
if defined?(Resque)
|
13
|
+
require 'exception_notification/resque'
|
14
|
+
end
|
15
|
+
if defined?(Sidekiq)
|
16
|
+
require 'exception_notification/sidekiq'
|
17
|
+
end
|
18
|
+
require 'exception_notification'
|
19
|
+
|
20
|
+
require 'em-http-request'
|
21
|
+
require 'eventmachine'
|
22
|
+
|
23
|
+
require 'multipart_body'
|
24
|
+
require 'rack'
|
25
|
+
require 'zip'
|
26
|
+
require 'rack/mime'
|
27
|
+
require 'sys-uname'
|
28
|
+
|
29
|
+
require 'tilt'
|
30
|
+
require 'erb'
|
31
|
+
require 'tilt/erb'
|
32
|
+
|
33
|
+
require 'logger'
|
34
|
+
require 'fileutils'
|
35
|
+
require 'ostruct'
|
36
|
+
require 'thread'
|
37
|
+
require 'json'
|
38
|
+
require 'tempfile'
|
39
|
+
require 'English'
|
40
|
+
require 'pathname'
|
41
|
+
|
42
|
+
%w(initializers helpers request classes).each do |folder_name|
|
43
|
+
Gem.find_files("asana_exception_notifier/#{folder_name}/**/*.rb").each { |path| require path }
|
44
|
+
end
|
45
|
+
require_relative './asana_exception_notifier/version'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module AsanaExceptionNotifier
|
2
|
+
module Generators
|
3
|
+
# module that is used for formatting numbers using metrics
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
5
|
+
desc 'Creates a AsanaExceptionNotifier initializer.'
|
6
|
+
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
def copy_initializer
|
10
|
+
template 'asana_exception_notifier.rb', 'config/initializers/asana_exception_notifier.rb'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'asana_exception_notifier'
|
2
|
+
|
3
|
+
ExceptionNotification.configure do |config|
|
4
|
+
# Email notifier sends notifications to Asana by creating tasks .
|
5
|
+
config.add_notifier :asana, asana_api_key: ENV['ASANA_API_KEY'],
|
6
|
+
workspace: ENV['ASANA_WORKSPACE_ID'],
|
7
|
+
assignee: 'me',
|
8
|
+
assignee_status: 'today', # 'today'
|
9
|
+
due_at: Time.now.iso8601,
|
10
|
+
due_on: nil,
|
11
|
+
hearted: false,
|
12
|
+
hearts: [],
|
13
|
+
projects: [],
|
14
|
+
followers: [],
|
15
|
+
memberships: [],
|
16
|
+
tags: [],
|
17
|
+
name: nil,
|
18
|
+
notes: '',
|
19
|
+
template_path: nil
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding:utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ExceptionNotifier::AsanaNotifier do
|
6
|
+
|
7
|
+
let(:options) { double('options') }
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
allow(options).to receive(:symbolize_keys) { options }
|
11
|
+
allow(options).to receive(:reject) { options }
|
12
|
+
allow_any_instance_of(ExceptionNotifier::AsanaNotifier).to receive(:parse_options).and_return(true)
|
13
|
+
@subject = ExceptionNotifier::AsanaNotifier.new(options)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#initialize' do
|
17
|
+
it 'creates a object' do
|
18
|
+
expect(@subject.initial_options).to eq options
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Configure Rails Envinronment
|
2
|
+
ENV['RAILS_ENV'] = 'test'
|
3
|
+
|
4
|
+
require 'simplecov'
|
5
|
+
require 'simplecov-summary'
|
6
|
+
require 'coveralls'
|
7
|
+
|
8
|
+
# require "codeclimate-test-reporter"
|
9
|
+
formatters = [SimpleCov::Formatter::HTMLFormatter]
|
10
|
+
|
11
|
+
formatters << Coveralls::SimpleCov::Formatter # if ENV['TRAVIS']
|
12
|
+
# formatters << CodeClimate::TestReporter::Formatter # if ENV['CODECLIMATE_REPO_TOKEN'] && ENV['TRAVIS']
|
13
|
+
|
14
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(formatters)
|
15
|
+
|
16
|
+
Coveralls.wear!
|
17
|
+
SimpleCov.start 'rails' do
|
18
|
+
add_filter 'spec'
|
19
|
+
|
20
|
+
at_exit {}
|
21
|
+
end
|
22
|
+
|
23
|
+
# CodeClimate::TestReporter.configure do |config|
|
24
|
+
# config.logger.level = Logger::WARN
|
25
|
+
# end
|
26
|
+
# CodeClimate::TestReporter.start
|
27
|
+
|
28
|
+
require 'bundler/setup'
|
29
|
+
require 'asana_exception_notifier'
|
30
|
+
|
31
|
+
RSpec.configure do |config|
|
32
|
+
require 'rspec/expectations'
|
33
|
+
require 'rspec/mocks'
|
34
|
+
config.include RSpec::Matchers
|
35
|
+
|
36
|
+
config.mock_with :rspec
|
37
|
+
|
38
|
+
config.after(:suite) do
|
39
|
+
if SimpleCov.running
|
40
|
+
SimpleCov::Formatter::HTMLFormatter.new.format(SimpleCov.result)
|
41
|
+
|
42
|
+
SimpleCov::Formatter::SummaryFormatter.new.format(SimpleCov.result)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../lib/asana_exception_notifier'
|
2
|
+
|
3
|
+
AsanaExceptionNotifier::ErrorPage.class_eval do
|
4
|
+
alias_method :original_initialize, :initialize
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
original_initialize(*args)
|
8
|
+
debug_html_template if ENV['DEBUG_ASANA_TEMPLATE']
|
9
|
+
end
|
10
|
+
|
11
|
+
def debug_html_template
|
12
|
+
_filename, path = create_tempfile
|
13
|
+
system("google-chrome #{path}")
|
14
|
+
sleep until 0 == 1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
require_relative '../lib/generators/asana_exception_notifier/templates/asana_exception_notifier'
|
19
|
+
exception = StandardError.new
|
20
|
+
ExceptionNotifier.notify_exception(exception, notifiers: :asana)
|
metadata
ADDED
@@ -0,0 +1,467 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: asana_exception_notifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- bogdanRada
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: em-http-request
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.1'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.1.2
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.1'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.1.2
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: eventmachine
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.0'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.0.7
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.0'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.0.7
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: exception_notification
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '4.1'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.1.4
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.1'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 4.1.4
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: multipart_body
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.2'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.2.1
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.2'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.2.1
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: tilt
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '1.4'
|
120
|
+
- - "<"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '3'
|
123
|
+
type: :runtime
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '1.4'
|
130
|
+
- - "<"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '3'
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: rack
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '1.6'
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '1.6'
|
143
|
+
type: :runtime
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '1.6'
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '1.6'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubyzip
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.0'
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: 1.0.0
|
163
|
+
type: :runtime
|
164
|
+
prerelease: false
|
165
|
+
version_requirements: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - "~>"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '1.0'
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 1.0.0
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: zip-zip
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - "~>"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0.3'
|
180
|
+
- - ">="
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: '0.3'
|
183
|
+
type: :runtime
|
184
|
+
prerelease: false
|
185
|
+
version_requirements: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - "~>"
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0.3'
|
190
|
+
- - ">="
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0.3'
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: sys-uname
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - "~>"
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '1.0'
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: 1.0.2
|
203
|
+
type: :runtime
|
204
|
+
prerelease: false
|
205
|
+
version_requirements: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - "~>"
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: '1.0'
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: 1.0.2
|
213
|
+
- !ruby/object:Gem::Dependency
|
214
|
+
name: rspec
|
215
|
+
requirement: !ruby/object:Gem::Requirement
|
216
|
+
requirements:
|
217
|
+
- - "~>"
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: '3.4'
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '3.4'
|
223
|
+
type: :development
|
224
|
+
prerelease: false
|
225
|
+
version_requirements: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '3.4'
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: '3.4'
|
233
|
+
- !ruby/object:Gem::Dependency
|
234
|
+
name: simplecov
|
235
|
+
requirement: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - "~>"
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '0.10'
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '0.10'
|
243
|
+
type: :development
|
244
|
+
prerelease: false
|
245
|
+
version_requirements: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - "~>"
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0.10'
|
250
|
+
- - ">="
|
251
|
+
- !ruby/object:Gem::Version
|
252
|
+
version: '0.10'
|
253
|
+
- !ruby/object:Gem::Dependency
|
254
|
+
name: simplecov-summary
|
255
|
+
requirement: !ruby/object:Gem::Requirement
|
256
|
+
requirements:
|
257
|
+
- - "~>"
|
258
|
+
- !ruby/object:Gem::Version
|
259
|
+
version: 0.0.4
|
260
|
+
- - ">="
|
261
|
+
- !ruby/object:Gem::Version
|
262
|
+
version: 0.0.4
|
263
|
+
type: :development
|
264
|
+
prerelease: false
|
265
|
+
version_requirements: !ruby/object:Gem::Requirement
|
266
|
+
requirements:
|
267
|
+
- - "~>"
|
268
|
+
- !ruby/object:Gem::Version
|
269
|
+
version: 0.0.4
|
270
|
+
- - ">="
|
271
|
+
- !ruby/object:Gem::Version
|
272
|
+
version: 0.0.4
|
273
|
+
- !ruby/object:Gem::Dependency
|
274
|
+
name: coveralls
|
275
|
+
requirement: !ruby/object:Gem::Requirement
|
276
|
+
requirements:
|
277
|
+
- - "~>"
|
278
|
+
- !ruby/object:Gem::Version
|
279
|
+
version: '0.7'
|
280
|
+
- - ">="
|
281
|
+
- !ruby/object:Gem::Version
|
282
|
+
version: '0.7'
|
283
|
+
type: :development
|
284
|
+
prerelease: false
|
285
|
+
version_requirements: !ruby/object:Gem::Requirement
|
286
|
+
requirements:
|
287
|
+
- - "~>"
|
288
|
+
- !ruby/object:Gem::Version
|
289
|
+
version: '0.7'
|
290
|
+
- - ">="
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: '0.7'
|
293
|
+
- !ruby/object:Gem::Dependency
|
294
|
+
name: rake
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
296
|
+
requirements:
|
297
|
+
- - "~>"
|
298
|
+
- !ruby/object:Gem::Version
|
299
|
+
version: '10.5'
|
300
|
+
- - ">="
|
301
|
+
- !ruby/object:Gem::Version
|
302
|
+
version: '10.5'
|
303
|
+
type: :development
|
304
|
+
prerelease: false
|
305
|
+
version_requirements: !ruby/object:Gem::Requirement
|
306
|
+
requirements:
|
307
|
+
- - "~>"
|
308
|
+
- !ruby/object:Gem::Version
|
309
|
+
version: '10.5'
|
310
|
+
- - ">="
|
311
|
+
- !ruby/object:Gem::Version
|
312
|
+
version: '10.5'
|
313
|
+
- !ruby/object:Gem::Dependency
|
314
|
+
name: yard
|
315
|
+
requirement: !ruby/object:Gem::Requirement
|
316
|
+
requirements:
|
317
|
+
- - "~>"
|
318
|
+
- !ruby/object:Gem::Version
|
319
|
+
version: '0.8'
|
320
|
+
- - ">="
|
321
|
+
- !ruby/object:Gem::Version
|
322
|
+
version: 0.8.7
|
323
|
+
type: :development
|
324
|
+
prerelease: false
|
325
|
+
version_requirements: !ruby/object:Gem::Requirement
|
326
|
+
requirements:
|
327
|
+
- - "~>"
|
328
|
+
- !ruby/object:Gem::Version
|
329
|
+
version: '0.8'
|
330
|
+
- - ">="
|
331
|
+
- !ruby/object:Gem::Version
|
332
|
+
version: 0.8.7
|
333
|
+
- !ruby/object:Gem::Dependency
|
334
|
+
name: redcarpet
|
335
|
+
requirement: !ruby/object:Gem::Requirement
|
336
|
+
requirements:
|
337
|
+
- - "~>"
|
338
|
+
- !ruby/object:Gem::Version
|
339
|
+
version: '3.3'
|
340
|
+
- - ">="
|
341
|
+
- !ruby/object:Gem::Version
|
342
|
+
version: '3.3'
|
343
|
+
type: :development
|
344
|
+
prerelease: false
|
345
|
+
version_requirements: !ruby/object:Gem::Requirement
|
346
|
+
requirements:
|
347
|
+
- - "~>"
|
348
|
+
- !ruby/object:Gem::Version
|
349
|
+
version: '3.3'
|
350
|
+
- - ">="
|
351
|
+
- !ruby/object:Gem::Version
|
352
|
+
version: '3.3'
|
353
|
+
- !ruby/object:Gem::Dependency
|
354
|
+
name: github-markup
|
355
|
+
requirement: !ruby/object:Gem::Requirement
|
356
|
+
requirements:
|
357
|
+
- - "~>"
|
358
|
+
- !ruby/object:Gem::Version
|
359
|
+
version: '1.3'
|
360
|
+
- - ">="
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: 1.3.3
|
363
|
+
type: :development
|
364
|
+
prerelease: false
|
365
|
+
version_requirements: !ruby/object:Gem::Requirement
|
366
|
+
requirements:
|
367
|
+
- - "~>"
|
368
|
+
- !ruby/object:Gem::Version
|
369
|
+
version: '1.3'
|
370
|
+
- - ">="
|
371
|
+
- !ruby/object:Gem::Version
|
372
|
+
version: 1.3.3
|
373
|
+
- !ruby/object:Gem::Dependency
|
374
|
+
name: inch
|
375
|
+
requirement: !ruby/object:Gem::Requirement
|
376
|
+
requirements:
|
377
|
+
- - "~>"
|
378
|
+
- !ruby/object:Gem::Version
|
379
|
+
version: '0.6'
|
380
|
+
- - ">="
|
381
|
+
- !ruby/object:Gem::Version
|
382
|
+
version: '0.6'
|
383
|
+
type: :development
|
384
|
+
prerelease: false
|
385
|
+
version_requirements: !ruby/object:Gem::Requirement
|
386
|
+
requirements:
|
387
|
+
- - "~>"
|
388
|
+
- !ruby/object:Gem::Version
|
389
|
+
version: '0.6'
|
390
|
+
- - ">="
|
391
|
+
- !ruby/object:Gem::Version
|
392
|
+
version: '0.6'
|
393
|
+
description: |-
|
394
|
+
Simple ruby implementation to send notifications to Asana
|
395
|
+
when a exception happens in Rails or Rack-based apps by creating a task and uploading exception details to the task using zip archives
|
396
|
+
email: raoul_ice@yahoo.com
|
397
|
+
executables: []
|
398
|
+
extensions: []
|
399
|
+
extra_rdoc_files: []
|
400
|
+
files:
|
401
|
+
- ".codeclimate.yml"
|
402
|
+
- ".reek"
|
403
|
+
- ".rubocop.yml"
|
404
|
+
- ".travis.yml"
|
405
|
+
- CONTRIBUTING.md
|
406
|
+
- Gemfile
|
407
|
+
- Gemfile.lock
|
408
|
+
- LICENSE
|
409
|
+
- README.md
|
410
|
+
- Rakefile
|
411
|
+
- asana_exception_notifier.gemspec
|
412
|
+
- examples/sinatra/Gemfile
|
413
|
+
- examples/sinatra/Gemfile.lock
|
414
|
+
- examples/sinatra/Procfile
|
415
|
+
- examples/sinatra/README.md
|
416
|
+
- examples/sinatra/config.ru
|
417
|
+
- examples/sinatra/sinatra_app.rb
|
418
|
+
- init.rb
|
419
|
+
- lib/asana_exception_notifier.rb
|
420
|
+
- lib/asana_exception_notifier/classes/asana.rb
|
421
|
+
- lib/asana_exception_notifier/classes/error_page.rb
|
422
|
+
- lib/asana_exception_notifier/helpers/application_helper.rb
|
423
|
+
- lib/asana_exception_notifier/initializers/zip.rb
|
424
|
+
- lib/asana_exception_notifier/note_templates/asana_exception_notifier.html.erb
|
425
|
+
- lib/asana_exception_notifier/note_templates/asana_exception_notifier.text.erb
|
426
|
+
- lib/asana_exception_notifier/request/client.rb
|
427
|
+
- lib/asana_exception_notifier/request/core.rb
|
428
|
+
- lib/asana_exception_notifier/request/middleware.rb
|
429
|
+
- lib/asana_exception_notifier/version.rb
|
430
|
+
- lib/generators/asana_exception_notifier/install_generator.rb
|
431
|
+
- lib/generators/asana_exception_notifier/templates/asana_exception_notifier.rb
|
432
|
+
- spec/lib/asana_exception_notifier/classes/asana_spec.rb
|
433
|
+
- spec/spec_helper.rb
|
434
|
+
- spec/test_notification.rb
|
435
|
+
homepage: http://github.com/bogdanRada/asana_exception_notifier
|
436
|
+
licenses:
|
437
|
+
- MIT
|
438
|
+
metadata:
|
439
|
+
source_code: http://github.com/bogdanRada/asana_exception_notifier
|
440
|
+
bug_tracker: http://github.com/bogdanRada/asana_exception_notifier/issues
|
441
|
+
post_install_message:
|
442
|
+
rdoc_options: []
|
443
|
+
require_paths:
|
444
|
+
- lib
|
445
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
446
|
+
requirements:
|
447
|
+
- - ">="
|
448
|
+
- !ruby/object:Gem::Version
|
449
|
+
version: '2.0'
|
450
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
451
|
+
requirements:
|
452
|
+
- - ">="
|
453
|
+
- !ruby/object:Gem::Version
|
454
|
+
version: '2.5'
|
455
|
+
requirements: []
|
456
|
+
rubyforge_project:
|
457
|
+
rubygems_version: 2.5.1
|
458
|
+
signing_key:
|
459
|
+
specification_version: 4
|
460
|
+
summary: Simple ruby implementation to send notifications to Asana when a exception
|
461
|
+
happens in Rails or Rack-based apps by creating a task and uploading exception details
|
462
|
+
to the task
|
463
|
+
test_files:
|
464
|
+
- spec/lib/asana_exception_notifier/classes/asana_spec.rb
|
465
|
+
- spec/spec_helper.rb
|
466
|
+
- spec/test_notification.rb
|
467
|
+
has_rdoc:
|