asana_exception_notifier 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|