danger-xcode_summary 0.1.4 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b206c998ed6da63ed6db8f95fba23cd5462bf647
4
- data.tar.gz: 53c168e9094af71f1ffc4f56bdfb6884e9c09b5c
3
+ metadata.gz: fea9e12b00a58261fd0f841b76b7228395f4257f
4
+ data.tar.gz: 721e083c3336c8d53cdec149bf9de450fa57a439
5
5
  SHA512:
6
- metadata.gz: ca7b8d6828da186b54c5d23d91af79a6022c08fc1e5b9f7854cc3ea1f71a7976c8b83af9dcfd98c6ee7ed1c8b2ed503d9099eafb193836b1b12cbcdea3c57bb0
7
- data.tar.gz: 54bc8cee7c7e293a29e167ec8c875cd2b86b6a0c2f02f72236f57d880ecba354347d9cf72d10c4093cbae2ce9cab451d0a874b7f4a7c38690eb5618ca463f1fc
6
+ metadata.gz: 90588b0811d839b2c0a1b2d084742ff23ca4da1dc9f4a94128a18ad21f571ccc78c5a2725b0e51e84652303bbf4e67a3857741f757f6601f7b75a38deb66225a
7
+ data.tar.gz: 8bdb96a869ea5944cdf8e3fba78827a1f30dcd6b4eb23ef1505d573ed948f7e6d842bb586ae2b0b235c83b03331d4c58d036e2fe345d649d777f5e3e42006265
data/.rubocop.yml CHANGED
@@ -80,6 +80,9 @@ Style/RedundantSelf:
80
80
  Metrics/MethodLength:
81
81
  Max: 60
82
82
 
83
+ Metrics/ModuleLength:
84
+ Enabled: false
85
+
83
86
  # We're not there yet
84
87
  Style/Documentation:
85
88
  Enabled: false
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-xcode_summary (0.1.4)
4
+ danger-xcode_summary (0.2.0)
5
5
  danger-plugin-api (~> 1.0)
6
6
 
7
7
  GEM
@@ -16,10 +16,9 @@ GEM
16
16
  nap
17
17
  open4 (~> 1.3)
18
18
  coderay (1.1.1)
19
- colored (1.2)
20
19
  colored2 (3.1.2)
21
- cork (0.2.0)
22
- colored (~> 1.2)
20
+ cork (0.3.0)
21
+ colored2 (~> 3.1)
23
22
  danger (4.3.3)
24
23
  claide (~> 1.0)
25
24
  claide-plugins (>= 0.9.2)
@@ -131,4 +130,4 @@ DEPENDENCIES
131
130
  yard
132
131
 
133
132
  BUNDLED WITH
