ducalis 0.7.0 → 0.8.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 +5 -5
- data/.ruby-version +1 -1
- data/Gemfile.lock +1 -1
- data/README.md +17 -12
- data/config/.ducalis.yml +8 -0
- data/lib/ducalis.rb +1 -0
- data/lib/ducalis/cops/descriptive_block_names.rb +36 -0
- data/lib/ducalis/cops/fetch_expression.rb +2 -0
- data/lib/ducalis/documentation.rb +15 -1
- data/lib/ducalis/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9b9c876d0a00b147a1b951611b7ad2f0e7c1acfaecdb03f00a76a206e582678b
|
4
|
+
data.tar.gz: 447e6dbfb3ae6d84b6f63234ae66aa7db0741ef463daaca07ed3715bcccdf160
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc5cfd83af5d1754ece8f915ffcf04850f39f167fa79c89845b610c9e1b53835a536479598241d1e81e7559f4265ee04d665073f7190e734acea05c270667d74
|
7
|
+
data.tar.gz: 36ee864dfdd14acc6f941ca5ade14876cff2cfd2a49020d146326010340e9ee7f519c5e36c740f6e46b5323c04a64ab3aeea4fe20277594fa6b5c72c236fff1b
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.5.1
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -5,26 +5,21 @@
|
|
5
5
|
[](https://codeclimate.com/github/ignat-z/ducalis/maintainability)
|
6
6
|
|
7
7
|
__Ducalis__ is RuboCop-based static code analyzer for enterprise Rails applications.
|
8
|
-
|
8
|
+
|
9
|
+
Documentation available at https://ducalis-rb.github.io/.
|
10
|
+
|
11
|
+
__Ducalis__ isn't style checker and could sometimes be false-positive it's not
|
9
12
|
necessary to follow all it rules, the main purpose of __Ducalis__ is help to find
|
10
13
|
possible weak code parts.
|
11
14
|
|
12
|
-
|
15
|
+
## Installation and Usage
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
Add this line to your application's Gemfile:
|
17
|
+
Add this line to your application's `Gemfile`:
|
17
18
|
|
18
19
|
```ruby
|
19
20
|
gem 'ducalis'
|
20
21
|
```
|
21
22
|
|
22
|
-
## License
|
23
|
-
|
24
|
-
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
25
|
-
|
26
|
-
## Usage
|
27
|
-
|
28
23
|
There are a lot of variants how you can use __Ducalis__:
|
29
24
|
|
30
25
|
1. As CLI application. In this mode __Ducalis__ will notify you about any
|
@@ -72,9 +67,19 @@ def remove_audits
|
|
72
67
|
end
|
73
68
|
```
|
74
69
|
|
70
|
+
The main behavior of Ducalis can be controlled via the
|
71
|
+
[.ducalis.yml](<https://github.com/ignat-z/ducalis/blob/master/config/.ducalis.yml>).
|
72
|
+
It makes it possible to enable/disable certain cops (checks) and to alter their
|
73
|
+
behavior if they accept any parameters. List of all available cops could be
|
74
|
+
found in the [documentation](<https://ducalis-rb.github.io/>).
|
75
|
+
|
76
|
+
## License
|
77
|
+
|
78
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
79
|
+
|
75
80
|
## Contribution
|
76
81
|
|
77
|
-
To pass your code through the all checks you simply need to run:
|
82
|
+
Contributions are welcome! To pass your code through the all checks you simply need to run:
|
78
83
|
|
79
84
|
```
|
80
85
|
bundle exec rake
|
data/config/.ducalis.yml
CHANGED
data/lib/ducalis.rb
CHANGED
@@ -37,6 +37,7 @@ require 'ducalis/cops/callbacks_activerecord'
|
|
37
37
|
require 'ducalis/cops/case_mapping'
|
38
38
|
require 'ducalis/cops/controllers_except'
|
39
39
|
require 'ducalis/cops/data_access_objects'
|
40
|
+
require 'ducalis/cops/descriptive_block_names'
|
40
41
|
require 'ducalis/cops/fetch_expression'
|
41
42
|
require 'ducalis/cops/only_defs'
|
42
43
|
require 'ducalis/cops/keyword_defaults'
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubocop'
|
4
|
+
|
5
|
+
module Ducalis
|
6
|
+
class DescriptiveBlockNames < RuboCop::Cop::Cop
|
7
|
+
OFFENSE = <<-MESSAGE.gsub(/^ +\|\s/, '').strip
|
8
|
+
| Please, use descriptive names as block arguments. There is no any sanse to save on letters.
|
9
|
+
MESSAGE
|
10
|
+
|
11
|
+
def on_block(node)
|
12
|
+
_send, args, _inner = *node
|
13
|
+
block_arguments(args).each do |violation_node|
|
14
|
+
add_offense(violation_node, :expression, OFFENSE)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def violate?(node)
|
21
|
+
node.to_s.length < minimal_length &&
|
22
|
+
!node.to_s.start_with?('_') &&
|
23
|
+
!white_list.include?(node.to_s)
|
24
|
+
end
|
25
|
+
|
26
|
+
def white_list
|
27
|
+
cop_config.fetch('WhiteList')
|
28
|
+
end
|
29
|
+
|
30
|
+
def minimal_length
|
31
|
+
cop_config.fetch('MinimalLenght').to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
def_node_search :block_arguments, '(arg #violate?)'
|
35
|
+
end
|
36
|
+
end
|
@@ -13,6 +13,8 @@ module Ducalis
|
|
13
13
|
| %<source>s
|
14
14
|
| ```
|
15
15
|
|
16
|
+
| If your hash contains `nil` or `false` values and you want to treat them not like an actual values you should preliminarily remove this values from hash.
|
17
|
+
| You can use `compact` (in case if you do not want to ignore `false` values) or `keep_if { |key, value| value }` (if you want to ignore all `false` and `nil` values).
|
16
18
|
MESSAGE
|
17
19
|
|
18
20
|
def investigate(processed_source)
|
@@ -66,16 +66,30 @@ end
|
|
66
66
|
|
67
67
|
class Documentation
|
68
68
|
SIGNAL_WORD = 'raises'.freeze
|
69
|
+
PREFER_WORD = 'better'.freeze
|
69
70
|
RULE_WORD = '[rule]'.freeze
|
70
71
|
|
72
|
+
def cop_rules
|
73
|
+
cops.map do |file|
|
74
|
+
rules = spec_cases_for(file).select do |desc, _code|
|
75
|
+
desc.include?(RULE_WORD)
|
76
|
+
end
|
77
|
+
[file, rules]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
71
81
|
def call
|
72
|
-
|
82
|
+
cops.map do |f|
|
73
83
|
present_cop(klass_const_for(f), spec_cases_for(f))
|
74
84
|
end.flatten.join("\n")
|
75
85
|
end
|
76
86
|
|
77
87
|
private
|
78
88
|
|
89
|
+
def cops
|
90
|
+
Dir[File.join(File.dirname(__FILE__), 'cops', '*.rb')].sort
|
91
|
+
end
|
92
|
+
|
79
93
|
def present_cop(klass, specs)
|
80
94
|
[
|
81
95
|
"## #{klass}\n", # header
|
data/lib/ducalis/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ducalis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignat Zakrevsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: git
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/ducalis/cops/case_mapping.rb
|
117
117
|
- lib/ducalis/cops/controllers_except.rb
|
118
118
|
- lib/ducalis/cops/data_access_objects.rb
|
119
|
+
- lib/ducalis/cops/descriptive_block_names.rb
|
119
120
|
- lib/ducalis/cops/enforce_namespace.rb
|
120
121
|
- lib/ducalis/cops/evlis_overusing.rb
|
121
122
|
- lib/ducalis/cops/extensions/rubocop_cast.rb
|
@@ -174,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
175
|
version: '0'
|
175
176
|
requirements: []
|
176
177
|
rubyforge_project:
|
177
|
-
rubygems_version: 2.
|
178
|
+
rubygems_version: 2.7.6
|
178
179
|
signing_key:
|
179
180
|
specification_version: 4
|
180
181
|
summary: RuboCop based static code analyzer
|