rubycritic 1.2.1 → 1.3.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
  SHA1:
3
- metadata.gz: b237439616d353d003180ab2ac29d4e7cf815f8e
4
- data.tar.gz: a965e2652ab60bbd525fa7b26e0ade5d48931aa2
3
+ metadata.gz: 88e1add4a91ef2551d93ccec55b2991033b7c2f0
4
+ data.tar.gz: 4d2b5928a03eff96fc1e5b97529e73e9538affa7
5
5
  SHA512:
6
- metadata.gz: ffe787925969ccb524082fffd0efed141dd2187145072f6aa3357f240df771a72d120f068ea32b77a57170195810bd0f532f8cb9fccd7183c81e63603fea0f20
7
- data.tar.gz: 1955b7fef42bdc712584fbc823c9d28cfb054cab67e2c2ffed861c120a9f48e18a1f45e4ad36d1f5228e1081f30bc0fd6132e3f73c8cbb606d7b98d0da12b6b5
6
+ metadata.gz: 5bd3e6a0658fbdc874d740a3efc1b1b2649d69224218017bef6071447653ab18796b0a86ceddf5fb3199b4904f00655bac7ec70ec4ab6c43b52681896a48c072
7
+ data.tar.gz: 449e90f3900e888dd4995135ca4d96a4da595b0d40a7e860d432d20eb358b1354c2ada9fce1a22a4b0a291247489a07d5eda42c75bf1acab2ea2e2238d434d06
@@ -1,3 +1,9 @@
1
+ # 1.3.0 2015-02-16
2
+
3
+ * [FEATURE] New CLI option `--deduplicate-symlinks` to deduplicate symlinks (by LeeXGreen)
4
+ * [CHANGE] Update to Reek 1.6.5 (from 1.6.3)
5
+ * [CHANGE] Remove ruby2ruby dependency
6
+
1
7
  # 1.2.1 / 2015-01-17
2
8
 
3
9
  * [FEATURE] Support Ruby 2.2
@@ -8,7 +14,7 @@
8
14
 
9
15
  * [FEATURE] Add CI mode that only analyses the last commit
10
16
  * [FEATURE] Add partial support for Mercurial
11
- * [FEATURE] Allow using Rubycritic programatically
17
+ * [FEATURE] Allow using RubyCritic programatically
12
18
  * [CHANGE] Update to Reek 1.6.0 (from 1.3.8)
13
19
 
14
20
  # 1.1.1 / 2014-07-29
data/README.md CHANGED
@@ -3,7 +3,7 @@ RubyCritic
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/rubycritic.svg)](http://badge.fury.io/rb/rubycritic)
5
5
  [![Build Status](https://travis-ci.org/whitesmith/rubycritic.svg?branch=master)](https://travis-ci.org/whitesmith/rubycritic)
6
- [![Code Climate](http://img.shields.io/codeclimate/github/whitesmith/rubycritic.svg)](https://codeclimate.com/github/whitesmith/rubycritic)
6
+ [![Code Climate](https://codeclimate.com/github/whitesmith/rubycritic/badges/gpa.svg)](https://codeclimate.com/github/whitesmith/rubycritic)
7
7
 
8
8
  <img src="http://i.imgur.com/66HACCD.png" alt="RubyCritic Icon" align="right" />
9
9
  RubyCritic is a gem that wraps around static analysis gems such as [Reek][1], [Flay][2] and [Flog][3] to provide a quality report of your Ruby code.
@@ -91,6 +91,7 @@ $ rubycritic --help
91
91
  | `-v/--version` | Displays the current version and exits |
92
92
  | `-p/--path` | Sets the output directory (tmp/rubycritic by default) |
93
93
  | `-m/--mode-ci` | Uses CI mode (faster, but only analyses last commit) |
94
+ | `--deduplicate-symlinks` | De-duplicate symlinks based on their final target |
94
95
 
95
96
  Alternative Usage Methods
96
97
  -------------------------
@@ -10,13 +10,13 @@ module Rubycritic
10
10
  Command::Version.new
11
11
  when :help
12
12
  require "rubycritic/commands/help"
13
- Command::Help.new(options)
13
+ Command::Help.new(options.help_text)
14
14
  when :ci
15
15
  require "rubycritic/commands/ci"
16
- Command::Ci.new(options_hash)
16
+ Command::Ci.new(options_hash[:paths])
17
17
  else
18
18
  require "rubycritic/commands/default"
19
- Command::Default.new(options_hash)
19
+ Command::Default.new(options_hash[:paths])
20
20
  end
21
21
  end
22
22
  end
@@ -8,6 +8,7 @@ module Rubycritic
8
8
  @parser = OptionParser.new
9
9
  end
10
10
 
11
+ # rubocop:disable Metrics/MethodLength
11
12
  def parse
12
13
  @parser.new do |opts|
13
14
  opts.banner = "Usage: rubycritic [options] [paths]"
@@ -20,6 +21,10 @@ module Rubycritic
20
21
  @mode = :ci
21
22
  end
22
23
 
24
+ opts.on("--deduplicate-symlinks", "De-duplicate symlinks based on their final target") do
25
+ @deduplicate_symlinks = true
26
+ end
27
+
23
28
  opts.on_tail("-v", "--version", "Show gem's version") do
24
29
  @mode = :version
25
30
  end
@@ -39,6 +44,7 @@ module Rubycritic
39
44
  {
40
45
  :mode => @mode,
41
46
  :root => @root,
47
+ :deduplicate_symlinks => @deduplicate_symlinks,
42
48
  :paths => paths
43
49
  }
44
50
  end
@@ -5,22 +5,21 @@ require "rubycritic/reporters/main"
5
5
  module Rubycritic
6
6
  module Command
7
7
  class Ci
8
- def initialize(options)
9
- @paths = options[:paths]
8
+ def initialize(paths)
9
+ @paths = paths
10
10
  Config.source_control_system = SourceControlSystem::Base.create
11
11
  end
12
12
 
13
13
  def execute
14
- critique(@paths)
15
- report
14
+ report(critique)
16
15
  end
17
16
 
18
- def critique(paths)
19
- @analysed_modules = AnalysersRunner.new(paths).run
17
+ def critique
18
+ AnalysersRunner.new(@paths).run
20
19
  end
21
20
 
22
- def report
23
- report_location = Reporter::Main.new(@analysed_modules).generate_report
21
+ def report(analysed_modules)
22
+ report_location = Reporter::Main.new(analysed_modules).generate_report
24
23
  puts "New critique at #{report_location}"
25
24
  end
26
25
  end
@@ -6,23 +6,22 @@ require "rubycritic/reporters/main"
6
6
  module Rubycritic
7
7
  module Command
8
8
  class Default
9
- def initialize(options)
10
- @paths = options[:paths]
9
+ def initialize(paths)
10
+ @paths = paths
11
11
  Config.source_control_system = SourceControlSystem::Base.create
12
12
  end
13
13
 
14
14
  def execute
15
- critique(@paths)
16
- report
15
+ report(critique)
17
16
  end
18
17
 
19
- def critique(paths)
20
- @analysed_modules = AnalysersRunner.new(paths).run
21
- RevisionComparator.new(paths).set_statuses(@analysed_modules)
18
+ def critique
19
+ analysed_modules = AnalysersRunner.new(@paths).run
20
+ RevisionComparator.new(@paths).set_statuses(analysed_modules)
22
21
  end
23
22
 
24
- def report
25
- report_location = Reporter::Main.new(@analysed_modules).generate_report
23
+ def report(analysed_modules)
24
+ report_location = Reporter::Main.new(analysed_modules).generate_report
26
25
  puts "New critique at #{report_location}"
27
26
  end
28
27
  end
@@ -1,12 +1,12 @@
1
1
  module Rubycritic
2
2
  module Command
3
3
  class Help
4
- def initialize(options)
5
- @options = options
4
+ def initialize(help_text)
5
+ @help_text = help_text
6
6
  end
7
7
 
8
8
  def execute
9
- puts @options.help_text
9
+ puts @help_text
10
10
  end
11
11
  end
12
12
  end
@@ -1,11 +1,12 @@
1
1
  module Rubycritic
2
2
  class Configuration
3
3
  attr_reader :root
4
- attr_accessor :source_control_system, :mode
4
+ attr_accessor :source_control_system, :mode, :deduplicate_symlinks
5
5
 
6
6
  def set(options)
7
7
  self.mode = options[:mode] || :default
8
8
  self.root = options[:root] || "tmp/rubycritic"
9
+ self.deduplicate_symlinks = options[:deduplicate_symlinks] || false
9
10
  end
10
11
 
11
12
  def root=(path)
@@ -20,14 +20,31 @@ module Rubycritic
20
20
 
21
21
  private
22
22
 
23
+ def deduplicate_symlinks(path_list)
24
+ # sort the symlinks to the end so files are preferred
25
+ path_list.sort_by! { |path| File.symlink?(path.cleanpath) ? "z" : "a" }
26
+ if defined?(JRUBY_VERSION)
27
+ require "java"
28
+ path_list.uniq! do |path|
29
+ java.io.File.new(path.realpath.to_s).canonical_path
30
+ end
31
+ else
32
+ path_list.uniq!(&:realpath)
33
+ end
34
+ end
35
+
23
36
  def expand_paths
24
- @initial_paths.flat_map do |path|
37
+ path_list = @initial_paths.flat_map do |path|
25
38
  if File.directory?(path)
26
39
  Pathname.glob(File.join(path, RUBY_FILES))
27
40
  elsif File.exist?(path) && File.extname(path) == RUBY_EXTENSION
28
41
  Pathname.new(path)
29
42
  end
30
- end.compact.map(&:cleanpath)
43
+ end.compact
44
+
45
+ deduplicate_symlinks(path_list) if Config.deduplicate_symlinks
46
+
47
+ path_list.map(&:cleanpath)
31
48
  end
32
49
  end
33
50
  end
@@ -1,3 +1,3 @@
1
1
  module Rubycritic
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -23,9 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency "virtus", "~> 1.0"
24
24
  spec.add_runtime_dependency "flay", "2.4.0"
25
25
  spec.add_runtime_dependency "flog", "4.2.1"
26
- spec.add_runtime_dependency "reek", "1.6.3"
26
+ spec.add_runtime_dependency "reek", "1.6.5"
27
27
  spec.add_runtime_dependency "parser", ">= 2.2.0", "< 3.0"
28
- spec.add_runtime_dependency "ruby2ruby", ">= 2.1.1", "< 3.0"
29
28
 
30
29
  spec.add_development_dependency "bundler", "~> 1.3"
31
30
  spec.add_development_dependency "rake"
@@ -26,10 +26,19 @@ describe Rubycritic::SourceLocator do
26
26
 
27
27
  it "finds all the files" do
28
28
  initial_paths = ["."]
29
- final_paths = ["dir1/file1.rb", "file0.rb"]
29
+ final_paths = ["dir1/file1.rb", "file0.rb", "file0_symlink.rb"]
30
30
  Rubycritic::SourceLocator.new(initial_paths).paths.must_match_array final_paths
31
31
  end
32
32
 
33
+ context "when configured to deduplicate symlinks" do
34
+ it "it favors a file over a symlink if they both point to the same target" do
35
+ Rubycritic::Config.stubs(:deduplicate_symlinks).returns(true)
36
+ initial_paths = ["file0.rb", "file0_symlink.rb"]
37
+ final_paths = ["file0.rb"]
38
+ Rubycritic::SourceLocator.new(initial_paths).paths.must_match_array final_paths
39
+ end
40
+ end
41
+
33
42
  it "cleans paths of consecutive slashes and useless dots" do
34
43
  initial_paths = [".//file0.rb"]
35
44
  final_paths = ["file0.rb"]
File without changes
@@ -12,7 +12,7 @@ class Perfume
12
12
  end
13
13
  end
14
14
 
15
- def method_with_too_many_statements
15
+ def allow_many_statements
16
16
  do_something
17
17
  do_something
18
18
  do_something
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubycritic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Simoes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-17 00:00:00.000000000 Z
11
+ date: 2015-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.6.3
61
+ version: 1.6.5
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 1.6.3
68
+ version: 1.6.5
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: parser
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,26 +86,6 @@ dependencies:
86
86
  - - "<"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '3.0'
89
- - !ruby/object:Gem::Dependency
90
- name: ruby2ruby
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: 2.1.1
96
- - - "<"
97
- - !ruby/object:Gem::Version
98
- version: '3.0'
99
- type: :runtime
100
- prerelease: false
101
- version_requirements: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- version: 2.1.1
106
- - - "<"
107
- - !ruby/object:Gem::Version
108
- version: '3.0'
109
89
  - !ruby/object:Gem::Dependency
110
90
  name: bundler
111
91
  requirement: !ruby/object:Gem::Requirement
@@ -291,6 +271,7 @@ files:
291
271
  - test/samples/flog/smelly.rb
292
272
  - test/samples/location/dir1/file1.rb
293
273
  - test/samples/location/file0.rb
274
+ - test/samples/location/file0_symlink.rb
294
275
  - test/samples/location/file_with_different_extension.py
295
276
  - test/samples/location/file_with_no_extension
296
277
  - test/samples/methods_count.rb
@@ -354,6 +335,7 @@ test_files:
354
335
  - test/samples/flog/smelly.rb
355
336
  - test/samples/location/dir1/file1.rb
356
337
  - test/samples/location/file0.rb
338
+ - test/samples/location/file0_symlink.rb
357
339
  - test/samples/location/file_with_different_extension.py
358
340
  - test/samples/location/file_with_no_extension
359
341
  - test/samples/methods_count.rb
@@ -362,4 +344,3 @@ test_files:
362
344
  - test/samples/reek/smelly.rb
363
345
  - test/samples/unparsable.rb
364
346
  - test/test_helper.rb
365
- has_rdoc: