danger-ios_logs 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 117f880787c83e92c01c35f4fbced8bb21fc7657
4
+ data.tar.gz: 28a1c651ba18c6b97fc765c8161b9d0591865fa7
5
+ SHA512:
6
+ metadata.gz: 6fccf0c0096a05ac547580fa3d09d4ddaa6caf9165a87a0ce81736956d1221af00de427a4922d276d7d6866226974b5c3bfa1bf38b7f1222c0cbcaa66a28974c
7
+ data.tar.gz: d9e3c976cc9ee4c296afde6146387b73a3e91ee5a8ece1fe484456957eaadd84db6eb7c49b950775053bd768b919e23860d50e752457e425625d826d35f9fb9a
@@ -0,0 +1,50 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ # Gemfile.lock
46
+ # .ruby-version
47
+ # .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
@@ -0,0 +1,4 @@
1
+ Metrics/LineLength:
2
+ Max: 110
3
+ Metrics/AbcSize:
4
+ Max: 16.5
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ cache:
3
+ directories:
4
+ - bundle
5
+
6
+ rvm:
7
+ - 2.0
8
+ - 2.1.3
9
+ - 2.3.3
10
+ - 2.4.0
11
+
12
+ script:
13
+ - bundle exec rake spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in danger-ios_logs.gemspec
4
+ gemspec
@@ -0,0 +1,135 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ danger-ios_logs (0.1.0)
5
+ danger-plugin-api (~> 1.0)
6
+ git_diff_parser (~> 2.3.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.5.0)
12
+ public_suffix (~> 2.0, >= 2.0.2)
13
+ ast (2.3.0)
14
+ claide (1.0.1)
15
+ claide-plugins (0.9.2)
16
+ cork
17
+ nap
18
+ open4 (~> 1.3)
19
+ coderay (1.1.1)
20
+ colored (1.2)
21
+ colored2 (3.1.2)
22
+ cork (0.2.0)
23
+ colored (~> 1.2)
24
+ danger (4.2.2)
25
+ claide (~> 1.0)
26
+ claide-plugins (>= 0.9.2)
27
+ colored2 (~> 3.1)
28
+ cork (~> 0.1)
29
+ faraday (~> 0.9)
30
+ faraday-http-cache (~> 1.0)
31
+ git (~> 1)
32
+ kramdown (~> 1.5)
33
+ octokit (~> 4.2)
34
+ terminal-table (~> 1)
35
+ danger-plugin-api (1.0.0)
36
+ danger (> 2.0)
37
+ diff-lcs (1.3)
38
+ faraday (0.11.0)
39
+ multipart-post (>= 1.2, < 3)
40
+ faraday-http-cache (1.3.1)
41
+ faraday (~> 0.8)
42
+ ffi (1.9.17)
43
+ formatador (0.2.5)
44
+ git (1.3.0)
45
+ git_diff_parser (2.3.0)
46
+ guard (2.14.1)
47
+ formatador (>= 0.2.4)
48
+ listen (>= 2.7, < 4.0)
49
+ lumberjack (~> 1.0)
50
+ nenv (~> 0.1)
51
+ notiffany (~> 0.0)
52
+ pry (>= 0.9.12)
53
+ shellany (~> 0.0)
54
+ thor (>= 0.18.1)
55
+ guard-compat (1.2.1)
56
+ guard-rspec (4.7.3)
57
+ guard (~> 2.1)
58
+ guard-compat (~> 1.1)
59
+ rspec (>= 2.99.0, < 4.0)
60
+ kramdown (1.13.2)
61
+ listen (3.0.7)
62
+ rb-fsevent (>= 0.9.3)
63
+ rb-inotify (>= 0.9.7)
64
+ lumberjack (1.0.11)
65
+ method_source (0.8.2)
66
+ multipart-post (2.0.0)
67
+ nap (1.1.0)
68
+ nenv (0.3.0)
69
+ notiffany (0.1.1)
70
+ nenv (~> 0.1)
71
+ shellany (~> 0.0)
72
+ octokit (4.6.2)
73
+ sawyer (~> 0.8.0, >= 0.5.3)
74
+ open4 (1.3.4)
75
+ parser (2.4.0.0)
76
+ ast (~> 2.2)
77
+ powerpack (0.1.1)
78
+ pry (0.10.4)
79
+ coderay (~> 1.1.0)
80
+ method_source (~> 0.8.1)
81
+ slop (~> 3.4)
82
+ public_suffix (2.0.5)
83
+ rainbow (2.2.1)
84
+ rake (10.5.0)
85
+ rb-fsevent (0.9.8)
86
+ rb-inotify (0.9.8)
87
+ ffi (>= 0.5.0)
88
+ rspec (3.5.0)
89
+ rspec-core (~> 3.5.0)
90
+ rspec-expectations (~> 3.5.0)
91
+ rspec-mocks (~> 3.5.0)
92
+ rspec-core (3.5.4)
93
+ rspec-support (~> 3.5.0)
94
+ rspec-expectations (3.5.0)
95
+ diff-lcs (>= 1.2.0, < 2.0)
96
+ rspec-support (~> 3.5.0)
97
+ rspec-mocks (3.5.0)
98
+ diff-lcs (>= 1.2.0, < 2.0)
99
+ rspec-support (~> 3.5.0)
100
+ rspec-support (3.5.0)
101
+ rubocop (0.47.1)
102
+ parser (>= 2.3.3.1, < 3.0)
103
+ powerpack (~> 0.1)
104
+ rainbow (>= 1.99.1, < 3.0)
105
+ ruby-progressbar (~> 1.7)
106
+ unicode-display_width (~> 1.0, >= 1.0.1)
107
+ ruby-progressbar (1.8.1)
108
+ sawyer (0.8.1)
109
+ addressable (>= 2.3.5, < 2.6)
110
+ faraday (~> 0.8, < 1.0)
111
+ shellany (0.0.1)
112
+ slop (3.6.0)
113
+ terminal-table (1.7.3)
114
+ unicode-display_width (~> 1.1.1)
115
+ thor (0.19.4)
116
+ unicode-display_width (1.1.3)
117
+ yard (0.9.8)
118
+
119
+ PLATFORMS
120
+ ruby
121
+
122
+ DEPENDENCIES
123
+ bundler (~> 1.3)
124
+ danger-ios_logs!
125
+ guard (~> 2.14)
126
+ guard-rspec (~> 4.7)
127
+ listen (= 3.0.7)
128
+ pry
129
+ rake (~> 10.0)
130
+ rspec (~> 3.4)
131
+ rubocop (~> 0.41)
132
+ yard (~> 0.8)
133
+
134
+ BUNDLED WITH
135
+ 1.14.4
@@ -0,0 +1,19 @@
1
+ # A guardfile for making Danger Plugins
2
+ # For more info see https://github.com/guard/guard#readme
3
+
4
+ # To run, use `bundle exec guard`.
5
+
6
+ guard :rspec, cmd: 'bundle exec rspec' do
7
+ require 'guard/rspec/dsl'
8
+ dsl = Guard::RSpec::Dsl.new(self)
9
+
10
+ # RSpec files
11
+ rspec = dsl.rspec
12
+ watch(rspec.spec_helper) { rspec.spec_dir }
13
+ watch(rspec.spec_support) { rspec.spec_dir }
14
+ watch(rspec.spec_files)
15
+
16
+ # Ruby files
17
+ ruby = dsl.ruby
18
+ dsl.watch_spec_files_for(ruby.lib_files)
19
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2017 PGS Software
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,60 @@
1
+
2
+ [![Travis](https://img.shields.io/travis/PGSSoft/danger-ios_logs.svg)](https://travis-ci.org/PGSSoft/danger-ios_logs)
3
+ [![Gem](https://img.shields.io/gem/v/danger-ios_logs.svg)](https://rubygems.org/gems/danger-ios_logs)
4
+ [![License](https://img.shields.io/github/license/PGSSoft/danger-ios_logs.svg)](https://github.com/PGSSoft/danger-ios_logs/blob/master/LICENSE)
5
+
6
+ ### ios_logs
7
+
8
+ This is a danger plugin to detect any `NSLog`/`print` entries left in the code.
9
+
10
+ <blockquote>Ensure, by warning, there are no `NSLog`/`print` entries left in the modified code
11
+ <pre>
12
+ ios_logs.check</pre>
13
+ </blockquote>
14
+
15
+ <blockquote>Ensure, by fail, there are no `NSLog`/`print` entries left in the modified code
16
+ <pre>
17
+ ios_logs.check :fail</pre>
18
+ </blockquote>
19
+
20
+ <blockquote>Ensure, there are no `print` left in the modified code. Ignore `NSLog`
21
+ <pre>
22
+ ios_logs.nslog = false
23
+ ios_logs.check</pre>
24
+ </blockquote>
25
+
26
+
27
+
28
+ #### Attributes
29
+
30
+ `nslog` - Notify usage of `NSLog`. `true` by default
31
+
32
+ `print` - Notify usage of `print`. `true` by default
33
+
34
+ `prints` - List of `print` in changeset
35
+
36
+ `nslogs` - List of `NSLog` in changeset
37
+
38
+ `logs` - Combined list of both `NSLog` and `print`
39
+
40
+
41
+
42
+
43
+ #### Methods
44
+
45
+ `check` - Checks if in the changed code `NSLog` or `print` are used.
46
+
47
+
48
+ ## License
49
+
50
+ The project is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
51
+
52
+ ## About
53
+ The project maintained by software development agency [PGS Software](https://www.pgs-soft.com).
54
+ See our other [open-source projects](https://github.com/PGSSoft) or [contact us](https://www.pgs-soft.com/contact-us) to develop your product.
55
+
56
+ ## Follow us
57
+
58
+ [![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=https://github.com/PGSSoft/danger-ios_logs)
59
+ [![Twitter Follow](https://img.shields.io/twitter/follow/pgssoftware.svg?style=social&label=Follow)](https://twitter.com/pgssoftware)
60
+
@@ -0,0 +1,23 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:specs)
6
+
7
+ task default: :specs
8
+
9
+ task :spec do
10
+ Rake::Task['specs'].invoke
11
+ Rake::Task['rubocop'].invoke
12
+ Rake::Task['spec_docs'].invoke
13
+ end
14
+
15
+ desc 'Run RuboCop on the lib/specs directory'
16
+ RuboCop::RakeTask.new(:rubocop) do |task|
17
+ task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
18
+ end
19
+
20
+ desc 'Ensure that the plugin passes `danger plugins lint`'
21
+ task :spec_docs do
22
+ sh 'bundle exec danger plugins lint'
23
+ end
@@ -0,0 +1,50 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ios_logs/gem_version.rb'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'danger-ios_logs'
8
+ spec.version = IosLogs::VERSION
9
+ spec.authors = ['Bartosz Janda', 'Joanna Bednarz']
10
+ spec.email = ['bjanda@pgs-soft.com', 'jbednarz@pgs-soft.com']
11
+ spec.description = 'Danger plugin to detect any NSLog/print entries left in the code'
12
+ spec.summary = 'Danger plugin to detect any NSLog/print entries left in the code'
13
+ spec.homepage = 'https://github.com/PGSSoft/danger-ios_logs'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_runtime_dependency 'danger-plugin-api', '~> 1.0'
22
+ spec.add_runtime_dependency 'git_diff_parser', '~> 2.3.0'
23
+
24
+ # General ruby development
25
+ spec.add_development_dependency 'bundler', '~> 1.3'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+
28
+ # Testing support
29
+ spec.add_development_dependency 'rspec', '~> 3.4'
30
+
31
+ # Linting code and docs
32
+ spec.add_development_dependency 'rubocop', '~> 0.41'
33
+ spec.add_development_dependency 'yard', '~> 0.8'
34
+
35
+ # Makes testing easy via `bundle exec guard`
36
+ spec.add_development_dependency 'guard', '~> 2.14'
37
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
38
+
39
+ # If you want to work on older builds of ruby
40
+ spec.add_development_dependency 'listen', '3.0.7'
41
+
42
+ # This gives you the chance to run a REPL inside your tests
43
+ # via:
44
+ #
45
+ # require 'pry'
46
+ # binding.pry
47
+ #
48
+ # This will stop test execution and let you inspect the results
49
+ spec.add_development_dependency 'pry'
50
+ end
@@ -0,0 +1 @@
1
+ require 'ios_logs/gem_version'
@@ -0,0 +1,2 @@
1
+ require 'ios_logs/plugin'
2
+ require 'ios_logs/file_log'
@@ -0,0 +1,5 @@
1
+ # rubocop:disable Style/StructInheritance
2
+
3
+ module Danger
4
+ class FileLog < Struct.new(:file, :line); end
5
+ end
@@ -0,0 +1,3 @@
1
+ module IosLogs
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,176 @@
1
+ require 'git_diff_parser'
2
+
3
+ module Danger
4
+ # This is a danger plugin to detect any `NSLog`/`print` entries left in the code.
5
+ #
6
+ # @example Ensure, by warning, there are no `NSLog`/`print` entries left in the modified code
7
+ #
8
+ # ios_logs.check
9
+ #
10
+ # @example Ensure, by fail, there are no `NSLog`/`print` entries left in the modified code
11
+ #
12
+ # ios_logs.check :fail
13
+ #
14
+ # @example Ensure, there are no `print` left in the modified code. Ignore `NSLog`
15
+ #
16
+ # ios_logs.nslog = false
17
+ # ios_logs.check
18
+ #
19
+ # @see Bartosz Janda/danger-ios_logs
20
+ # @tags ios, logs, print, nslog, swift
21
+ #
22
+ class DangerIosLogs < Plugin
23
+ NSLOG_REGEXP = /\s+NSLog\s*\(/
24
+ PRINT_REGEXP = /\s+print\s*\(/
25
+
26
+ NSLOG_MESSAGE = 'There remain `NSLog` in the modified code.'.freeze
27
+ PRINT_MESSAGE = 'There remain `print` in the modified code.'.freeze
28
+
29
+ #
30
+ # Notify usage of `NSLog`. `true` by default
31
+ #
32
+ # @return [Bool]
33
+ attr_accessor :nslog
34
+
35
+ #
36
+ # Notify usage of `print`. `true` by default
37
+ #
38
+ # @return [Bool]
39
+ attr_accessor :print
40
+
41
+ #
42
+ # List of `print` in changeset
43
+ #
44
+ # @return [Array<FileLog>] List of `print`
45
+ attr_accessor :prints
46
+
47
+ #
48
+ # List of `NSLog` in changeset
49
+ #
50
+ # @return [Array<FileLog>] List of `NSLog`
51
+ attr_accessor :nslogs
52
+
53
+ #
54
+ # Combined list of both `NSLog` and `print`
55
+ #
56
+ # @return [Array<FileLog>] List of `NSLog` and `print`
57
+ attr_accessor :logs
58
+
59
+ #
60
+ # Initialize plugin
61
+ # @param dangerfile [Dangerfile] Dangerfile used to initialize plugin
62
+ #
63
+ # @return [DangerIosLogs] Initialized DangerIosLogs plugin
64
+ def initialize(dangerfile)
65
+ super
66
+ @print = true
67
+ @nslog = true
68
+ @nslogs = []
69
+ @prints = []
70
+ end
71
+
72
+ #
73
+ # Combined list of both NSLog and print
74
+ #
75
+ # @return [Array<FileLog>] List of `NSLog` and `print`
76
+ def logs
77
+ prints + nslogs
78
+ end
79
+
80
+ #
81
+ # Checks if in the changed code `NSLog` or `print` are used.
82
+ # @param method = :warn [Symbol] Used method to indicate log method usage.
83
+ # By default `:warn`. Possible values: `:message`, `:warn`, `:fail`
84
+ #
85
+ # @return [Void]
86
+ def check(method = :warn)
87
+ raise 'Unsupported method' unless [:message, :warn, :fail].include?(method)
88
+ @nslogs = []
89
+ @prints = []
90
+
91
+ check_files files_of_interest
92
+
93
+ print_logs method
94
+ end
95
+
96
+ private
97
+
98
+ #
99
+ # Checks if in the files `NSLog` or `print` are used.
100
+ # @param files [Array<String>] List of interested / modified files to check.
101
+ #
102
+ # @return [Void]
103
+ def check_files(files)
104
+ files.each { |file| check_file(file) if file.is_a? String }
105
+ end
106
+
107
+ #
108
+ # List of interested files.
109
+ #
110
+ # @return [Array<String>] List of interested / modified files to check.
111
+ def files_of_interest
112
+ git.modified_files + git.added_files
113
+ end
114
+
115
+ #
116
+ # Checks if in the file `NSLog` or `print` are used.
117
+ # @param file [String] Modified file to check.
118
+ #
119
+ # @return [Void]
120
+ def check_file(file)
121
+ changed_lines(file).each do |line|
122
+ check_line(file, line)
123
+ end
124
+ end
125
+
126
+ #
127
+ # Returns changed lines in modified file.
128
+ # @param file [String] Path to modified files.
129
+ #
130
+ # @return [Array<GitDiffParser::Line>] Modified lines
131
+ def changed_lines(file)
132
+ diff = git.diff_for_file(file)
133
+ GitDiffParser::Patch.new(diff.patch).changed_lines
134
+ end
135
+
136
+ #
137
+ # Check line if contains any `NSLog` or `print`
138
+ # @param file [String] Path to file
139
+ # @param line [GitDiffParser::Line] Line number
140
+ #
141
+ # @return [Void]
142
+ def check_line(file, line)
143
+ prints << Danger::FileLog.new(file, line.number) if @print && !line.content.match(PRINT_REGEXP).nil?
144
+ nslogs << Danger::FileLog.new(file, line.number) if @nslog && !line.content.match(NSLOG_REGEXP).nil?
145
+ end
146
+
147
+ #
148
+ # Print logs
149
+ # @param method [Symbol] Method to indicate usage
150
+ #
151
+ # @return [Void]
152
+ def print_logs(method)
153
+ print_log_for(@prints, PRINT_MESSAGE, method)
154
+ print_log_for(@nslogs, NSLOG_MESSAGE, method)
155
+ end
156
+
157
+ #
158
+ # Print logs for given logs set and message
159
+ # @param logs [Array<FileLog>] List of `NSLog` or `print`
160
+ # @param message [String] Message to print
161
+ # @param method [Symbol] Method to indicate usage
162
+ #
163
+ # @return [Void]
164
+ def print_log_for(logs, message, method)
165
+ logs.each do |log|
166
+ public_send(
167
+ method,
168
+ message,
169
+ sticky: false,
170
+ file: log.file,
171
+ line: log.line
172
+ )
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,130 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+ require 'shared_example_groups/files_in_changeset'
3
+ require 'shared_example_groups/files_not_in_changeset'
4
+ require 'shared_example_groups/logs_in_dockerfile'
5
+
6
+ # rubocop:disable Metrics/BlockLength
7
+
8
+ module Danger
9
+ describe Danger::DangerIosLogs do
10
+ it 'should be a plugin' do
11
+ expect(described_class).to be < Danger::Plugin
12
+ end
13
+
14
+ context 'with Dangerfile' do
15
+ before do
16
+ @dangerfile = testing_dangerfile
17
+ @ios_logs = @dangerfile.ios_logs
18
+ end
19
+
20
+ context 'changed files containing newly introduced logs' do
21
+ before do
22
+ patch = <<PATCH
23
+ + NSLog("Some log")
24
+ + func foo() {
25
+ + }
26
+ + print("Some other log")
27
+ PATCH
28
+
29
+ modified = Git::Diff::DiffFile.new(
30
+ 'base',
31
+ path: 'some/file.rb',
32
+ patch: patch
33
+ )
34
+ added = Git::Diff::DiffFile.new(
35
+ 'base',
36
+ path: 'another/stuff.rb',
37
+ patch: '+ print(\"More logs\")'
38
+ )
39
+
40
+ allow(@dangerfile.git).to receive(:diff_for_file).with('some/file.rb').and_return(modified)
41
+ allow(@dangerfile.git).to receive(:diff_for_file).with('another/stuff.rb').and_return(added)
42
+ allow(@dangerfile.git).to receive(:modified_files).and_return(['some/file.rb'])
43
+ allow(@dangerfile.git).to receive(:added_files).and_return(['another/stuff.rb'])
44
+ end
45
+
46
+ some_file_0th_line = Danger::FileLog.new('some/file.rb', 0)
47
+ some_file_3rd_line = Danger::FileLog.new('some/file.rb', 3)
48
+ another_stuff = Danger::FileLog.new('another/stuff.rb', 0)
49
+
50
+ context 'warns when files in the changeset' do
51
+ before do
52
+ @ios_logs.check
53
+ end
54
+
55
+ it_behaves_like 'files in changeset' do
56
+ let(:log_method) { warnings }
57
+ end
58
+ end
59
+
60
+ context 'fails when files in the changeset' do
61
+ before do
62
+ @ios_logs.check :fail
63
+ end
64
+
65
+ it_behaves_like 'files in changeset' do
66
+ let(:log_method) { failures }
67
+ end
68
+ end
69
+
70
+ context 'expose logs to the dangerfile' do
71
+ before do
72
+ @ios_logs.check
73
+ end
74
+
75
+ it_behaves_like 'logs in dockerfile', [some_file_3rd_line, another_stuff] do
76
+ let(:logs) { @ios_logs.prints }
77
+ end
78
+
79
+ it_behaves_like 'logs in dockerfile', [some_file_0th_line] do
80
+ let(:logs) { @ios_logs.nslogs }
81
+ end
82
+
83
+ it_behaves_like 'logs in dockerfile', [some_file_3rd_line, another_stuff, some_file_0th_line] do
84
+ let(:logs) { @ios_logs.logs }
85
+ end
86
+ end
87
+ end
88
+
89
+ context 'changed files not containing a NSLog nor print' do
90
+ before do
91
+ modified = Git::Diff::DiffFile.new(
92
+ 'base',
93
+ path: 'some/file.rb',
94
+ patch: '+ an added line'
95
+ )
96
+ allow(@dangerfile.git).to receive(:diff_for_file).with('some/file.rb').and_return(modified)
97
+ allow(@dangerfile.git).to receive(:modified_files).and_return(['some/file.rb'])
98
+ allow(@dangerfile.git).to receive(:added_files).and_return([])
99
+
100
+ @ios_logs.check
101
+ end
102
+
103
+ it_behaves_like 'files not in changeset'
104
+ end
105
+
106
+ context 'no files are in changeset' do
107
+ before do
108
+ allow(@dangerfile.git).to receive(:modified_files).and_return([])
109
+ allow(@dangerfile.git).to receive(:added_files).and_return([])
110
+
111
+ @ios_logs.check
112
+ end
113
+
114
+ it_behaves_like 'files not in changeset'
115
+ end
116
+
117
+ it 'does not raise when git returns nil' do
118
+ invalid = [nil, 0, false]
119
+ allow(@dangerfile.git).to receive(:modified_files).and_return(invalid)
120
+ allow(@dangerfile.git).to receive(:added_files).and_return(invalid)
121
+
122
+ expect { @ios_logs.check }.to_not raise_error
123
+ end
124
+
125
+ it 'raise if used wrong method' do
126
+ expect { @ios_logs.check(:wrong_method) }.to raise_error('Unsupported method')
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,17 @@
1
+ shared_examples_for 'files in changeset' do
2
+ it 'should have three logs' do
3
+ expect(log_method.length).to eq(3)
4
+ end
5
+
6
+ it 'has `print` log in first log element' do
7
+ expect(log_method[0]).to eq('There remain `print` in the modified code.')
8
+ end
9
+
10
+ it 'has `print` log in second log element' do
11
+ expect(log_method[1]).to eq('There remain `print` in the modified code.')
12
+ end
13
+
14
+ it 'has `NSLog` log in third log element' do
15
+ expect(log_method[2]).to eq('There remain `NSLog` in the modified code.')
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ shared_examples_for 'files not in changeset' do
2
+ it 'should have no message' do
3
+ expect(messages).to be_empty
4
+ end
5
+
6
+ it 'should have no warnings' do
7
+ expect(warnings).to be_empty
8
+ end
9
+
10
+ it 'should have no failures' do
11
+ expect(failures).to be_empty
12
+ end
13
+
14
+ it 'should have no markdowns' do
15
+ expect(markdowns).to be_empty
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ shared_examples_for 'logs in dockerfile' do |log_files|
2
+ it "should have #{log_files.count} logs" do
3
+ expect(logs.length).to eq(log_files.count)
4
+ end
5
+
6
+ log_files.each_index do |index|
7
+ log_file = log_files[index]
8
+ it "should have log in #{log_file.file} at $#{log_file.line}" do
9
+ expect(logs[index]).to eq(log_file)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,75 @@
1
+ require 'pathname'
2
+ ROOT = Pathname.new(File.expand_path('../../', __FILE__))
3
+ $LOAD_PATH.unshift((ROOT + 'lib').to_s)
4
+ $LOAD_PATH.unshift((ROOT + 'spec').to_s)
5
+
6
+ require 'bundler/setup'
7
+ require 'pry'
8
+
9
+ require 'rspec'
10
+ require 'danger'
11
+
12
+ # Use coloured output, it's the best.
13
+ RSpec.configure do |config|
14
+ config.filter_gems_from_backtrace 'bundler'
15
+ config.color = true
16
+ config.tty = true
17
+ end
18
+
19
+ require 'danger_plugin'
20
+
21
+ # These functions are a subset of https://github.com/danger/danger/blob/master/spec/spec_helper.rb
22
+ # If you are expanding these files, see if it's already been done ^.
23
+
24
+ # A silent version of the user interface,
25
+ # it comes with an extra function `.string` which will
26
+ # strip all ANSI colours from the string.
27
+
28
+ # rubocop:disable Lint/NestedMethodDefinition
29
+ def testing_ui
30
+ @output = StringIO.new
31
+ def @output.winsize
32
+ [20, 9999]
33
+ end
34
+
35
+ cork = Cork::Board.new(out: @output)
36
+ def cork.string
37
+ out.string.gsub(/\e\[([;\d]+)?m/, '')
38
+ end
39
+ cork
40
+ end
41
+ # rubocop:enable Lint/NestedMethodDefinition
42
+
43
+ # Example environment (ENV) that would come from
44
+ # running a PR on TravisCI
45
+ def testing_env
46
+ {
47
+ 'HAS_JOSH_K_SEAL_OF_APPROVAL' => 'true',
48
+ 'TRAVIS_PULL_REQUEST' => '800',
49
+ 'TRAVIS_REPO_SLUG' => 'artsy/eigen',
50
+ 'TRAVIS_COMMIT_RANGE' => '759adcbd0d8f...13c4dc8bb61d',
51
+ 'DANGER_GITHUB_API_TOKEN' => '123sbdq54erfsd3422gdfio'
52
+ }
53
+ end
54
+
55
+ # A stubbed out Dangerfile for use in tests
56
+ def testing_dangerfile
57
+ env = Danger::EnvironmentManager.new(testing_env)
58
+ Danger::Dangerfile.new(env, testing_ui)
59
+ end
60
+
61
+ def messages
62
+ @dangerfile.status_report[:messages]
63
+ end
64
+
65
+ def failures
66
+ @dangerfile.status_report[:errors]
67
+ end
68
+
69
+ def warnings
70
+ @dangerfile.status_report[:warnings]
71
+ end
72
+
73
+ def markdowns
74
+ @dangerfile.status_report[:markdowns].map(&:message)
75
+ end
metadata ADDED
@@ -0,0 +1,225 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: danger-ios_logs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Bartosz Janda
8
+ - Joanna Bednarz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-02-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: danger-plugin-api
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: git_diff_parser
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 2.3.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 2.3.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: bundler
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.3'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '10.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '10.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '3.4'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '3.4'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rubocop
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '0.41'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.41'
98
+ - !ruby/object:Gem::Dependency
99
+ name: yard
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '0.8'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.8'
112
+ - !ruby/object:Gem::Dependency
113
+ name: guard
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '2.14'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '2.14'
126
+ - !ruby/object:Gem::Dependency
127
+ name: guard-rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '4.7'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '4.7'
140
+ - !ruby/object:Gem::Dependency
141
+ name: listen
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - '='
145
+ - !ruby/object:Gem::Version
146
+ version: 3.0.7
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '='
152
+ - !ruby/object:Gem::Version
153
+ version: 3.0.7
154
+ - !ruby/object:Gem::Dependency
155
+ name: pry
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ description: Danger plugin to detect any NSLog/print entries left in the code
169
+ email:
170
+ - bjanda@pgs-soft.com
171
+ - jbednarz@pgs-soft.com
172
+ executables: []
173
+ extensions: []
174
+ extra_rdoc_files: []
175
+ files:
176
+ - ".gitignore"
177
+ - ".rubocop.yml"
178
+ - ".travis.yml"
179
+ - Gemfile
180
+ - Gemfile.lock
181
+ - Guardfile
182
+ - LICENSE
183
+ - README.md
184
+ - Rakefile
185
+ - danger-ios_logs.gemspec
186
+ - lib/danger_ios_logs.rb
187
+ - lib/danger_plugin.rb
188
+ - lib/ios_logs/file_log.rb
189
+ - lib/ios_logs/gem_version.rb
190
+ - lib/ios_logs/plugin.rb
191
+ - spec/ios_logs_spec.rb
192
+ - spec/shared_example_groups/files_in_changeset.rb
193
+ - spec/shared_example_groups/files_not_in_changeset.rb
194
+ - spec/shared_example_groups/logs_in_dockerfile.rb
195
+ - spec/spec_helper.rb
196
+ homepage: https://github.com/PGSSoft/danger-ios_logs
197
+ licenses:
198
+ - MIT
199
+ metadata: {}
200
+ post_install_message:
201
+ rdoc_options: []
202
+ require_paths:
203
+ - lib
204
+ required_ruby_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ requirements: []
215
+ rubyforge_project:
216
+ rubygems_version: 2.6.8
217
+ signing_key:
218
+ specification_version: 4
219
+ summary: Danger plugin to detect any NSLog/print entries left in the code
220
+ test_files:
221
+ - spec/ios_logs_spec.rb
222
+ - spec/shared_example_groups/files_in_changeset.rb
223
+ - spec/shared_example_groups/files_not_in_changeset.rb
224
+ - spec/shared_example_groups/logs_in_dockerfile.rb
225
+ - spec/spec_helper.rb