attractor 1.2.0 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- @values = calc.last.calculate
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
- @reporter.suggestions(threshold).to_json
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
@@ -3,6 +3,8 @@
3
3
  module Attractor
4
4
  # makes suggestions for refactorings
5
5
  class Suggester
6
+ attr_accessor :values
7
+
6
8
  def initialize(values)
7
9
  @values = values || []
8
10
  end
@@ -1,3 +1,3 @@
1
1
  module Attractor
2
- VERSION = "1.2.0"
2
+ VERSION = "2.0.4"
3
3
  end
@@ -1186,9 +1186,9 @@
1186
1186
  "dev": true
1187
1187
  },
1188
1188
  "acorn": {
1189
- "version": "6.3.0",
1190
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
1191
- "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
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: 1.2.0
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-01-15 00:00:00.000000000 Z
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.0.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
@@ -1,11 +0,0 @@
1
- module Attractor
2
- class JsDetector < BaseDetector
3
- def detect
4
- package_json_exists?
5
- end
6
-
7
- def package_json_exists?
8
- File.exist? File.expand_path("package.json", Dir.pwd)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Attractor
2
- class RubyDetector < BaseDetector
3
- def detect
4
- gemfile_exists?
5
- end
6
-
7
- def gemfile_exists?
8
- File.exist? File.expand_path("Gemfile", Dir.pwd)
9
- end
10
- end
11
- end