dark_finger 0.4.0 → 0.5.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: '0962a291b4b5701f5523c84ecbd4865afe91953e5a40ce3c3467a92d31dfba1a'
4
- data.tar.gz: b6bbe7abfa4d16caca2ec60a3090435d4498db374ec2e0bd451608ccaa747ee8
3
+ metadata.gz: 06f1588f5fdba7fd43a67007cd3c4639b7354fd2ffd087c1e0c8bd08e50354e8
4
+ data.tar.gz: 7953b82963fb8e05b7399d3da7f2128bd6b0f7533137ca396ceac7a0fd209dcb
5
5
  SHA512:
6
- metadata.gz: 5f60cc6dd2325e4a9c758170250b5daadfb3bec991bdeab141cd6fc864d4df4300430d94bffc8bbaac9abf3b4c1e7e7de9c7037f7124f815d2343e6f0b74ac31
7
- data.tar.gz: 57732e831e03a50c242bbaf05661879b10781cf30bf389f374e1bca173889c06862a6a17cf40a43b3701806613561cb63bbcc9fe21bed69d20c9c02e6a8698b9
6
+ metadata.gz: d29b4d1db2264e116e727558943b4d02a07db7adfc8ce909ec44be254a9981414c851a8fb88db291a2312645c1ff358dd8327599188a1bcc00e6a3bfcca1bc8b
7
+ data.tar.gz: a0e8ee91d508ba696a3898350ede3b205f08c496bc780102468fa15b4496afe26b5f645eb2abab6ddd22777beb7b8c16b67b2004b96c69af960c60b6109ccf1e
data/README.md CHANGED
@@ -123,9 +123,18 @@ DarkFinger/ModelStructure:
123
123
  constant: '## Constants ##'
124
124
  enum: '## Enums ##'
125
125
  include: '## Includes ##'
126
+ misc: '## Misc ##'
126
127
  module: '## Modules ##'
127
128
  scope: '## Scopes ##'
128
129
  validation: '## Validations ##'
130
+
131
+ # specify the methods that are categorized as "misc"
132
+ misc_method_names:
133
+ - acts_as_list
134
+ - acts_as_taggable
135
+ - friendly_id
136
+ - serialize
137
+ - workflow
129
138
  ```
130
139
 
131
140
  Supported model elements:
@@ -148,6 +157,12 @@ Supported model elements:
148
157
  | validation | |
149
158
 
150
159
 
160
+ Any model elements that are not included in "required order" will be ignored.
161
+
162
+ Dark Finger ignores everything that appears after `private`. This may change in
163
+ future, but for now we have just agreed that anything goes in the private
164
+ section of our models.
165
+
151
166
  ## License
152
167
 
153
168
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -1,3 +1,3 @@
1
1
  module DarkFinger
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/dark_finger.rb CHANGED
@@ -2,3 +2,5 @@ require 'rubocop'
2
2
  require "dark_finger/version"
3
3
  require File.dirname(__FILE__) + "/rubocop/cop/dark_finger/model_structure"
4
4
  require File.dirname(__FILE__) + "/rubocop/cop/dark_finger/active_model_node_decorator"
5
+ require File.dirname(__FILE__) + "/rubocop/cop/dark_finger/migration_constants"
6
+ require File.dirname(__FILE__) + "/rubocop/cop/dark_finger/module_ancestor_chain_extractor"
@@ -0,0 +1,64 @@
1
+ module RuboCop
2
+ module Cop
3
+ module DarkFinger
4
+ class MigrationConstants < ::RuboCop::Cop::Cop
5
+ DEFAULT_ALLOWED_CONSTANTS = [
6
+ 'Migration',
7
+ 'ActiveRecord',
8
+ 'ActiveRecord::Migration',
9
+ 'ActiveRecord::Base'
10
+ ]
11
+
12
+ attr_reader :allowed_constants
13
+
14
+ def initialize(*args)
15
+ super
16
+ @allowed_constants = DEFAULT_ALLOWED_CONSTANTS + allowed_top_level_constants
17
+ end
18
+
19
+ def on_const(node)
20
+ return if allowed_constants.include?(node.const_name)
21
+ add_offense(node, message: %Q(Undeclared constant: "#{node.const_name}"))
22
+ end
23
+
24
+ def on_casgn(node)
25
+ add_allowed_constant(node.children[1])
26
+ end
27
+
28
+ def on_class(node)
29
+ add_allowed_constant(node.children.first.const_name)
30
+ add_module_parent_chain_for(node)
31
+ end
32
+
33
+ def on_module(node)
34
+ add_allowed_constant(node.children.first.const_name)
35
+ add_module_parent_chain_for(node)
36
+ end
37
+
38
+ private
39
+
40
+ def allowed_top_level_constants
41
+ Module.constants.map(&:to_s) - top_level_model_classes_and_containing_modules
42
+ end
43
+
44
+ def top_level_model_classes_and_containing_modules
45
+ return [] unless Object.const_defined?('ActiveRecord::Base')
46
+
47
+ ::ActiveRecord::Base.descendants.map do |klass|
48
+ klass.name.sub(/::.*/, '').to_s
49
+ end.uniq
50
+ end
51
+
52
+ def add_allowed_constant(constant)
53
+ @allowed_constants << constant.to_s
54
+ @allowed_constants.uniq!
55
+ end
56
+
57
+ def add_module_parent_chain_for(node)
58
+ chain = ModuleAncestorChainExtractor.new(node).perform
59
+ add_allowed_constant(chain)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,25 @@
1
+ module RuboCop
2
+ module Cop
3
+ module DarkFinger
4
+ class ModuleAncestorChainExtractor
5
+ attr_reader :node
6
+
7
+ def initialize(node)
8
+ @node = node
9
+ end
10
+
11
+ def perform
12
+ module_chain = [node.children.first.const_name]
13
+
14
+ current_node = node
15
+ while current_node.parent && current_node.parent.module_type?
16
+ module_chain << current_node.parent.children.first.const_name
17
+ current_node = current_node.parent
18
+ end
19
+
20
+ module_chain.reverse.join("::")
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dark_finger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Professor Wang Matrix PhD
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-10-21 00:00:00.000000000 Z
12
+ date: 2018-11-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -103,7 +103,9 @@ files:
103
103
  - lib/dark_finger.rb
104
104
  - lib/dark_finger/version.rb
105
105
  - lib/rubocop/cop/dark_finger/active_model_node_decorator.rb
106
+ - lib/rubocop/cop/dark_finger/migration_constants.rb
106
107
  - lib/rubocop/cop/dark_finger/model_structure.rb
108
+ - lib/rubocop/cop/dark_finger/module_ancestor_chain_extractor.rb
107
109
  homepage: https://github.com/the-suBLAM-executive-council/dark_finger
108
110
  licenses:
109
111
  - MIT