Skip to content

Commit b3687ba

Browse files
committed
add rubocop
1 parent 7b10ffc commit b3687ba

12 files changed

Lines changed: 219 additions & 129 deletions

File tree

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,8 @@ jobs:
3131
- name: Run tests
3232
run: bundle exec rake
3333

34+
- name: Run RuboCop
35+
run: bundle exec rubocop
36+
3437
- name: Build gem
3538
run: gem build *.gemspec

.rubocop.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
AllCops:
2+
NewCops: enable
3+
TargetRubyVersion: 3.0
4+
SuggestExtensions: false
5+
Exclude:
6+
- 'vendor/**/*'
7+
- 'tmp/**/*'
8+
- '*.gem'
9+
10+
Style/Documentation:
11+
Enabled: false
12+
13+
Layout/LineLength:
14+
Max: 120
15+
Exclude:
16+
- 'spec/**/*'
17+
- 'rack-url-canonicalizer.gemspec'
18+
19+
Metrics/BlockLength:
20+
Exclude:
21+
- 'spec/**/*'
22+
- 'rack-url-canonicalizer.gemspec'
23+
24+
Metrics/AbcSize:
25+
Max: 50
26+
27+
Metrics/CyclomaticComplexity:
28+
Max: 25
29+
30+
Metrics/PerceivedComplexity:
31+
Max: 25
32+
33+
Metrics/MethodLength:
34+
Max: 50
35+
36+
Gemspec/DevelopmentDependencies:
37+
Enabled: false
38+
39+
Naming/FileName:
40+
Exclude:
41+
- 'lib/rack-url-canonicalizer.rb'

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

3-
source "https://rubygems.org"
3+
source 'https://rubygems.org'
44

55
gemspec

Gemfile.lock

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,23 @@ PATH
77
GEM
88
remote: https://rubygems.org/
99
specs:
10+
ast (2.4.3)
1011
diff-lcs (1.6.2)
12+
json (2.21.2)
13+
language_server-protocol (3.17.0.6)
14+
lint_roller (1.1.0)
15+
parallel (2.1.0)
16+
parser (3.3.12.0)
17+
ast (~> 2.4.1)
18+
racc
19+
prism (1.9.0)
20+
racc (1.8.1)
1121
rack (3.2.7)
1222
rack-test (2.2.0)
1323
rack (>= 1.3)
24+
rainbow (3.1.1)
1425
rake (13.4.2)
26+
regexp_parser (2.12.0)
1527
rspec (3.13.2)
1628
rspec-core (~> 3.13.0)
1729
rspec-expectations (~> 3.13.0)
@@ -25,6 +37,24 @@ GEM
2537
diff-lcs (>= 1.2.0, < 2.0)
2638
rspec-support (~> 3.13.0)
2739
rspec-support (3.13.7)
40+
rubocop (1.89.0)
41+
json (~> 2.3)
42+
language_server-protocol (~> 3.17.0.2)
43+
lint_roller (~> 1.1.0)
44+
parallel (>= 1.10)
45+
parser (>= 3.3.0.2)
46+
rainbow (>= 2.2.2, < 4.0)
47+
regexp_parser (>= 2.9.3, < 3.0)
48+
rubocop-ast (>= 1.49.0, < 2.0)
49+
ruby-progressbar (~> 1.7)
50+
unicode-display_width (>= 2.4.0, < 4.0)
51+
rubocop-ast (1.50.0)
52+
parser (>= 3.3.7.2)
53+
prism (~> 1.7)
54+
ruby-progressbar (1.13.0)
55+
unicode-display_width (3.2.0)
56+
unicode-emoji (~> 4.1)
57+
unicode-emoji (4.2.0)
2858

2959
PLATFORMS
3060
ruby
@@ -36,19 +66,35 @@ DEPENDENCIES
3666
rack-url-canonicalizer!
3767
rake (~> 13.0)
3868
rspec (~> 3.0)
69+
rubocop (~> 1.0)
3970

