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.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +26 -0
  3. data/.reek +11 -0
  4. data/.rubocop.yml +76 -0
  5. data/.travis.yml +16 -0
  6. data/CONTRIBUTING.md +46 -0
  7. data/Gemfile +3 -0
  8. data/Gemfile.lock +180 -0
  9. data/LICENSE +20 -0
  10. data/README.md +225 -0
  11. data/Rakefile +37 -0
  12. data/asana_exception_notifier.gemspec +48 -0
  13. data/examples/sinatra/Gemfile +7 -0
  14. data/examples/sinatra/Gemfile.lock +124 -0
  15. data/examples/sinatra/Procfile +1 -0
  16. data/examples/sinatra/README.md +14 -0
  17. data/examples/sinatra/config.ru +3 -0
  18. data/examples/sinatra/sinatra_app.rb +46 -0
  19. data/init.rb +1 -0
  20. data/lib/asana_exception_notifier/classes/asana.rb +95 -0
  21. data/lib/asana_exception_notifier/classes/error_page.rb +134 -0
  22. data/lib/asana_exception_notifier/helpers/application_helper.rb +286 -0
  23. data/lib/asana_exception_notifier/initializers/zip.rb +14 -0
  24. data/lib/asana_exception_notifier/note_templates/asana_exception_notifier.html.erb +82 -0
  25. data/lib/asana_exception_notifier/note_templates/asana_exception_notifier.text.erb +24 -0
  26. data/lib/asana_exception_notifier/request/client.rb +85 -0
  27. data/lib/asana_exception_notifier/request/core.rb +132 -0
  28. data/lib/asana_exception_notifier/request/middleware.rb +41 -0
  29. data/lib/asana_exception_notifier/version.rb +27 -0
  30. data/lib/asana_exception_notifier.rb +45 -0
  31. data/lib/generators/asana_exception_notifier/install_generator.rb +14 -0
  32. data/lib/generators/asana_exception_notifier/templates/asana_exception_notifier.rb +20 -0
  33. data/spec/lib/asana_exception_notifier/classes/asana_spec.rb +23 -0
  34. data/spec/spec_helper.rb +45 -0
  35. data/spec/test_notification.rb +20 -0
  36. 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
@@ -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: