attractor 1.2.0 → 2.0.4
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/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
|