134
- 1.14.3
133
+ 1.14.6
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](LICENSE.txt)
4
4
  [![Gem Version](https://badge.fury.io/rb/danger-xcode_summary.svg)](https://badge.fury.io/rb/danger-xcode_summary)
5
5
  [![Build Status](https://travis-ci.org/diogot/danger-xcode_summary.svg?branch=master)](https://travis-ci.org/diogot/danger-xcode_summary)
6
+ [![Dependency Status](https://dependencyci.com/github/diogot/danger-xcode_summary/badge)](https://dependencyci.com/github/diogot/danger-xcode_summary)
6
7
 
7
8
  A [Danger](http://danger.systems) plugin that shows all build errors, warnings and unit tests results generated from `xcodebuild`.
8
9
 
@@ -104,6 +105,15 @@ xcode_summary.ignored_files = '**/Pods/**'
104
105
  xcode_summary.report 'xcodebuild.json'
105
106
  ```
106
107
 
108
+ You can use `inline_mode`.
109
+ When this value is enabled, each warnings and errors are commented on each lines.
110
+
111
+ ```ruby
112
+ # Comment on each lines
113
+ xcode_summary.inline_mode = true
114
+ xcode_summary.report 'xcodebuild.json'
115
+ ```
116
+
107
117
  ## License
108
118
 
109
119
  danger-xcode_summary is released under the MIT license. See [LICENSE.txt](LICENSE.txt) for details.
@@ -1,5 +1,7 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
4
+
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'xcode_summary/gem_version.rb'
5
7
 
@@ -1,3 +1,3 @@
1
1
  module XcodeSummary
2
- VERSION = '0.1.4'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -18,6 +18,9 @@ module Danger
18
18
  # @tags xcode, xcodebuild, format
19
19
  #
20
20
  class DangerXcodeSummary < Plugin
21
+ Location = Struct.new(:file_name, :file_path, :line)
22
+ Result = Struct.new(:message, :location)
23
+
21
24
  # The project root, which will be used to make the paths relative.
22
25
  # Defaults to `pwd`.
23
26
  # @param [String] value
@@ -44,6 +47,12 @@ module Danger
44
47
  # @return [Boolean]
45
48
  attr_accessor :test_summary
46
49
 
50
+ # Defines if using inline comment or not.
51
+ # Defaults to `false`.
52
+ # @param [Boolean] value
53
+ # @return [Boolean]
54
+ attr_accessor :inline_mode
55
+
47
56
  def project_root
48
57
  root = @project_root || Dir.pwd
49
58
  root += '/' unless root.end_with? '/'
@@ -59,7 +68,11 @@ module Danger
59
68
  end
60
69
 
61
70
  def test_summary
62
- @test_summary .nil? ? true : @test_summary
71
+ @test_summary.nil? ? true : @test_summary
72
+ end
73
+
74
+ def inline_mode
75
+ @inline_mode || false
63
76
  end
64
77
 
65
78
  # Reads a file with JSON Xcode summary and reports it.
@@ -79,8 +92,20 @@ module Danger
79
92
 
80
93
  def format_summary(xcode_summary)
81
94
  messages(xcode_summary).each { |s| message(s, sticky: sticky_summary) }
82
- warnings(xcode_summary).each { |s| warn(s, sticky: false) }
83
- errors(xcode_summary).each { |s| fail(s, sticky: false) }
95
+ warnings(xcode_summary).each do |result|
96
+ if inline_mode && result.location
97
+ warn(result.message, sticky: false, file: result.location.file_name, line: result.location.line)
98
+ else
99
+ warn(result.message, sticky: false)
100
+ end
101
+ end
102
+ errors(xcode_summary).each do |result|
103
+ if inline_mode && result.location
104
+ fail(result.message, sticky: false, file: result.location.file_name, line: result.location.line)
105
+ else
106
+ fail(result.message, sticky: false)
107
+ end
108
+ end
84
109
  end
85
110
 
86
111
  def messages(xcode_summary)
@@ -95,21 +120,46 @@ module Danger
95
120
 
96
121
  def warnings(xcode_summary)
97
122
  [
98
- xcode_summary[:warnings],
99
- xcode_summary[:ld_warnings],
100
- xcode_summary.fetch(:compile_warnings, {}).map { |s| format_compile_warning(s) }
101
- ].flatten.uniq.compact
123
+ xcode_summary.fetch(:warnings, []).map { |message| Result.new(message, nil) },
124
+ xcode_summary.fetch(:ld_warnings, []).map { |message| Result.new(message, nil) },
125
+ xcode_summary.fetch(:compile_warnings, {}).map do |h|
126
+ Result.new(format_compile_warning(h), parse_location(h))
127
+ end
128
+ ].flatten.uniq.compact.reject { |result| result.message.nil? }
102
129
  end
103
130
 
104
131
  def errors(xcode_summary)
105
132
  [
106
133
  xcode_summary[:errors],
107
- xcode_summary.fetch(:compile_errors, {}).map { |s| format_compile_warning(s) },
108
- xcode_summary.fetch(:file_missing_errors, {}).map { |s| format_format_file_missing_error(s) },
109
- xcode_summary.fetch(:undefined_symbols_errors, {}).map { |s| format_undefined_symbols(s) },
110
- xcode_summary.fetch(:duplicate_symbols_errors, {}).map { |s| format_duplicate_symbols(s) },
111
- xcode_summary.fetch(:tests_failures, {}).map { |k, v| format_test_failure(k, v) }.flatten
112
- ].flatten.uniq.compact
134
+ xcode_summary.fetch(:compile_errors, {}).map do |h|
135
+ Result.new(format_compile_warning(h), parse_location(h))
136
+ end,
137
+ xcode_summary.fetch(:file_missing_errors, {}).map do |h|
138
+ Result.new(format_format_file_missing_error(h), parse_location(h))
139
+ end,
140
+ xcode_summary.fetch(:undefined_symbols_errors, {}).map do |h|
141
+ Result.new(format_undefined_symbols(h), nil)
142
+ end,
143
+ xcode_summary.fetch(:duplicate_symbols_errors, {}).map do |h|
144
+ Result.new(format_duplicate_symbols(h), nil)
145
+ end,
146
+ xcode_summary.fetch(:tests_failures, {}).map do |test_suite, failures|
147
+ failures.map do |failure|
148
+ Result.new(format_test_failure(test_suite, failure), parse_test_location(failure))
149
+ end
150
+ end
151
+ ].flatten.uniq.compact.reject { |result| result.message.nil? }
152
+ end
153
+
154
+ def parse_location(h)
155
+ file_path, line, _column = h[:file_path].split(':')
156
+ Location.new(h[:file_name], file_path, line.to_i)
157
+ end
158
+
159
+ def parse_test_location(failure)
160
+ path, line = failure[:file_path].split(':')
161
+ file_name = relative_path(path)
162
+ Location.new(file_name, path, line.to_i)
113
163
  end
114
164
 
115
165
  def format_path(path)
@@ -181,12 +231,10 @@ module Danger
181
231
  "> #{h[:file_paths].map { |path| path.split('/').last }.join('<br /> ')}"
182
232
  end
183
233
 
184
- def format_test_failure(suite_name, failures)
185
- failures.map do |f|
186
- path = relative_path(f[:file_path])
187
- path_link = format_path(path)
188
- "**#{suite_name}**: #{f[:test_case]}, #{escape_reason(f[:reason])} <br /> #{path_link}"
189
- end
234
+ def format_test_failure(suite_name, failure)
235
+ path = relative_path(failure[:file_path])
236
+ path_link = format_path(path)
237
+ "**#{suite_name}**: #{failure[:test_case]}, #{escape_reason(failure[:reason])} <br /> #{path_link}"
190
238
  end
191
239
  end
192
240
  end
@@ -93,6 +93,40 @@ module Danger
93
93
  # rubocop:enable LineLength
94
94
  ]
95
95
  end
96
+
97
+ context 'with inline_mode' do
98
+ before do
99
+ @xcode_summary.inline_mode = true
100
+ end
101
+
102
+ it 'asserts errors on the line' do
103
+ allow(@xcode_summary).to receive(:fail)
104
+ @xcode_summary.report('spec/fixtures/test_errors.json')
105
+ expect(@xcode_summary).to have_received(:fail).with(
106
+ instance_of(String),
107
+ sticky: false,
108
+ file: 'MyWeight/MyWeightTests/Tests.swift',
109
+ line: 86
110
+ )
111
+ end
112
+
113
+ it 'asserts warning on the line' do
114
+ allow(@xcode_summary).to receive(:warn)
115
+ @xcode_summary.report('spec/fixtures/summary.json')
116
+ expect(@xcode_summary).to have_received(:warn).with(
117
+ instance_of(String),
118
+ sticky: false,
119
+ file: 'Bla.m',
120
+ line: 32
121
+ )
122
+ expect(@xcode_summary).to have_received(:warn).with(
123
+ instance_of(String),
124
+ sticky: false,
125
+ file: 'ISO8601DateFormatter.m',
126
+ line: 176
127
+ )
128
+ end
129
+ end
96
130
  end
97
131
  end
98
132
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-xcode_summary
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diogo Tridapalli
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-04-11 00:00:00.000000000 Z
12
+ date: 2017-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: danger-plugin-api