attractor 1.2.0 → 2.0.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 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