redmine_airbrake_backend 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +42 -0
- data/.rubocop.yml +13 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +3 -1
- data/README.md +0 -4
- data/Rakefile +2 -1
- data/app/controllers/airbrake_controller.rb +32 -137
- data/app/controllers/airbrake_notice_controller.rb +8 -6
- data/app/controllers/airbrake_project_settings_controller.rb +6 -4
- data/app/controllers/airbrake_report_controller.rb +2 -0
- data/app/controllers/concerns/airbrake_attachments.rb +56 -0
- data/app/controllers/concerns/airbrake_issue_handling.rb +109 -0
- data/app/controllers/concerns/airbrake_rendering.rb +16 -0
- data/app/helpers/airbrake_helper.rb +35 -23
- data/app/models/airbrake_project_setting.rb +2 -0
- data/bin/rails +3 -3
- data/config/routes.rb +2 -0
- data/db/migrate/20130708102357_create_airbrake_project_settings.rb +3 -0
- data/db/migrate/20131003151228_add_reopen_repeat_description.rb +3 -0
- data/lib/redmine_airbrake_backend.rb +3 -0
- data/lib/redmine_airbrake_backend/backtrace_element.rb +6 -4
- data/lib/redmine_airbrake_backend/engine.rb +27 -25
- data/lib/redmine_airbrake_backend/error.rb +2 -0
- data/lib/redmine_airbrake_backend/ios_report.rb +33 -28
- data/lib/redmine_airbrake_backend/notice.rb +43 -27
- data/lib/redmine_airbrake_backend/patches/issue_category.rb +10 -5
- data/lib/redmine_airbrake_backend/patches/issue_priority.rb +10 -5
- data/lib/redmine_airbrake_backend/patches/project.rb +10 -5
- data/lib/redmine_airbrake_backend/patches/projects_helper.rb +16 -11
- data/lib/redmine_airbrake_backend/patches/tracker.rb +10 -5
- data/lib/redmine_airbrake_backend/version.rb +3 -1
- data/lib/tasks/test.rake +11 -9
- data/redmine_airbrake_backend.gemspec +10 -6
- data/test/unit/notice_test.rb +1 -1
- metadata +24 -5
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'redmine_airbrake_backend/error'
|
2
4
|
|
3
5
|
module RedmineAirbrakeBackend
|
@@ -7,32 +9,18 @@ module RedmineAirbrakeBackend
|
|
7
9
|
attr_reader :errors, :params, :session, :context, :environment, :application, :attachments
|
8
10
|
|
9
11
|
def initialize(options)
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
# Params
|
14
|
-
@params = options[:params]
|
15
|
-
|
16
|
-
# Session
|
17
|
-
@session = options[:session]
|
12
|
+
# Set instance variables from options
|
13
|
+
instance_variables_from_options(options, %i[errors params session environment application])
|
14
|
+
instance_variables_from_options(options, %i[attachments], ensure_array: true)
|
18
15
|
|
19
16
|
# Context
|
20
|
-
@context = options
|
21
|
-
|
22
|
-
# Environment
|
23
|
-
@environment = options[:environment]
|
24
|
-
|
25
|
-
# Application
|
26
|
-
@application = options[:application]
|
27
|
-
|
28
|
-
# Attachments
|
29
|
-
@attachments = (options[:attachments].presence || []).compact
|
17
|
+
@context = context_from_options(options)
|
30
18
|
|
31
19
|
# Environment name
|
32
|
-
@environment_name = options
|
20
|
+
@environment_name = environment_name_from_options(options)
|
33
21
|
|
34
22
|
# Type
|
35
|
-
@type =
|
23
|
+
@type = type_from_options(options)
|
36
24
|
|
37
25
|
# Error ID
|
38
26
|
@id = generate_id
|
@@ -43,21 +31,49 @@ module RedmineAirbrakeBackend
|
|
43
31
|
|
44
32
|
private
|
45
33
|
|
34
|
+
def instance_variables_from_options(options, keys, opts = {})
|
35
|
+
keys.each do |key|
|
36
|
+
value = options[key]
|
37
|
+
|
38
|
+
value = value.compact if value.is_a?(Array) || value.is_a?(Hash)
|
39
|
+
value = Array(value) if opts[:ensure_array]
|
40
|
+
|
41
|
+
instance_variable_set("@#{key}", value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def context_from_options(options)
|
46
|
+
options[:context].reject { |k, _| ['notifier'].include?(k) }
|
47
|
+
end
|
48
|
+
|
49
|
+
def environment_name_from_options(options)
|
50
|
+
return nil if options[:context].blank?
|
51
|
+
|
52
|
+
options[:context][:environment].presence
|
53
|
+
end
|
54
|
+
|
55
|
+
def type_from_options(options)
|
56
|
+
return options[:type] if options[:type].present?
|
57
|
+
|
58
|
+
return nil if options[:context].blank? || options[:context][:language].blank?
|
59
|
+
|
60
|
+
options[:context][:language].strip.split('/', 2).first.downcase
|
61
|
+
end
|
62
|
+
|
46
63
|
def generate_id
|
47
64
|
Digest::MD5.hexdigest(@errors.map(&:id).join("\n"))
|
48
65
|
end
|
49
66
|
|
50
67
|
def generate_subject
|
51
68
|
error = @errors.first
|
52
|
-
s = ''
|
53
69
|
|
54
|
-
if error.type.blank? || error.message.starts_with?("#{error.type}:")
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
70
|
+
subject = if error.type.blank? || error.message.starts_with?("#{error.type}:")
|
71
|
+
"[#{@id[0..7]}] #{error.message}"
|
72
|
+
else
|
73
|
+
"[#{@id[0..7]}] #{error.type}: #{error.message}"
|
74
|
+
end
|
59
75
|
|
60
|
-
|
76
|
+
subject[0..254].strip
|
61
77
|
end
|
62
78
|
end
|
63
79
|
end
|
@@ -1,11 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
|
3
|
-
module RedmineAirbrakeBackend
|
4
|
-
module
|
5
|
-
|
5
|
+
module RedmineAirbrakeBackend
|
6
|
+
module Patches
|
7
|
+
# Patches for IssueCategory
|
8
|
+
module IssueCategory
|
9
|
+
extend ActiveSupport::Concern
|
6
10
|
|
7
|
-
|
8
|
-
|
11
|
+
included do
|
12
|
+
has_many :airbrake_project_settings, foreign_key: :category_id, dependent: :nullify
|
13
|
+
end
|
9
14
|
end
|
10
15
|
end
|
11
16
|
end
|
@@ -1,11 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
|
3
|
-
module RedmineAirbrakeBackend
|
4
|
-
module
|
5
|
-
|
5
|
+
module RedmineAirbrakeBackend
|
6
|
+
module Patches
|
7
|
+
# Patches for IssuePriority
|
8
|
+
module IssuePriority
|
9
|
+
extend ActiveSupport::Concern
|
6
10
|
|
7
|
-
|
8
|
-
|
11
|
+
included do
|
12
|
+
has_many :airbrake_project_settings, dependent: :nullify
|
13
|
+
end
|
9
14
|
end
|
10
15
|
end
|
11
16
|
end
|
@@ -1,11 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
|
3
|
-
module RedmineAirbrakeBackend
|
4
|
-
module
|
5
|
-
|
5
|
+
module RedmineAirbrakeBackend
|
6
|
+
module Patches
|
7
|
+
# Patches for Project
|
8
|
+
module Project
|
9
|
+
extend ActiveSupport::Concern
|
6
10
|
|
7
|
-
|
8
|
-
|
11
|
+
included do
|
12
|
+
has_one :airbrake_settings, class_name: AirbrakeProjectSetting.name, dependent: :destroy
|
13
|
+
end
|
9
14
|
end
|
10
15
|
end
|
11
16
|
end
|
@@ -1,25 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
|
3
|
-
module RedmineAirbrakeBackend
|
4
|
-
module
|
5
|
-
|
5
|
+
module RedmineAirbrakeBackend
|
6
|
+
module Patches
|
7
|
+
# Patches for ProjectsHelper
|
8
|
+
module ProjectsHelper
|
9
|
+
extend ActiveSupport::Concern
|
6
10
|
|
7
|
-
|
8
|
-
|
9
|
-
|
11
|
+
included do
|
12
|
+
alias_method_chain :project_settings_tabs, :airbrake_backend_tab
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
15
|
+
# add airbrake tab to project settings
|
16
|
+
def project_settings_tabs_with_airbrake_backend_tab
|
17
|
+
tabs = project_settings_tabs_without_airbrake_backend_tab
|
14
18
|
|
15
|
-
|
19
|
+
tabs.push(
|
16
20
|
name: 'airbrake',
|
17
21
|
action: :manage_airbrake,
|
18
22
|
partial: 'projects/settings/airbrake',
|
19
23
|
label: :project_module_airbrake
|
20
24
|
)
|
21
25
|
|
22
|
-
|
26
|
+
tabs.select { |tab| User.current.allowed_to?(tab[:action], @project) }
|
27
|
+
end
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|
@@ -1,11 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
|
3
|
-
module RedmineAirbrakeBackend
|
4
|
-
module
|
5
|
-
|
5
|
+
module RedmineAirbrakeBackend
|
6
|
+
module Patches
|
7
|
+
# Patches for Tracker
|
8
|
+
module Tracker
|
9
|
+
extend ActiveSupport::Concern
|
6
10
|
|
7
|
-
|
8
|
-
|
11
|
+
included do
|
12
|
+
has_many :airbrake_project_settings, dependent: :nullify
|
13
|
+
end
|
9
14
|
end
|
10
15
|
end
|
11
16
|
end
|
data/lib/tasks/test.rake
CHANGED
@@ -1,30 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
namespace :redmine do
|
2
4
|
namespace :airbrake_backend do
|
3
5
|
desc 'Runs the plugin tests.'
|
4
6
|
task :test do
|
5
|
-
Rake::Task[
|
6
|
-
Rake::Task[
|
7
|
-
Rake::Task[
|
7
|
+
Rake::Task['redmine:airbrake_backend:test:units'].invoke
|
8
|
+
Rake::Task['redmine:airbrake_backend:test:functionals'].invoke
|
9
|
+
Rake::Task['redmine:airbrake_backend:test:integration'].invoke
|
8
10
|
end
|
9
11
|
|
10
12
|
namespace :test do
|
11
13
|
desc 'Runs the plugin unit tests.'
|
12
|
-
Rake::TestTask.new :
|
13
|
-
t.libs <<
|
14
|
+
Rake::TestTask.new units: 'db:test:prepare' do |t|
|
15
|
+
t.libs << 'test'
|
14
16
|
t.verbose = true
|
15
17
|
t.pattern = "#{RedmineAirbrakeBackend.directory}/test/unit/**/*_test.rb"
|
16
18
|
end
|
17
19
|
|
18
20
|
desc 'Runs the plugin functional tests.'
|
19
|
-
Rake::TestTask.new :
|
20
|
-
t.libs <<
|
21
|
+
Rake::TestTask.new functionals: 'db:test:prepare' do |t|
|
22
|
+
t.libs << 'test'
|
21
23
|
t.verbose = true
|
22
24
|
t.pattern = "#{RedmineAirbrakeBackend.directory}/test/functional/**/*_test.rb"
|
23
25
|
end
|
24
26
|
|
25
27
|
desc 'Runs the plugin integration tests.'
|
26
|
-
Rake::TestTask.new :
|
27
|
-
t.libs <<
|
28
|
+
Rake::TestTask.new integration: 'db:test:prepare' do |t|
|
29
|
+
t.libs << 'test'
|
28
30
|
t.verbose = true
|
29
31
|
t.pattern = "#{RedmineAirbrakeBackend.directory}/test/integration/**/*_test.rb"
|
30
32
|
end
|
@@ -1,19 +1,22 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
3
4
|
|
4
5
|
require 'redmine_airbrake_backend/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
8
|
+
spec.required_ruby_version = '>= 2.4.0'
|
9
|
+
|
7
10
|
spec.name = 'redmine_airbrake_backend'
|
8
11
|
spec.version = RedmineAirbrakeBackend::VERSION
|
9
12
|
spec.authors = ['Florian Schwab']
|
10
13
|
spec.email = ['me@ydkn.de']
|
11
|
-
spec.description =
|
12
|
-
spec.summary =
|
13
|
-
spec.homepage = 'https://
|
14
|
+
spec.description = 'Plugin which adds Airbrake support to Redmine'
|
15
|
+
spec.summary = 'This plugin provides the necessary API to use Redmine as a Airbrake backend'
|
16
|
+
spec.homepage = 'https://gitlab.com/ydkn/redmine_airbrake_backend'
|
14
17
|
spec.license = 'MIT'
|
15
18
|
|
16
|
-
spec.files = `git ls-files`.split(
|
19
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
21
|
spec.require_paths = ['lib']
|
19
22
|
|
@@ -21,4 +24,5 @@ Gem::Specification.new do |spec|
|
|
21
24
|
|
22
25
|
spec.add_development_dependency 'bundler'
|
23
26
|
spec.add_development_dependency 'rake'
|
27
|
+
spec.add_development_dependency 'rubocop'
|
24
28
|
end
|
data/test/unit/notice_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redmine_airbrake_backend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Schwab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Plugin which adds Airbrake support to Redmine
|
56
70
|
email:
|
57
71
|
- me@ydkn.de
|
@@ -60,6 +74,8 @@ extensions: []
|
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
76
|
- ".gitignore"
|
77
|
+
- ".gitlab-ci.yml"
|
78
|
+
- ".rubocop.yml"
|
63
79
|
- CHANGELOG.md
|
64
80
|
- Gemfile
|
65
81
|
- LICENSE.txt
|
@@ -69,6 +85,9 @@ files:
|
|
69
85
|
- app/controllers/airbrake_notice_controller.rb
|
70
86
|
- app/controllers/airbrake_project_settings_controller.rb
|
71
87
|
- app/controllers/airbrake_report_controller.rb
|
88
|
+
- app/controllers/concerns/airbrake_attachments.rb
|
89
|
+
- app/controllers/concerns/airbrake_issue_handling.rb
|
90
|
+
- app/controllers/concerns/airbrake_rendering.rb
|
72
91
|
- app/helpers/airbrake_helper.rb
|
73
92
|
- app/models/airbrake_project_setting.rb
|
74
93
|
- app/views/airbrake/issue_description/_section.erb
|
@@ -97,7 +116,7 @@ files:
|
|
97
116
|
- redmine_airbrake_backend.gemspec
|
98
117
|
- test/test_helper.rb
|
99
118
|
- test/unit/notice_test.rb
|
100
|
-
homepage: https://
|
119
|
+
homepage: https://gitlab.com/ydkn/redmine_airbrake_backend
|
101
120
|
licenses:
|
102
121
|
- MIT
|
103
122
|
metadata: {}
|
@@ -109,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
128
|
requirements:
|
110
129
|
- - ">="
|
111
130
|
- !ruby/object:Gem::Version
|
112
|
-
version:
|
131
|
+
version: 2.4.0
|
113
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
133
|
requirements:
|
115
134
|
- - ">="
|
@@ -117,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
136
|
version: '0'
|
118
137
|
requirements: []
|
119
138
|
rubyforge_project:
|
120
|
-
rubygems_version: 2.7.
|
139
|
+
rubygems_version: 2.7.7
|
121
140
|
signing_key:
|
122
141
|
specification_version: 4
|
123
142
|
summary: This plugin provides the necessary API to use Redmine as a Airbrake backend
|