face_control 0.6.0 → 0.7.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 +4 -4
- data/.rubocop.yml +3 -0
- data/.vexor.yml +8 -0
- data/README.md +3 -4
- data/Rakefile +9 -0
- data/TODO +1 -0
- data/exe/face-control +1 -33
- data/face_control.gemspec +6 -2
- data/lib/face_control.rb +3 -1
- data/lib/face_control/checker_runner.rb +28 -0
- data/lib/face_control/checkers.rb +2 -0
- data/lib/face_control/checkers/_example.rb +39 -0
- data/lib/face_control/checkers/coffeelint.rb +28 -0
- data/lib/face_control/{inputs/rubocop_json.rb → checkers/rubocop.rb} +23 -13
- data/lib/face_control/cli.rb +72 -0
- data/lib/face_control/comment.rb +4 -4
- data/lib/face_control/version.rb +1 -1
- data/lib/stash/pull_request.rb +4 -0
- data/lib/stash/pull_request/diff.rb +17 -0
- metadata +67 -12
- data/bin/bundler +0 -16
- data/bin/console +0 -14
- data/bin/face-control +0 -16
- data/bin/httparty +0 -16
- data/bin/rake +0 -16
- data/bin/setup +0 -7
- data/lib/face_control/inputs.rb +0 -2
- data/lib/face_control/inputs/coffeelint_raw.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a232c3cf9da606837421e0f388819373c6aa46b
|
4
|
+
data.tar.gz: 07bedda93cc95dba9c5ea6b716c1f2c5e894506a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54fe2769b81e249dc71c9aac26bb8311b4f522999a4d181af30322c30e0e6dedaa1e2f2fc869bb13421bde49df9877728e38a16fbe8e9d1370dbbbf1e2b65bad
|
7
|
+
data.tar.gz: d7511c518230fa2200e9ec6da57522fbc3c23e5f049ff8e4207350f1df8017e187d4074e71ab8680d332ab8a048f708ca20dff06cd3cdec830cb3b10d52dc5d8
|
data/.rubocop.yml
CHANGED
data/.vexor.yml
ADDED
data/README.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
[](https://ci.vexor.io/ui/projects/126da196-c8e6-46f0-8bc7-b5f8f4b49732/builds)
|
2
|
+
[](https://coveralls.io/github/vassilevsky/face_control)
|
3
|
+
|
1
4
|
# Face Control
|
2
5
|
|
3
6
|
Comment on added lines of pull requests in [Atlassian Stash][].
|
@@ -12,8 +15,6 @@ Inspired by [Hound][].
|
|
12
15
|
|
13
16
|
## Usage
|
14
17
|
|
15
|
-
rubocop -f json -o rubocop.json
|
16
|
-
coffeelint --reporter raw app/assets/javascripts > coffeelint_report.json
|
17
18
|
face-control <project> <repository> <pull_request_id>
|
18
19
|
|
19
20
|
It's natural to run this on a continuous integration server.
|
@@ -43,8 +44,6 @@ For example, here's a [Jenkins][] project setup:
|
|
43
44
|
gem install rubocop face_control
|
44
45
|
npm install -g coffeelint
|
45
46
|
|
46
|
-
rubocop -f json -o rubocop.json || true
|
47
|
-
coffeelint --reporter raw app/assets/javascripts > coffeelint_report.json || true
|
48
47
|
face-control <project> <repository> $PULL_REQUEST_ID
|
49
48
|
|
50
49
|
If you don't want to receive RuboCop comments with certain severity level,
|
data/Rakefile
CHANGED
data/TODO
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* Warn if RuboCop version is too old (cannot reliably determine if an offense can be corrected automatically)
|
data/exe/face-control
CHANGED
@@ -1,37 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'logger'
|
4
|
-
require 'docopt'
|
5
3
|
require 'face_control'
|
6
|
-
require 'stash'
|
7
4
|
|
8
|
-
|
9
|
-
USAGE = "#{File.dirname(__FILE__)}/../USAGE"
|
10
|
-
args = Docopt.docopt(File.read(USAGE))
|
11
|
-
|
12
|
-
project = args['<project>']
|
13
|
-
repository = args['<repository>']
|
14
|
-
pull_request_id = args['<pull_request_id>']
|
15
|
-
|
16
|
-
ignored_severities = []
|
17
|
-
if args['--skip-severity']
|
18
|
-
ignored_severities = args['--skip-severity'].split(',')
|
19
|
-
puts "Skipping RuboCop offenses with severities: #{ignored_severities.join(', ')}."
|
20
|
-
end
|
21
|
-
|
22
|
-
config = Stash::Config.new
|
23
|
-
server = Stash::Server.new(config.host, config.user, config.password, Logger.new(STDOUT))
|
24
|
-
repository = server.repository(project, repository)
|
25
|
-
pull_request = repository.pull_request(pull_request_id)
|
26
|
-
|
27
|
-
[
|
28
|
-
FaceControl::Inputs::RubocopJson.new(ignored_severities),
|
29
|
-
FaceControl::Inputs::CoffeeLintRaw.new
|
30
|
-
].each do |input|
|
31
|
-
input.comments.each do |comment|
|
32
|
-
pull_request.add_comment(comment.file, comment.line, comment.text)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
rescue Docopt::Exit => e
|
36
|
-
puts e.message
|
37
|
-
end
|
5
|
+
FaceControl::CLI.new.run
|
data/face_control.gemspec
CHANGED
@@ -12,9 +12,9 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.summary = 'Checks Atlassian Stash pull requests and comments on issues in added code'
|
13
13
|
spec.homepage = 'https://github.com/vassilevsky/face_control'
|
14
14
|
|
15
|
-
spec.files = `git ls-files -z`.split("\x0").reject{
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject{|f| f.match(%r{^(test|spec|features)/}) }
|
16
16
|
spec.bindir = 'exe'
|
17
|
-
spec.executables = spec.files.grep(%r{^exe/}){
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}){|f| File.basename(f) }
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
20
|
spec.add_runtime_dependency 'docopt'
|
@@ -23,4 +23,8 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.8'
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
+
spec.add_development_dependency 'minitest', '~> 5.8'
|
27
|
+
spec.add_development_dependency 'minitest-reporters', '~> 1.0'
|
28
|
+
spec.add_development_dependency 'webmock', '~> 1.21'
|
29
|
+
spec.add_development_dependency 'coveralls', '~> 0.8'
|
26
30
|
end
|
data/lib/face_control.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module FaceControl
|
2
|
+
class CheckerRunner
|
3
|
+
def initialize(checker_class, filenames = [], options = {})
|
4
|
+
@checker = checker_class.new
|
5
|
+
if @checker.respond_to?(:options=)
|
6
|
+
@checker.options = options
|
7
|
+
end
|
8
|
+
|
9
|
+
@filenames = filenames
|
10
|
+
end
|
11
|
+
|
12
|
+
def comments
|
13
|
+
return [] if relevant_filenames.empty?
|
14
|
+
|
15
|
+
@checker.parse(`#{@checker.command(relevant_filenames.join(' '))}`)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def relevant_filenames
|
21
|
+
@relevant_filenames ||= @checker.relevant_globs.map do |glob|
|
22
|
+
@filenames.select do |filename|
|
23
|
+
File.fnmatch?(glob, filename)
|
24
|
+
end
|
25
|
+
end.flatten.uniq
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'face_control/comment'
|
2
|
+
|
3
|
+
module FaceControl
|
4
|
+
module Checkers
|
5
|
+
class Example
|
6
|
+
# @optional
|
7
|
+
# Define only if you use @options in the following methods
|
8
|
+
attr_writer :options
|
9
|
+
|
10
|
+
# @return [Array<String>] Shell globs to filter only files relevant to this checker
|
11
|
+
# out of all files with added lines in the pull request
|
12
|
+
def relevant_globs
|
13
|
+
%w(bin/*)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param filenames [String] Files with added lines in the pull request
|
17
|
+
# only relevant to this checker (filtered by globs above)
|
18
|
+
# @return [String] Command line to check the files
|
19
|
+
def command(filenames)
|
20
|
+
"ls -l #{filenames}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param command_output [String] Stdout of the command above
|
24
|
+
# @return Array<FaceControl::Comment> Comments to post to the pull request
|
25
|
+
def parse(command_output)
|
26
|
+
command_output.split("\n").map do |line|
|
27
|
+
fields = line.split
|
28
|
+
|
29
|
+
mode = fields.first
|
30
|
+
file = fields.last
|
31
|
+
|
32
|
+
if mode != '-rwxr-xr-x'
|
33
|
+
Comment.new(file: file, line: 1, text: 'Invalid file mode')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'face_control/comment'
|
3
|
+
|
4
|
+
module FaceControl
|
5
|
+
module Checkers
|
6
|
+
class CoffeeLint
|
7
|
+
def relevant_globs
|
8
|
+
%w(*.coffee)
|
9
|
+
end
|
10
|
+
|
11
|
+
def command(filenames)
|
12
|
+
"coffeelint --reporter raw #{filenames}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse(command_output)
|
16
|
+
JSON.parse(command_output).map do |file, problems|
|
17
|
+
problems.map do |problem|
|
18
|
+
Comment.new(
|
19
|
+
file: file,
|
20
|
+
line: problem['lineNumber'],
|
21
|
+
text: "(#{problem['level']}) #{problem['message']}"
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,21 +1,31 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
require 'rubocop'
|
3
5
|
require 'face_control/comment'
|
4
6
|
|
5
7
|
module FaceControl
|
6
|
-
module
|
7
|
-
class
|
8
|
-
|
8
|
+
module Checkers
|
9
|
+
class RuboCop
|
10
|
+
attr_writer :options
|
9
11
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
12
|
+
def relevant_globs
|
13
|
+
%w(
|
14
|
+
*.rb
|
15
|
+
*.rake
|
16
|
+
Capfile
|
17
|
+
Gemfile
|
18
|
+
Rakefile
|
19
|
+
Vagrantfile
|
20
|
+
)
|
21
|
+
end
|
13
22
|
|
14
|
-
|
23
|
+
def command(filenames)
|
24
|
+
"rubocop --format json #{filenames}"
|
15
25
|
end
|
16
26
|
|
17
|
-
def
|
18
|
-
|
27
|
+
def parse(command_output)
|
28
|
+
JSON.parse(command_output)['files'].map do |file|
|
19
29
|
file['offenses'].reject do |offense|
|
20
30
|
ignored_severities.include?(offense['severity'])
|
21
31
|
end.map do |offense|
|
@@ -25,13 +35,13 @@ module FaceControl
|
|
25
35
|
text: text(offense, file)
|
26
36
|
)
|
27
37
|
end
|
28
|
-
end
|
38
|
+
end
|
29
39
|
end
|
30
40
|
|
31
41
|
private
|
32
42
|
|
33
|
-
def
|
34
|
-
|
43
|
+
def ignored_severities
|
44
|
+
@options.fetch(:ignored_severities, [])
|
35
45
|
end
|
36
46
|
|
37
47
|
def text(offense, file)
|
@@ -50,7 +60,7 @@ module FaceControl
|
|
50
60
|
|
51
61
|
def style_guide_url(offense)
|
52
62
|
cop_name = offense['cop_name']
|
53
|
-
cop_config = RuboCop::ConfigLoader.default_configuration[cop_name]
|
63
|
+
cop_config = ::RuboCop::ConfigLoader.default_configuration[cop_name]
|
54
64
|
cop_config['StyleGuide']
|
55
65
|
end
|
56
66
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'docopt'
|
3
|
+
require 'stash'
|
4
|
+
|
5
|
+
module FaceControl
|
6
|
+
class CLI
|
7
|
+
USAGE = File.read("#{File.dirname(__FILE__)}/../../USAGE")
|
8
|
+
|
9
|
+
def run
|
10
|
+
logger = Logger.new(STDOUT)
|
11
|
+
project, repository, pull_request_id, ignored_severities = arguments
|
12
|
+
pull_request = pull_request(project, repository, pull_request_id, logger)
|
13
|
+
|
14
|
+
logger.info('Running checkers...')
|
15
|
+
comments = check(pull_request, ignored_severities, logger)
|
16
|
+
return if comments.empty?
|
17
|
+
|
18
|
+
logger.info("Posting #{comments.size} comments...")
|
19
|
+
add_comments(pull_request, comments)
|
20
|
+
end
|
21
|
+
|
22
|
+
def check(pull_request, ignored_severities, logger)
|
23
|
+
unless ignored_severities.empty?
|
24
|
+
logger.info("Skipping RuboCop offenses with severities: #{ignored_severities.join(', ')}.")
|
25
|
+
end
|
26
|
+
|
27
|
+
filenames = pull_request.filenames_with_added_lines
|
28
|
+
|
29
|
+
checkers = [
|
30
|
+
FaceControl::CheckerRunner.new(FaceControl::Checkers::RuboCop, filenames, ignored_severities: ignored_severities),
|
31
|
+
FaceControl::CheckerRunner.new(FaceControl::Checkers::CoffeeLint, filenames)
|
32
|
+
]
|
33
|
+
|
34
|
+
checkers.map(&:comments).flatten
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_comments(pull_request, comments)
|
38
|
+
comments.each do |comment|
|
39
|
+
pull_request.add_comment(comment.file, comment.line, comment.text)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def arguments
|
46
|
+
args = Docopt.docopt(USAGE)
|
47
|
+
|
48
|
+
project = args['<project>']
|
49
|
+
repository = args['<repository>']
|
50
|
+
pull_request_id = args['<pull_request_id>']
|
51
|
+
|
52
|
+
ignored_severities = []
|
53
|
+
if args['--skip-severity']
|
54
|
+
ignored_severities = args['--skip-severity'].split(',')
|
55
|
+
end
|
56
|
+
|
57
|
+
[project, repository, pull_request_id, ignored_severities]
|
58
|
+
rescue Docopt::Exit => e
|
59
|
+
puts e.message
|
60
|
+
exit(1)
|
61
|
+
end
|
62
|
+
|
63
|
+
def pull_request(project, repository, pull_request_id, logger)
|
64
|
+
@pull_request ||= begin
|
65
|
+
config = Stash::Config.new
|
66
|
+
server = Stash::Server.new(config.host, config.user, config.password, logger)
|
67
|
+
repository = server.repository(project, repository)
|
68
|
+
repository.pull_request(pull_request_id)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/face_control/comment.rb
CHANGED
@@ -2,10 +2,10 @@ module FaceControl
|
|
2
2
|
class Comment
|
3
3
|
attr_accessor :file, :line, :text
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
self.file = file
|
7
|
-
self.line = line
|
8
|
-
self.text = text
|
5
|
+
def initialize(options)
|
6
|
+
self.file = options.fetch(:file)
|
7
|
+
self.line = options.fetch(:line)
|
8
|
+
self.text = options.fetch(:text)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/face_control/version.rb
CHANGED
data/lib/stash/pull_request.rb
CHANGED
@@ -5,12 +5,29 @@ module Stash
|
|
5
5
|
@diff = diff
|
6
6
|
end
|
7
7
|
|
8
|
+
def filenames_with_added_lines
|
9
|
+
diffs_with_added_lines.map do |diff|
|
10
|
+
diff['destination']['toString']
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
8
14
|
def added_line?(file, line)
|
9
15
|
added_lines(file).include?(line)
|
10
16
|
end
|
11
17
|
|
12
18
|
private
|
13
19
|
|
20
|
+
def diffs_with_added_lines
|
21
|
+
@diff['diffs'].select do |diff|
|
22
|
+
diff['destination'] &&
|
23
|
+
diff['hunks'].find do |hunk|
|
24
|
+
hunk['segments'].find do |segment|
|
25
|
+
segment['type'] == 'ADDED'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
14
31
|
def added_lines(file)
|
15
32
|
@added_lines ||= {}
|
16
33
|
@added_lines[file] ||= begin
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: face_control
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Vassilevsky
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docopt
|
@@ -80,6 +80,62 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '5.8'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '5.8'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest-reporters
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.21'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.21'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: coveralls
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.8'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.8'
|
83
139
|
description:
|
84
140
|
email:
|
85
141
|
- vassilevsky@gmail.com
|
@@ -90,25 +146,24 @@ extra_rdoc_files: []
|
|
90
146
|
files:
|
91
147
|
- ".gitignore"
|
92
148
|
- ".rubocop.yml"
|
149
|
+
- ".vexor.yml"
|
93
150
|
- CODE_OF_CONDUCT.md
|
94
151
|
- Gemfile
|
95
152
|
- LICENSE
|
96
153
|
- README.md
|
97
154
|
- Rakefile
|
155
|
+
- TODO
|
98
156
|
- USAGE
|
99
|
-
- bin/bundler
|
100
|
-
- bin/console
|
101
|
-
- bin/face-control
|
102
|
-
- bin/httparty
|
103
|
-
- bin/rake
|
104
|
-
- bin/setup
|
105
157
|
- exe/face-control
|
106
158
|
- face_control.gemspec
|
107
159
|
- lib/face_control.rb
|
160
|
+
- lib/face_control/checker_runner.rb
|
161
|
+
- lib/face_control/checkers.rb
|
162
|
+
- lib/face_control/checkers/_example.rb
|
163
|
+
- lib/face_control/checkers/coffeelint.rb
|
164
|
+
- lib/face_control/checkers/rubocop.rb
|
165
|
+
- lib/face_control/cli.rb
|
108
166
|
- lib/face_control/comment.rb
|
109
|
-
- lib/face_control/inputs.rb
|
110
|
-
- lib/face_control/inputs/coffeelint_raw.rb
|
111
|
-
- lib/face_control/inputs/rubocop_json.rb
|
112
167
|
- lib/face_control/version.rb
|
113
168
|
- lib/stash.rb
|
114
169
|
- lib/stash/config.rb
|
@@ -135,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
190
|
version: '0'
|
136
191
|
requirements: []
|
137
192
|
rubyforge_project:
|
138
|
-
rubygems_version: 2.
|
193
|
+
rubygems_version: 2.4.5
|
139
194
|
signing_key:
|
140
195
|
specification_version: 4
|
141
196
|
summary: Checks Atlassian Stash pull requests and comments on issues in added code
|
data/bin/bundler
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'bundler' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('bundler', 'bundler')
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'face_control'
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require 'irb'
|
14
|
-
IRB.start
|
data/bin/face-control
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'face-control' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('face_control', 'face-control')
|
data/bin/httparty
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'httparty' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('httparty', 'httparty')
|
data/bin/rake
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'rake' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('rake', 'rake')
|
data/bin/setup
DELETED
data/lib/face_control/inputs.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'face_control/comment'
|
3
|
-
|
4
|
-
module FaceControl
|
5
|
-
module Inputs
|
6
|
-
class CoffeeLintRaw
|
7
|
-
attr_accessor :filename
|
8
|
-
|
9
|
-
def initialize(filename = 'coffeelint_report.json')
|
10
|
-
self.filename = filename
|
11
|
-
|
12
|
-
fail "#{filename} does not exist" unless File.exist?(filename)
|
13
|
-
end
|
14
|
-
|
15
|
-
def comments
|
16
|
-
report.map do |file, problems|
|
17
|
-
problems.map do |problem|
|
18
|
-
Comment.new(
|
19
|
-
file: file,
|
20
|
-
line: problem['lineNumber'],
|
21
|
-
text: "(#{problem['level']}) #{problem['message']}"
|
22
|
-
)
|
23
|
-
end
|
24
|
-
end.flatten
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def report
|
30
|
-
JSON.parse(File.read(filename))
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|