4071
CHECKSUMS
72+
ast (2.4.3)
4173
bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
4274
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
75+
json (2.21.2)
76+
language_server-protocol (3.17.0.6)
77+
lint_roller (1.1.0)
78+
parallel (2.1.0)
79+
parser (3.3.12.0)
80+
prism (1.9.0)
81+
racc (1.8.1)
4382
rack (3.2.7) sha256=93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7
4483
rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463
4584
rack-url-canonicalizer (0.1.0)
85+
rainbow (3.1.1)
4686
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
87+
regexp_parser (2.12.0)
4788
rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
4889
rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d
4990
rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
5091
rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47
5192
rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
93+
rubocop (1.89.0)
94+
rubocop-ast (1.50.0)
95+
ruby-progressbar (1.13.0)
96+
unicode-display_width (3.2.0)
97+
unicode-emoji (4.2.0)
5298

5399
BUNDLED WITH
54100
4.0.17

Rakefile

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# frozen_string_literal: true
22

3-
require "bundler/gem_tasks"
4-
require "rspec/core/rake_task"
3+
require 'bundler/gem_tasks'
4+
require 'rspec/core/rake_task'
5+
require 'rubocop/rake_task'
56

67
RSpec::Core::RakeTask.new(:spec)
8+
RuboCop::RakeTask.new(:rubocop)
79

8-
task default: :spec
10+
task default: %i[spec rubocop]

lib/rack-url-canonicalizer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# frozen_string_literal: true
22

3-
require "rack/url_canonicalizer"
3+
require 'rack/url_canonicalizer'

lib/rack/url_canonicalizer.rb

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# frozen_string_literal: true
22

3-
require "rack"
4-
require_relative "url_canonicalizer/version"
5-
require_relative "url_canonicalizer/configuration"
6-
require_relative "url_canonicalizer/railtie"
3+
require 'rack'
4+
require_relative 'url_canonicalizer/version'
5+
require_relative 'url_canonicalizer/configuration'
6+
require_relative 'url_canonicalizer/railtie'
77

88
module Rack
99
class UrlCanonicalizer
@@ -37,25 +37,21 @@ def call(env)
3737
return @app.call(env) unless req.get? || req.head?
3838
return @app.call(env) if xhr_request?(req, env)
3939

40-
path_info = env["PATH_INFO"] || ""
40+
path_info = env['PATH_INFO'] || ''
4141

42-
if excluded_path?(path_info)
43-
return @app.call(env)
44-
end
42+
return @app.call(env) if excluded_path?(path_info)
4543

46-
host = req.host || ""
47-
host_redirect = @config.strip_www && host.start_with?("www.")
48-
target_host = host_redirect ? host.sub(/\Awww\./, "") : host
44+
host = req.host || ''
45+
host_redirect = @config.strip_www && host.start_with?('www.')
46+
target_host = host_redirect ? host.sub(/\Awww\./, '') : host
4947

5048
raw_path = path_info
5149
normalized_path = raw_path.dup
5250

53-
if @config.collapse_slashes
54-
normalized_path.gsub!(%r{/{2,}}, "/")
55-
end
51+
normalized_path.gsub!(%r{/{2,}}, '/') if @config.collapse_slashes
5652

57-
if @config.strip_trailing_slash && normalized_path.length > 1 && normalized_path.end_with?("/")
58-
normalized_path.chomp!("/")
53+
if @config.strip_trailing_slash && normalized_path.length > 1 && normalized_path.end_with?('/')
54+
normalized_path.chomp!('/')
5955
end
6056

6157
query_params = req.GET.dup
@@ -73,20 +69,20 @@ def call(env)
7369
if host_redirect || raw_path != normalized_path || locale_redirect
7470
scheme = req.scheme
7571
port = req.port
76-
port_part = [ 80, 443 ].include?(port) ? "" : ":#{port}"
72+
port_part = [80, 443].include?(port) ? '' : ":#{port}"
7773

7874
new_query = Rack::Utils.build_nested_query(query_params)
79-
new_url = +"#{scheme}://#{target_host}#{port_part}#{normalized_path}"
75+
new_url = "#{scheme}://#{target_host}#{port_part}#{normalized_path}"
8076
new_url << "?#{new_query}" unless new_query.empty?
8177

8278
return [
8379
@config.redirect_status,
8480
{
85-
"location" => new_url,
86-
"content-type" => "text/html",
87-
"cache-control" => @config.cache_control
81+
'location' => new_url,
82+
'content-type' => 'text/html',
83+
'cache-control' => @config.cache_control
8884
},
89-
[ redirect_body(@config.redirect_status) ]
85+
[redirect_body(@config.redirect_status)]
9086
]
9187
end
9288

@@ -98,7 +94,7 @@ def call(env)
9894
def xhr_request?(req, env)
9995
return true if req.respond_to?(:xhr?) && req.xhr?
10096

101-
env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest"
97+
env['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'
10298
end
10399

104100
def excluded_path?(path_info)
@@ -111,11 +107,11 @@ def excluded_path?(path_info)
111107

112108
def redirect_body(status)
113109
case status
114-
when 301 then "Moved Permanently"
115-
when 302 then "Found"
116-
when 307 then "Temporary Redirect"
117-
when 308 then "Permanent Redirect"
118-
else "Redirected"
110+
when 301 then 'Moved Permanently'
111+
when 302 then 'Found'
112+
when 307 then 'Temporary Redirect'
113+
when 308 then 'Permanent Redirect'
114+
else 'Redirected'
119115
end
120116
end
121117
end

lib/rack/url_canonicalizer/configuration.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ def initialize
1717
@collapse_slashes = true
1818
@strip_trailing_slash = true
1919
@exclude_paths = []
20-
@locale_param = "locale"
20+
@locale_param = 'locale'
2121
@allowed_locales = nil
2222
@redirect_status = 301
23-
@cache_control = "public, max-age=86400"
23+
@cache_control = 'public, max-age=86400'
2424
end
2525

2626
def allowed_locales_list

lib/rack/url_canonicalizer/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
module Rack
44
class UrlCanonicalizer
5-
VERSION = "0.1.0"
5+
VERSION = '0.1.0'
66
end
77
end

rack-url-canonicalizer.gemspec

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
11
# frozen_string_literal: true
22

3-
require_relative "lib/rack/url_canonicalizer/version"
3+
require_relative 'lib/rack/url_canonicalizer/version'
44

55
Gem::Specification.new do |spec|
6-
spec.name = "rack-url-canonicalizer"
6+
spec.name = 'rack-url-canonicalizer'
77
spec.version = Rack::UrlCanonicalizer::VERSION
8-
spec.authors = [ "Alex Abramov" ]
9-
spec.email = [ "omgout.200@gmail.com" ]
8+
spec.authors = ['Alex Abramov']
9+
spec.email = ['omgout.200@gmail.com']
1010

11-
spec.summary = "Rack middleware for URL normalization and SEO canonicalization"
12-
spec.description = "Removes www, collapses slashes, strips trailing slashes, and validates locale params to prevent duplicate content SEO penalties."
13-
spec.homepage = "https://github.com/o-200/rack-url-canonicalizer"
14-
spec.license = "MIT"
15-
spec.required_ruby_version = ">= 3.0.0"
11+
spec.summary = 'Rack middleware for URL normalization and SEO canonicalization'
12+
spec.description = 'Removes www, collapses slashes, strips trailing slashes, and validates locale params to prevent duplicate content SEO penalties.'
13+
spec.homepage = 'https://github.com/o-200/rack-url-canonicalizer'
14+
spec.license = 'MIT'
15+
spec.required_ruby_version = '>= 3.0.0'
1616

17-
spec.files = Dir["LICENSE.txt", "README.md", "lib/**/*"]
18-
spec.require_paths = [ "lib" ]
17+
spec.files = Dir['LICENSE.txt', 'README.md', 'lib/**/*']
18+
spec.require_paths = ['lib']
1919

20-
spec.add_dependency "rack", ">= 2.0"
20+
spec.add_dependency 'rack', '>= 2.0'
2121

22-
spec.add_development_dependency "bundler", ">= 2.0"
23-
spec.add_development_dependency "rake", "~> 13.0"
24-
spec.add_development_dependency "rspec", "~> 3.0"
25-
spec.add_development_dependency "rack-test", ">= 2.0"
22+
spec.add_development_dependency 'bundler', '>= 2.0'
23+
spec.add_development_dependency 'rack-test', '>= 2.0'
24+
spec.add_development_dependency 'rake', '~> 13.0'
25+
spec.add_development_dependency 'rspec', '~> 3.0'
26+
spec.add_development_dependency 'rubocop', '~> 1.0'
27+
spec.metadata['rubygems_mfa_required'] = 'true'
2628
end

0 commit comments

Comments
 (0)