Commit 5c7a7381 authored by Gabriel Mazetto's avatar Gabriel Mazetto Committed by Nick Thomas

[CE] Add Naming/FileName rule checking expected class/module per filename

parent a2844000
...@@ -31,6 +31,78 @@ Style/MutableConstant: ...@@ -31,6 +31,78 @@ Style/MutableConstant:
- 'ee/db/post_migrate/**/*' - 'ee/db/post_migrate/**/*'
- 'ee/db/geo/migrate/**/*' - 'ee/db/geo/migrate/**/*'
Naming/FileName:
ExpectMatchingDefinition: true
Exclude:
- 'spec/**/*'
- 'features/**/*'
- 'ee/spec/**/*'
- 'qa/spec/**/*'
- 'qa/qa/specs/**/*'
- 'qa/bin/*'
- 'config/**/*'
- 'lib/generators/**/*'
- 'ee/lib/generators/**/*'
IgnoreExecutableScripts: true
AllowedAcronyms:
- EE
- JSON
- LDAP
- IO
- HMAC
- QA
- ENV
- STL
- PDF
- SVG
- CTE
- DN
- RSA
- CI
- CD
- OAuth
# default ones:
- CLI
- DSL
- ACL
- API
- ASCII
- CPU
- CSS
- DNS
- EOF
- GUID
- HTML
- HTTP
- HTTPS
- ID
- IP
- JSON
- LHS
- QPS
- RAM
- RHS
- RPC
- SLA
- SMTP
- SQL
- SSH
- TCP
- TLS
- TTL
- UDP
- UI
- UID
- UUID
- URI
- URL
- UTF8
- VM
- XML
- XMPP
- XSRF
- XSS
# Gitlab ################################################################### # Gitlab ###################################################################
Gitlab/ModuleWithInstanceVariables: Gitlab/ModuleWithInstanceVariables:
......
...@@ -40,7 +40,7 @@ scope(path: '*namespace_id/:project_id', ...@@ -40,7 +40,7 @@ scope(path: '*namespace_id/:project_id',
# /info/refs?service=git-receive-pack, but nothing else. # /info/refs?service=git-receive-pack, but nothing else.
# #
git_http_handshake = lambda do |request| git_http_handshake = lambda do |request|
ProjectUrlConstrainer.new.matches?(request) && ::Constraints::ProjectUrlConstrainer.new.matches?(request) &&
(request.query_string.blank? || (request.query_string.blank? ||
request.query_string.match(/\Aservice=git-(upload|receive)-pack\z/)) request.query_string.match(/\Aservice=git-(upload|receive)-pack\z/))
end end
......
require 'constraints/group_url_constrainer'
resources :groups, only: [:index, :new, :create] do resources :groups, only: [:index, :new, :create] do
post :preview_markdown post :preview_markdown
end end
constraints(GroupUrlConstrainer.new) do constraints(::Constraints::GroupUrlConstrainer.new) do
scope(path: 'groups/*id', scope(path: 'groups/*id',
controller: :groups, controller: :groups,
constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ }) do constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ }) do
......
require 'constraints/project_url_constrainer'
resources :projects, only: [:index, :new, :create] resources :projects, only: [:index, :new, :create]
draw :git_http draw :git_http
constraints(ProjectUrlConstrainer.new) do constraints(::Constraints::ProjectUrlConstrainer.new) do
# If the route has a wildcard segment, the segment has a regex constraint, # If the route has a wildcard segment, the segment has a regex constraint,
# the segment is potentially followed by _another_ wildcard segment, and # the segment is potentially followed by _another_ wildcard segment, and
# the `format` option is not set to false, we need to specify that # the `format` option is not set to false, we need to specify that
......
require 'constraints/user_url_constrainer'
devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks, devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks,
registrations: :registrations, registrations: :registrations,
passwords: :passwords, passwords: :passwords,
...@@ -35,7 +33,7 @@ scope(constraints: { username: Gitlab::PathRegex.root_namespace_route_regex }) d ...@@ -35,7 +33,7 @@ scope(constraints: { username: Gitlab::PathRegex.root_namespace_route_regex }) d
get '/u/:username/contributed', to: redirect('users/%{username}/contributed') get '/u/:username/contributed', to: redirect('users/%{username}/contributed')
end end
constraints(UserUrlConstrainer.new) do constraints(::Constraints::UserUrlConstrainer.new) do
# Get all keys of user # Get all keys of user
get ':username.keys' => 'profiles/keys#get_keys', constraints: { username: Gitlab::PathRegex.root_namespace_route_regex } get ':username.keys' => 'profiles/keys#get_keys', constraints: { username: Gitlab::PathRegex.root_namespace_route_regex }
......
class GroupUrlConstrainer module Constraints
class GroupUrlConstrainer
def matches?(request) def matches?(request)
full_path = request.params[:group_id] || request.params[:id] full_path = request.params[:group_id] || request.params[:id]
...@@ -6,4 +7,5 @@ class GroupUrlConstrainer ...@@ -6,4 +7,5 @@ class GroupUrlConstrainer
Group.find_by_full_path(full_path, follow_redirects: request.get?).present? Group.find_by_full_path(full_path, follow_redirects: request.get?).present?
end end
end
end end
class ProjectUrlConstrainer module Constraints
class ProjectUrlConstrainer
def matches?(request) def matches?(request)
namespace_path = request.params[:namespace_id] namespace_path = request.params[:namespace_id]
project_path = request.params[:project_id] || request.params[:id] project_path = request.params[:project_id] || request.params[:id]
...@@ -10,4 +11,5 @@ class ProjectUrlConstrainer ...@@ -10,4 +11,5 @@ class ProjectUrlConstrainer
# as cache for further Project.find_by_full_path calls within request # as cache for further Project.find_by_full_path calls within request
Project.find_by_full_path(full_path, follow_redirects: request.get?).present? Project.find_by_full_path(full_path, follow_redirects: request.get?).present?
end end
end
end end
class UserUrlConstrainer module Constraints
class UserUrlConstrainer
def matches?(request) def matches?(request)
full_path = request.params[:username] full_path = request.params[:username]
...@@ -6,4 +7,5 @@ class UserUrlConstrainer ...@@ -6,4 +7,5 @@ class UserUrlConstrainer
User.find_by_full_path(full_path, follow_redirects: request.get?).present? User.find_by_full_path(full_path, follow_redirects: request.get?).present?
end end
end
end end
require_dependency 'declarative_policy/cache' require_dependency 'declarative_policy/cache'
require_dependency 'declarative_policy/condition' require_dependency 'declarative_policy/condition'
require_dependency 'declarative_policy/dsl' require_dependency 'declarative_policy/delegate_dsl'
require_dependency 'declarative_policy/policy_dsl'
require_dependency 'declarative_policy/rule_dsl'
require_dependency 'declarative_policy/preferred_scope' require_dependency 'declarative_policy/preferred_scope'
require_dependency 'declarative_policy/rule' require_dependency 'declarative_policy/rule'
require_dependency 'declarative_policy/runner' require_dependency 'declarative_policy/runner'
......
module DeclarativePolicy
# Used when the name of a delegate is mentioned in
# the rule DSL.
class DelegateDsl
def initialize(rule_dsl, delegate_name)
@rule_dsl = rule_dsl
@delegate_name = delegate_name
end
def method_missing(m, *a, &b)
return super unless a.empty? && !block_given?
@rule_dsl.delegate(@delegate_name, m)
end
end
end
module DeclarativePolicy module DeclarativePolicy
# The DSL evaluation context inside rule { ... } blocks.
# Responsible for creating and combining Rule objects.
#
# See Base.rule
class RuleDsl
def initialize(context_class)
@context_class = context_class
end
def can?(ability)
Rule::Ability.new(ability)
end
def all?(*rules)
Rule::And.make(rules)
end
def any?(*rules)
Rule::Or.make(rules)
end
def none?(*rules)
~Rule::Or.new(rules)
end
def cond(condition)
Rule::Condition.new(condition)
end
def delegate(delegate_name, condition)
Rule::DelegatedCondition.new(delegate_name, condition)
end
def method_missing(m, *a, &b)
return super unless a.size == 0 && !block_given?
if @context_class.delegations.key?(m)
DelegateDsl.new(self, m)
else
cond(m.to_sym)
end
end
end
# Used when the name of a delegate is mentioned in
# the rule DSL.
class DelegateDsl
def initialize(rule_dsl, delegate_name)
@rule_dsl = rule_dsl
@delegate_name = delegate_name
end
def method_missing(m, *a, &b)
return super unless a.size == 0 && !block_given?
@rule_dsl.delegate(@delegate_name, m)
end
end
# The return value of a rule { ... } declaration. # The return value of a rule { ... } declaration.
# Can call back to register rules with the containing # Can call back to register rules with the containing
# Policy class (context_class here). See Base.rule # Policy class (context_class here). See Base.rule
......
module DeclarativePolicy module DeclarativePolicy # rubocop:disable Naming/FileName
PREFERRED_SCOPE_KEY = :"DeclarativePolicy.preferred_scope" PREFERRED_SCOPE_KEY = :"DeclarativePolicy.preferred_scope"
class << self class << self
......
module DeclarativePolicy
# The DSL evaluation context inside rule { ... } blocks.
# Responsible for creating and combining Rule objects.
#
# See Base.rule
class RuleDsl
def initialize(context_class)
@context_class = context_class
end
def can?(ability)
Rule::Ability.new(ability)
end
def all?(*rules)
Rule::And.make(rules)
end
def any?(*rules)
Rule::Or.make(rules)
end
def none?(*rules)
~Rule::Or.new(rules)
end
def cond(condition)
Rule::Condition.new(condition)
end
def delegate(delegate_name, condition)
Rule::DelegatedCondition.new(delegate_name, condition)
end
def method_missing(m, *a, &b)
return super unless a.empty? && !block_given?
if @context_class.delegations.key?(m)
DelegateDsl.new(self, m)
else
cond(m.to_sym)
end
end
end
end
module Gitlab module Gitlab # rubocop:disable Naming/FileName
module Auth module Auth
Result = Struct.new(:actor, :project, :type, :authentication_abilities) do Result = Struct.new(:actor, :project, :type, :authentication_abilities) do
def ci?(for_project) def ci?(for_project)
......
module Gitlab module Gitlab # rubocop:disable Naming/FileName
module Ci module Ci
module Pipeline module Pipeline
module Chain module Chain
......
module Gitlab::HealthChecks module Gitlab::HealthChecks # rubocop:disable Naming/FileName
Metric = Struct.new(:name, :value, :labels) Metric = Struct.new(:name, :value, :labels)
end end
module Gitlab::HealthChecks module Gitlab::HealthChecks # rubocop:disable Naming/FileName
Result = Struct.new(:success, :message, :labels) Result = Struct.new(:success, :message, :labels)
end end
module Gitlab module Gitlab # rubocop:disable Naming/FileName
module Middleware module Middleware
# Some of middleware would hold env for no good reason even after the # Some of middleware would hold env for no good reason even after the
# request had already been processed, and we could not garbage collect # request had already been processed, and we could not garbage collect
......
module Gitlab module Gitlab # rubocop:disable Naming/FileName
module SlashCommands module SlashCommands
Result = Struct.new(:type, :message) Result = Struct.new(:type, :message)
end end
......
unless Rails.env.production? unless Rails.env.production? # rubocop:disable Naming/FileName
require 'haml_lint/haml_visitor' require 'haml_lint/haml_visitor'
require 'haml_lint/linter' require 'haml_lint/linter'
require 'haml_lint/linter_registry' require 'haml_lint/linter_registry'
......
module QA module QA # rubocop:disable Naming/FileName
module Page module Page
module Project module Project
module Settings module Settings
......
# rubocop:disable Naming/FileName
require_relative 'cop/gitlab/module_with_instance_variables' require_relative 'cop/gitlab/module_with_instance_variables'
require_relative 'cop/gitlab/predicate_memoization' require_relative 'cop/gitlab/predicate_memoization'
require_relative 'cop/include_sidekiq_worker' require_relative 'cop/include_sidekiq_worker'
......
require 'spec_helper' require 'spec_helper'
describe GroupUrlConstrainer do describe Constraints::GroupUrlConstrainer do
let!(:group) { create(:group, path: 'gitlab') } let!(:group) { create(:group, path: 'gitlab') }
describe '#matches?' do describe '#matches?' do
......
require 'spec_helper' require 'spec_helper'
describe ProjectUrlConstrainer do describe Constraints::ProjectUrlConstrainer do
let!(:project) { create(:project) } let!(:project) { create(:project) }
let!(:namespace) { project.namespace } let!(:namespace) { project.namespace }
......
require 'spec_helper' require 'spec_helper'
describe UserUrlConstrainer do describe Constraints::UserUrlConstrainer do
let!(:user) { create(:user, username: 'dz') } let!(:user) { create(:user, username: 'dz') }
describe '#matches?' do describe '#matches?' do
......
...@@ -9,7 +9,7 @@ require 'spec_helper' ...@@ -9,7 +9,7 @@ require 'spec_helper'
# user_calendar_activities GET /u/:username/calendar_activities(.:format) # user_calendar_activities GET /u/:username/calendar_activities(.:format)
describe UsersController, "routing" do describe UsersController, "routing" do
it "to #show" do it "to #show" do
allow_any_instance_of(UserUrlConstrainer).to receive(:matches?).and_return(true) allow_any_instance_of(::Constraints::UserUrlConstrainer).to receive(:matches?).and_return(true)
expect(get("/User")).to route_to('users#show', username: 'User') expect(get("/User")).to route_to('users#show', username: 'User')
end end
...@@ -210,7 +210,7 @@ describe Profiles::KeysController, "routing" do ...@@ -210,7 +210,7 @@ describe Profiles::KeysController, "routing" do
# get all the ssh-keys of a user # get all the ssh-keys of a user
it "to #get_keys" do it "to #get_keys" do
allow_any_instance_of(UserUrlConstrainer).to receive(:matches?).and_return(true) allow_any_instance_of(::Constraints::UserUrlConstrainer).to receive(:matches?).and_return(true)
expect(get("/foo.keys")).to route_to('profiles/keys#get_keys', username: 'foo') expect(get("/foo.keys")).to route_to('profiles/keys#get_keys', username: 'foo')
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment