attractor 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 118ead51f4c2d1b543e923e93a0080d56e80cc814bfa0745b9d9400baef01c12
4
- data.tar.gz: 4ed35b0269e8a5b1f5d81485283102a8bfd5e07effd82f7ad9684747fc14d409
3
+ metadata.gz: 699413053fc8137c150694aa57bc7f4b4ed4c51c2f65d7e3af4549d15d33d274
4
+ data.tar.gz: f630cd630d43770d34fd1afbffbb717deef4c76942f38917bdf811d8082f33f2
5
5
  SHA512:
6
- metadata.gz: 6f51eb3d48a28ee8d0db31fff0d1228ea0945db99445cf55da0cb8f5b9cbe791554441480160d847c5e9508bda85875dcac7d8c83f703c7ddaf7953919275df3
7
- data.tar.gz: 882c38655cd2b65c6d4732d2d7907a69887eff1c6ff1c6804df8336861e72becf1518d161602a1dfe6b6bd108f4c95b88b582bed615ba8f989f3b780789d1452
6
+ metadata.gz: 0d52ffc4e2b05bcc970cc6f9555baeebbee6dc9dde9de83cb0ce15a0a9e8359a5f7d204d3afe5001110d9936c988f0349703fca5d666577be38c3473e3e6cef2
7
+ data.tar.gz: '088f7c37f1e2769f15c439a295b3e2bb12ee6c1c1b6c2e2ee34dd8920d3a65e9a994509a23adb50c12da5fbb07ec07f94afd5b2d34dc2e6b7709ba65ee746e5b'
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## RELEASE 2.0.0
2
+
3
+ * BREAKING: Move to a plug-in architecture, see README
4
+
1
5
  ## RELEASE 1.2.0
2
6
 
3
7
  * FEATURE: Backport React to static output
data/Rakefile CHANGED
@@ -29,7 +29,4 @@ task :assets do
29
29
 
30
30
  npm_output = `npm run build`
31
31
  puts npm_output
32
-
33
- npm_output = `cd src/javascript/calculator && npm run build`
34
- puts npm_output
35
32
  end
data/attractor.gemspec CHANGED
@@ -48,6 +48,8 @@ Gem::Specification.new do |spec|
48
48
  spec.add_dependency 'tilt'
49
49
 
50
50
  spec.add_development_dependency 'aruba'
51
+ spec.add_development_dependency 'attractor-javascript'
52
+ spec.add_development_dependency 'attractor-ruby'
51
53
  spec.add_development_dependency 'autoprefixer-rails'
52
54
  spec.add_development_dependency 'bootstrap', '~> 4.3.1'
53
55
  spec.add_development_dependency 'bundler', '~> 2.0'
data/lib/attractor.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'attractor/version'
4
+ require 'attractor/gem_names'
4
5
  require 'attractor/duration_parser'
5
6
  require 'attractor/calculators/base_calculator'
6
7
  require 'attractor/detectors/base_detector'
@@ -8,18 +9,6 @@ require 'attractor/reporters/base_reporter'
8
9
  require 'attractor/suggester'
9
10
  require 'attractor/watcher'
10
11
 
11
- Dir[File.join(__dir__, 'attractor', 'calculators', '*.rb')].each do |file|
12
- next if file.start_with?('base')
13
-
14
- require file
15
- end
16
-
17
- Dir[File.join(__dir__, 'attractor', 'detectors', '*.rb')].each do |file|
18
- next if file.start_with?('base')
19
-
20
- require file
21
- end
22
-
23
12
  Dir[File.join(__dir__, 'attractor', 'reporters', '*.rb')].each do |file|
24
13
  next if file.start_with?('base')
25
14
 
@@ -29,19 +18,27 @@ end
29
18
  module Attractor
30
19
  class Error < StandardError; end
31
20
 
21
+ @registry_entries = {}
22
+
23
+ def register(registry_entry)
24
+ @registry_entries[registry_entry.type] = registry_entry
25
+ end
26
+
32
27
  def calculators_for_type(type, **options)
33
- case type
34
- when 'js'
35
- { 'js' => JsCalculator.new(**options) }
36
- when 'rb'
37
- { 'rb' => RubyCalculator.new(**options) }
38
- else
39
- {}.tap do |hash|
40
- hash['rb'] = RubyCalculator.new(**options) if RubyDetector.new.detect
41
- hash['js'] = JsCalculator.new(**options) if JsDetector.new.detect
42
- end
43
- end
28
+ registry_entry_for_type = @registry_entries[type]
29
+
30
+ return { type => registry_entry_for_type.calculator_class.new(**options) } if type
31
+
32
+
33
+ Hash[@registry_entries.map do |type, entry|
34
+ [type, entry.calculator_class.new(**options)] if entry.detector_class.new.detect
35
+ end]
44
36
  end
45
37
 
46
38
  module_function :calculators_for_type
39
+ module_function :register
40
+ end
41
+
42
+ Attractor::GemNames.new.to_a.each do |gem_name|
43
+ require "attractor/#{gem_name}"
47
44
  end
@@ -0,0 +1,16 @@
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
14
+ end
15
+ end
16
+ 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
+
@@ -1,3 +1,3 @@
1
1
  module Attractor
2
- VERSION = "1.2.0"
2
+ VERSION = "2.0.0"
3
3
  end
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.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Rubisch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-15 00:00:00.000000000 Z
11
+ date: 2020-02-06 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
@@ -355,13 +383,11 @@ files:
355
383
  - exe/attractor
356
384
  - lib/attractor.rb
357
385
  - lib/attractor/calculators/base_calculator.rb
358
- - lib/attractor/calculators/js_calculator.rb
359
- - lib/attractor/calculators/ruby_calculator.rb
360
386
  - lib/attractor/cli.rb
361
387
  - lib/attractor/detectors/base_detector.rb
362
- - lib/attractor/detectors/js_detector.rb
363
- - lib/attractor/detectors/ruby_detector.rb
364
388
  - lib/attractor/duration_parser.rb
389
+ - lib/attractor/gem_names.rb
390
+ - lib/attractor/registry_entry.rb
365
391
  - lib/attractor/reporters/.keep
366
392
  - lib/attractor/reporters/base_reporter.rb
367
393
  - lib/attractor/reporters/console_reporter.rb
@@ -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