attractor 1.2.0 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +153 -69
- data/Rakefile +0 -3
- data/app/assets/javascripts/index.pack.js +1 -1
- data/app/assets/stylesheets/main.css +1 -1
- data/attractor.gemspec +2 -0
- data/bin/standardize +4 -0
- data/bin/test +6 -0
- data/lib/attractor.rb +20 -23
- data/lib/attractor/cli.rb +8 -0
- data/lib/attractor/gem_names.rb +18 -0
- data/lib/attractor/registry_entry.rb +12 -0
- data/lib/attractor/reporters/base_reporter.rb +10 -1
- data/lib/attractor/reporters/html_reporter.rb +1 -2
- data/lib/attractor/reporters/sinatra_reporter.rb +2 -8
- data/lib/attractor/suggester.rb +2 -0
- data/lib/attractor/version.rb +1 -1
- data/package-lock.json +9 -11
- metadata +38 -10
- data/lib/attractor/calculators/js_calculator.rb +0 -18
- data/lib/attractor/calculators/ruby_calculator.rb +0 -22
- data/lib/attractor/detectors/js_detector.rb +0 -11
- data/lib/attractor/detectors/ruby_detector.rb +0 -11
data/lib/attractor/cli.rb
CHANGED
@@ -17,6 +17,14 @@ module Attractor
|
|
17
17
|
[:no_open_browser, type: :boolean],
|
18
18
|
[:ci, type: :boolean]]
|
19
19
|
|
20
|
+
desc "version", "Prints Attractor's version information"
|
21
|
+
map %w(-v --version) => :version
|
22
|
+
def version
|
23
|
+
puts "Attractor version #{Attractor::VERSION}"
|
24
|
+
rescue RuntimeError => e
|
25
|
+
puts "Runtime error: #{e.message}"
|
26
|
+
end
|
27
|
+
|
20
28
|
desc 'calc', 'Calculates churn and complexity for all ruby files in current directory'
|
21
29
|
shared_options.each do |shared_option|
|
22
30
|
option(*shared_option)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Attractor
|
2
|
+
# from https://github.com/prontolabs/pronto/blob/master/lib/pronto/gem_names.rb
|
3
|
+
class GemNames
|
4
|
+
def to_a
|
5
|
+
gems.map { |gem| gem.name.sub(/^attractor-/, '') }.uniq.sort
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def gems
|
11
|
+
Gem::Specification.find_all.select do |gem|
|
12
|
+
gem.name =~ /^attractor-/
|
13
|
+
end.reject do |gem|
|
14
|
+
gem.name =~ /attractor-rails/
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Attractor
|
2
|
+
class RegistryEntry
|
3
|
+
attr_reader :type, :detector_class, :calculator_class
|
4
|
+
|
5
|
+
def initialize(type:, detector_class:, calculator_class:)
|
6
|
+
@type = type
|
7
|
+
@detector_class = detector_class
|
8
|
+
@calculator_class = calculator_class
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'descriptive_statistics/safe'
|
4
4
|
require 'fileutils'
|
5
|
+
require 'forwardable'
|
5
6
|
require 'launchy'
|
6
7
|
require 'tilt'
|
7
8
|
|
@@ -27,7 +28,8 @@ module Attractor
|
|
27
28
|
raise 'There was a problem gathering churn changes'
|
28
29
|
end
|
29
30
|
|
30
|
-
def suggestions(quantile)
|
31
|
+
def suggestions(quantile:, type: 'rb')
|
32
|
+
@suggester.values = values(type: type)
|
31
33
|
@suggestions = @suggester.suggest(quantile)
|
32
34
|
@suggestions
|
33
35
|
end
|
@@ -40,5 +42,12 @@ module Attractor
|
|
40
42
|
def render
|
41
43
|
'Attractor'
|
42
44
|
end
|
45
|
+
|
46
|
+
def values(type: 'rb')
|
47
|
+
@values = @calculators[type].calculate
|
48
|
+
@values
|
49
|
+
rescue NoMethodError => e
|
50
|
+
puts "No calculator for type #{type}"
|
51
|
+
end
|
43
52
|
end
|
44
53
|
end
|
@@ -22,8 +22,7 @@ module Attractor
|
|
22
22
|
if @calculators.size > 1
|
23
23
|
@calculators.each do |calc|
|
24
24
|
@short_type = calc.first
|
25
|
-
|
26
|
-
suggester = Suggester.new(values)
|
25
|
+
suggester = Suggester.new(values(type: @short_type))
|
27
26
|
@suggestions = suggester.suggest
|
28
27
|
|
29
28
|
File.open("./attractor_output/javascripts/index.#{@short_type}.js", 'w') { |file| file.write(javascript) }
|
@@ -32,7 +32,8 @@ module Attractor
|
|
32
32
|
|
33
33
|
get '/suggestions' do
|
34
34
|
threshold = params[:t] || 95
|
35
|
-
|
35
|
+
type = params[:type] || 'rb'
|
36
|
+
@reporter.suggestions(quantile: threshold, type: type).to_json
|
36
37
|
end
|
37
38
|
|
38
39
|
error NoMethodError do
|
@@ -70,12 +71,5 @@ module Attractor
|
|
70
71
|
|
71
72
|
Rack::Handler::WEBrick.run Rack::LiveReload.new(app), Port: 7890
|
72
73
|
end
|
73
|
-
|
74
|
-
def values(type: 'rb')
|
75
|
-
@values = @calculators[type].calculate
|
76
|
-
@values
|
77
|
-
rescue NoMethodError => e
|
78
|
-
puts "No calculator for type #{type}"
|
79
|
-
end
|
80
74
|
end
|
81
75
|
end
|
data/lib/attractor/suggester.rb
CHANGED
data/lib/attractor/version.rb
CHANGED
data/package-lock.json
CHANGED
@@ -1186,9 +1186,9 @@
|
|
1186
1186
|
"dev": true
|
1187
1187
|
},
|
1188
1188
|
"acorn": {
|
1189
|
-
"version": "
|
1190
|
-
"resolved": "https://registry.npmjs.org/acorn/-/acorn-
|
1191
|
-
"integrity": "sha512
|
1189
|
+
"version": "7.1.1",
|
1190
|
+
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
|
1191
|
+
"integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
|
1192
1192
|
"dev": true
|
1193
1193
|
},
|
1194
1194
|
"acorn-jsx": {
|
@@ -2833,14 +2833,6 @@
|
|
2833
2833
|
"acorn": "^7.0.0",
|
2834
2834
|
"acorn-jsx": "^5.0.2",
|
2835
2835
|
"eslint-visitor-keys": "^1.1.0"
|
2836
|
-
},
|
2837
|
-
"dependencies": {
|
2838
|
-
"acorn": {
|
2839
|
-
"version": "7.1.0",
|
2840
|
-
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
|
2841
|
-
"integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
|
2842
|
-
"dev": true
|
2843
|
-
}
|
2844
2836
|
}
|
2845
2837
|
},
|
2846
2838
|
"esprima": {
|
@@ -6731,6 +6723,12 @@
|
|
6731
6723
|
"webpack-sources": "^1.4.1"
|
6732
6724
|
},
|
6733
6725
|
"dependencies": {
|
6726
|
+
"acorn": {
|
6727
|
+
"version": "6.4.1",
|
6728
|
+
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
|
6729
|
+
"integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
|
6730
|
+
"dev": true
|
6731
|
+
},
|
6734
6732
|
"serialize-javascript": {
|
6735
6733
|
"version": "1.9.1",
|
6736
6734
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attractor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian Rubisch
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: churn
|
@@ -150,6 +150,34 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: attractor-javascript
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: attractor-ruby
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
182
|
name: autoprefixer-rails
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -351,17 +379,17 @@ files:
|
|
351
379
|
- attractor.gemspec
|
352
380
|
- bin/console
|
353
381
|
- bin/setup
|
382
|
+
- bin/standardize
|
383
|
+
- bin/test
|
354
384
|
- dist/calculator.bundle.js
|
355
385
|
- exe/attractor
|
356
386
|
- lib/attractor.rb
|
357
387
|
- lib/attractor/calculators/base_calculator.rb
|
358
|
-
- lib/attractor/calculators/js_calculator.rb
|
359
|
-
- lib/attractor/calculators/ruby_calculator.rb
|
360
388
|
- lib/attractor/cli.rb
|
361
389
|
- lib/attractor/detectors/base_detector.rb
|
362
|
-
- lib/attractor/detectors/js_detector.rb
|
363
|
-
- lib/attractor/detectors/ruby_detector.rb
|
364
390
|
- lib/attractor/duration_parser.rb
|
391
|
+
- lib/attractor/gem_names.rb
|
392
|
+
- lib/attractor/registry_entry.rb
|
365
393
|
- lib/attractor/reporters/.keep
|
366
394
|
- lib/attractor/reporters/base_reporter.rb
|
367
395
|
- lib/attractor/reporters/console_reporter.rb
|
@@ -382,7 +410,7 @@ metadata:
|
|
382
410
|
source_code_uri: https://github.com/julianrubisch/attractor
|
383
411
|
bug_tracker_uri: https://github.com/julianrubisch/attractor/issues
|
384
412
|
changelog_uri: https://github.com/julianrubisch/attractor/CHANGELOG.md
|
385
|
-
post_install_message:
|
413
|
+
post_install_message:
|
386
414
|
rdoc_options: []
|
387
415
|
require_paths:
|
388
416
|
- lib
|
@@ -397,8 +425,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
397
425
|
- !ruby/object:Gem::Version
|
398
426
|
version: '0'
|
399
427
|
requirements: []
|
400
|
-
rubygems_version: 3.
|
401
|
-
signing_key:
|
428
|
+
rubygems_version: 3.1.2
|
429
|
+
signing_key:
|
402
430
|
specification_version: 4
|
403
431
|
summary: Churn vs Complexity Chart Generator
|
404
432
|
test_files: []
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Attractor
|
4
|
-
class JsCalculator < BaseCalculator
|
5
|
-
def initialize(file_prefix: '', minimum_churn_count: 3, start_ago: 365 * 5)
|
6
|
-
super(file_prefix: file_prefix, file_extension: '(js|jsx)', minimum_churn_count: minimum_churn_count, start_ago: start_ago)
|
7
|
-
@type = "JavaScript"
|
8
|
-
end
|
9
|
-
|
10
|
-
def calculate
|
11
|
-
super do |change|
|
12
|
-
complexity, details = JSON.parse(`node #{__dir__}/../../../dist/calculator.bundle.js #{Dir.pwd}/#{change[:file_path]}`)
|
13
|
-
|
14
|
-
[complexity, details]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'flog'
|
4
|
-
|
5
|
-
module Attractor
|
6
|
-
class RubyCalculator < BaseCalculator
|
7
|
-
def initialize(file_prefix: '', minimum_churn_count: 3, start_ago: 365 * 5)
|
8
|
-
super(file_prefix: file_prefix, file_extension: 'rb', minimum_churn_count: minimum_churn_count, start_ago: start_ago)
|
9
|
-
@type = "Ruby"
|
10
|
-
end
|
11
|
-
|
12
|
-
def calculate
|
13
|
-
super do |change|
|
14
|
-
flogger = Flog.new(all: true)
|
15
|
-
flogger.flog(change[:file_path])
|
16
|
-
complexity = flogger.total_score
|
17
|
-
details = flogger.totals
|
18
|
-
[complexity, details]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|