url_canonicalize 0.2.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 510cbc3c33819c97d28ca20d712d18c2ea25ccf29846b5f6f5c35e3e92b67513
4
- data.tar.gz: f9ec2c8be1e3d23d2a0011de38452577b0d4978924b77f409229204df6cea2c0
3
+ metadata.gz: 660347135be60bf3324f23f796121f9d82b7a8ab44924d2a03f8b1d4d5bff2cf
4
+ data.tar.gz: 0fd6bf4532334bbd631fe4b829cddac92d1780d679dbb77bff6b4a95b5475eb6
5
5
  SHA512:
6
- metadata.gz: f12b8967b5399aea9cd88642d14c1ed570e158ee62beb6642dd8e3534c42435064659a6ed49aea6f6f0adc3dab38455d83f71919fd1e5407239798579986adf5
7
- data.tar.gz: d850c233c28d0d5cef5a7abe670278a69f35c9c4d7fee12886ae77b51030d3bb73fdb00e1b19a2a72558d3dffddcc736c7f374de987f6763e1fda24f875c1124
6
+ metadata.gz: d9e654dcd8bf45a3261b5a7f9e2d1ce3f4e0f4dab80b48162cc8d9ae59493831060216b084b669820344414c4879557223faaabffc83f8003ca61f1a760c0d94
7
+ data.tar.gz: bb8f6459c22401e47fa050e367a9a3f7e719ac38f25758e6ecce4a30f6973c1b6e5753818127c215254cef8d9858356cd7b5c47ab55b882a1ba70b8971bcad82
@@ -0,0 +1,70 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ main ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ main ]
20
+ schedule:
21
+ - cron: '28 12 * * 5'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v4
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v3
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
+
53
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
+ # If this step fails, then you should remove it and run the build manually (see below)
55
+ - name: Autobuild
56
+ uses: github/codeql-action/autobuild@v3
57
+
58
+ # ℹ️ Command-line programs to run using the OS shell.
59
+ # 📚 https://git.io/JvXDl
60
+
61
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
+ # and modify them (or add more) to build your code if your project
63
+ # uses a compiled language
64
+
65
+ #- run: |
66
+ # make bootstrap
67
+ # make release
68
+
69
+ - name: Perform CodeQL Analysis
70
+ uses: github/codeql-action/analyze@v3
data/.gitignore CHANGED
@@ -1,4 +1,3 @@
1
- Gemfile.lock
2
1
  *.local
3
2
  *.gem
4
3
  *.rbc
@@ -50,3 +49,5 @@ build-iPhoneSimulator/
50
49
 
51
50
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
52
51
  .rvmrc
52
+
53
+ .vscode/
data/.rubocop.yml CHANGED
@@ -2,11 +2,8 @@
2
2
  AllCops:
3
3
  DisplayStyleGuide: true
4
4
  DisplayCopNames: true
5
- TargetRubyVersion: 2.2
6
- Exclude:
7
- - '*.gemspec'
8
- - spec/**/*
9
-
5
+ TargetRubyVersion: 3.1
6
+ NewCops: enable
10
7
 
11
8
  Layout/DotPosition:
12
9
  Description: 'Checks the position of the dot in multi-line method calls.'
@@ -17,10 +14,19 @@ Layout/ExtraSpacing:
17
14
  Description: 'Do not use unnecessary spacing.'
18
15
  Enabled: true
19
16
 
17
+ Layout/LineLength:
18
+ Max: 120
19
+ Exclude:
20
+ - spec/**/*
21
+
20
22
  Lint/LiteralInInterpolation:
21
23
  Description: 'Avoid interpolating literals in strings'
22
24
  AutoCorrect: true
23
25
 
26
+ Metrics/BlockLength:
27
+ Exclude:
28
+ - spec/**/*
29
+
24
30
  Metrics/ClassLength:
25
31
  CountComments: false # count full line comments?
26
32
  Max: 200
@@ -28,11 +34,6 @@ Metrics/ClassLength:
28
34
  Metrics/MethodLength:
29
35
  Max: 12
30
36
 
31
- Metrics/LineLength:
32
- Max: 120
33
- Exclude:
34
- - spec/**/*
35
-
36
37
  Naming/FileName:
37
38
  Description: 'Use snake_case for source file names.'
38
39
  Enabled: true
data/.ruby-gemset CHANGED
File without changes
data/.travis.yml CHANGED
@@ -1,10 +1,8 @@
1
1
  ---
2
2
  language: ruby
3
3
  rvm:
4
- - 2.2
5
- - 2.3
6
- - 2.4
7
- - 2.5
8
- - 2.6
4
+ - 3.1
5
+ - 3.2
6
+ - 3.3
9
7
  script:
10
8
  - rspec
data/CHANGELOG.md CHANGED
@@ -1,21 +1,39 @@
1
- # Change Log
1
+ # Changelog
2
+
3
+ ## [Unreleased](https://github.com/dominicsayers/url_canonicalize/tree/HEAD)
4
+
5
+ [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.15...HEAD)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Feature: return a Nokogiri XML document if requested [\#5](https://github.com/dominicsayers/url_canonicalize/issues/5)
10
+
11
+ **Merged pull requests:**
12
+
13
+ - Version 0.2 [\#6](https://github.com/dominicsayers/url_canonicalize/pull/6) ([dominicsayers](https://github.com/dominicsayers))
2
14
 
3
15
  ## [v0.1.15](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.15) (2017-03-14)
16
+
4
17
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.14...v0.1.15)
5
18
 
6
19
  ## [v0.1.14](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.14) (2017-03-13)
20
+
7
21
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.13...v0.1.14)
8
22
 
9
23
  ## [v0.1.13](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.13) (2017-03-13)
24
+
10
25
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.12...v0.1.13)
11
26
 
12
27
  ## [v0.1.12](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.12) (2017-03-13)
28
+
13
29
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.11...v0.1.12)
14
30
 
15
31
  ## [v0.1.11](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.11) (2017-03-13)
32
+
16
33
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.10...v0.1.11)
17
34
 
18
35
  ## [v0.1.10](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.10) (2017-03-13)
36
+
19
37
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.9...v0.1.10)
20
38
 
21
39
  **Closed issues:**
@@ -23,9 +41,11 @@
23
41
  - URLCanonicalize doesn't accept host names [\#4](https://github.com/dominicsayers/url_canonicalize/issues/4)
24
42
 
25
43
  ## [v0.1.9](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.9) (2017-03-06)
44
+
26
45
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.8...v0.1.9)
27
46
 
28
47
  ## [v0.1.8](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.8) (2017-03-06)
48
+
29
49
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.7...v0.1.8)
30
50
 
31
51
  **Closed issues:**
@@ -33,6 +53,7 @@
33
53
  - Use a later version of Ruby on CircleCI [\#3](https://github.com/dominicsayers/url_canonicalize/issues/3)
34
54
 
35
55
  ## [v0.1.7](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.7) (2017-03-06)
56
+
36
57
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.6...v0.1.7)
37
58
 
38
59
  **Closed issues:**
@@ -40,42 +61,57 @@
40
61
  - Insecure version of Nokogiri [\#2](https://github.com/dominicsayers/url_canonicalize/issues/2)
41
62
 
42
63
  ## [v0.1.6](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.6) (2017-03-06)
64
+
43
65
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.5...v0.1.6)
44
66
 
45
67
  ## [v0.1.5](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.5) (2016-10-26)
68
+
46
69
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.4...v0.1.5)
47
70
 
48
71
  ## [v0.1.4](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.4) (2016-10-26)
72
+
49
73
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.2...v0.1.4)
50
74
 
51
75
  ## [v0.1.2](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.2) (2016-10-26)
76
+
52
77
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.1...v0.1.2)
53
78
 
54
79
  ## [v0.1.1](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.1) (2016-10-26)
80
+
55
81
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.1.0...v0.1.1)
56
82
 
57
83
  ## [v0.1.0](https://github.com/dominicsayers/url_canonicalize/tree/v0.1.0) (2016-10-20)
84
+
58
85
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.0.7...v0.1.0)
59
86
 
60
87
  ## [v0.0.7](https://github.com/dominicsayers/url_canonicalize/tree/v0.0.7) (2016-10-20)
88
+
61
89
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.0.6...v0.0.7)
62
90
 
63
91
  ## [v0.0.6](https://github.com/dominicsayers/url_canonicalize/tree/v0.0.6) (2016-10-20)
92
+
64
93
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.0.5...v0.0.6)
65
94
 
66
95
  ## [v0.0.5](https://github.com/dominicsayers/url_canonicalize/tree/v0.0.5) (2016-10-20)
96
+
67
97
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.0.4...v0.0.5)
68
98
 
69
99
  ## [v0.0.4](https://github.com/dominicsayers/url_canonicalize/tree/v0.0.4) (2016-10-20)
100
+
70
101
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.0.3...v0.0.4)
71
102
 
72
103
  ## [v0.0.3](https://github.com/dominicsayers/url_canonicalize/tree/v0.0.3) (2016-10-20)
104
+
73
105
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.0.2...v0.0.3)
74
106
 
75
107
  ## [v0.0.2](https://github.com/dominicsayers/url_canonicalize/tree/v0.0.2) (2016-10-20)
108
+
76
109
  [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/v0.0.1...v0.0.2)
77
110
 
78
111
  ## [v0.0.1](https://github.com/dominicsayers/url_canonicalize/tree/v0.0.1) (2016-10-20)
79
112
 
113
+ [Full Changelog](https://github.com/dominicsayers/url_canonicalize/compare/fec855bec42813304f93c8ef87035f184b054344...v0.0.1)
114
+
115
+
80
116
 
81
- \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
117
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/Gemfile CHANGED
@@ -4,16 +4,19 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
+ group :static_code_analysis do
8
+ gem 'rubocop', require: false
9
+ gem 'rubocop-rspec', require: false
10
+ end
11
+
7
12
  group :test do
8
- gem 'coveralls', require: false
13
+ gem 'coveralls-ruby', require: false
9
14
  gem 'rspec'
10
15
  gem 'rspec_junit_formatter'
11
- gem 'simplecov', '~> 0.13'
16
+ gem 'simplecov'
12
17
  gem 'webmock'
13
18
  end
14
19
 
15
- local_gemfile = 'Gemfile.local'
16
-
17
- if File.exist?(local_gemfile)
18
- eval(File.read(local_gemfile)) # rubocop:disable Security/Eval
20
+ group :build do
21
+ gem 'gem-release', require: false
19
22
  end
data/Gemfile.lock ADDED
@@ -0,0 +1,110 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ url_canonicalize (1.0.0)
5
+ addressable (~> 2)
6
+ nokogiri (>= 1.13)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.8.6)
12
+ public_suffix (>= 2.0.2, < 6.0)
13
+ ast (2.4.2)
14
+ coveralls-ruby (0.2.0)
15
+ json (>= 1.8, < 3)
16
+ simplecov (~> 0.16.1)
17
+ term-ansicolor (~> 1.3)
18
+ thor (>= 0.19.4, < 2.0)
19
+ tins (~> 1.6)
20
+ crack (0.4.5)
21
+ rexml
22
+ diff-lcs (1.5.0)
23
+ docile (1.4.0)
24
+ gem-release (2.2.2)
25
+ hashdiff (1.1.0)
26
+ json (2.7.1)
27
+ language_server-protocol (3.17.0.3)
28
+ mini_portile2 (2.8.5)
29
+ nokogiri (1.13.10)
30
+ mini_portile2 (~> 2.8.0)
31
+ racc (~> 1.4)
32
+ parallel (1.24.0)
33
+ parser (3.3.0.5)
34
+ ast (~> 2.4.1)
35
+ racc
36
+ public_suffix (4.0.7)
37
+ racc (1.6.1)
38
+ rainbow (3.1.1)
39
+ regexp_parser (2.9.0)
40
+ rexml (3.2.6)
41
+ rspec (3.12.0)
42
+ rspec-core (~> 3.12.0)
43
+ rspec-expectations (~> 3.12.0)
44
+ rspec-mocks (~> 3.12.0)
45
+ rspec-core (3.12.2)
46
+ rspec-support (~> 3.12.0)
47
+ rspec-expectations (3.12.3)
48
+ diff-lcs (>= 1.2.0, < 2.0)
49
+ rspec-support (~> 3.12.0)
50
+ rspec-mocks (3.12.6)
51
+ diff-lcs (>= 1.2.0, < 2.0)
52
+ rspec-support (~> 3.12.0)
53
+ rspec-support (3.12.1)
54
+ rspec_junit_formatter (0.6.0)
55
+ rspec-core (>= 2, < 4, != 2.12.0)
56
+ rubocop (1.60.2)
57
+ json (~> 2.3)
58
+ language_server-protocol (>= 3.17.0)
59
+ parallel (~> 1.10)
60
+ parser (>= 3.3.0.2)
61
+ rainbow (>= 2.2.2, < 4.0)
62
+ regexp_parser (>= 1.8, < 3.0)
63
+ rexml (>= 3.2.5, < 4.0)
64
+ rubocop-ast (>= 1.30.0, < 2.0)
65
+ ruby-progressbar (~> 1.7)
66
+ unicode-display_width (>= 2.4.0, < 3.0)
67
+ rubocop-ast (1.30.0)
68
+ parser (>= 3.2.1.0)
69
+ rubocop-capybara (2.20.0)
70
+ rubocop (~> 1.41)
71
+ rubocop-factory_bot (2.25.1)
72
+ rubocop (~> 1.41)
73
+ rubocop-rspec (2.26.1)
74
+ rubocop (~> 1.40)
75
+ rubocop-capybara (~> 2.17)
76
+ rubocop-factory_bot (~> 2.22)
77
+ ruby-progressbar (1.13.0)
78
+ simplecov (0.16.1)
79
+ docile (~> 1.1)
80
+ json (>= 1.8, < 3)
81
+ simplecov-html (~> 0.10.0)
82
+ simplecov-html (0.10.2)
83
+ sync (0.5.0)
84
+ term-ansicolor (1.7.1)
85
+ tins (~> 1.0)
86
+ thor (1.2.1)
87
+ tins (1.31.0)
88
+ sync
89
+ unicode-display_width (2.5.0)
90
+ webmock (3.19.1)
91
+ addressable (>= 2.8.0)
92
+ crack (>= 0.3.2)
93
+ hashdiff (>= 0.4.0, < 2.0.0)
94
+
95
+ PLATFORMS
96
+ x86_64-linux
97
+
98
+ DEPENDENCIES
99
+ coveralls-ruby
100
+ gem-release
101
+ rspec
102
+ rspec_junit_formatter
103
+ rubocop
104
+ rubocop-rspec
105
+ simplecov
106
+ url_canonicalize!
107
+ webmock
108
+
109
+ BUNDLED WITH
110
+ 2.5.5
data/README.md CHANGED
@@ -3,7 +3,6 @@
3
3
  [![Gem downloads](https://img.shields.io/gem/dt/url_canonicalize.svg)](https://rubygems.org/gems/url_canonicalize)
4
4
  [![Build status](https://img.shields.io/circleci/project/dominicsayers/url_canonicalize/master.svg)](https://circleci.com/gh/dominicsayers/url_canonicalize)
5
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/1f92f784d12741a942ec/maintainability)](https://codeclimate.com/github/dominicsayers/url_canonicalize/maintainability)
6
- [![Test Coverage](https://api.codeclimate.com/v1/badges/1f92f784d12741a942ec/test_coverage)](https://codeclimate.com/github/dominicsayers/url_canonicalize/test_coverage)
7
6
  [![Coverage Status](https://coveralls.io/repos/github/dominicsayers/url_canonicalize/badge.svg?branch=master)](https://coveralls.io/github/dominicsayers/url_canonicalize?branch=master)
8
7
  [![Dependency Status](https://dependencyci.com/github/dominicsayers/url_canonicalize/badge)](https://dependencyci.com/github/dominicsayers/url_canonicalize)
9
8
  [![Security](https://hakiri.io/github/dominicsayers/url_canonicalize/master.svg)](https://hakiri.io/github/dominicsayers/url_canonicalize/master)
data/circle.yml CHANGED
@@ -1,16 +1,29 @@
1
- machine:
2
- ruby:
3
- version: 2.4.0
4
- dependencies:
5
- pre:
6
- - echo "export rvm_ignore_gemsets_flag=1" >> ~/.rvmrc
7
- - gem install bundler
8
- override:
9
- - bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3 --full-index
10
- test:
11
- override:
12
- - bundle exec rspec:
13
- timeout: 600
14
- parallel: true
15
- files:
16
- - spec/**/*_spec.rb
1
+ version: 2.1
2
+ orbs:
3
+ ruby: circleci/ruby@1.1
4
+ jobs:
5
+ check_and_test:
6
+ parameters:
7
+ ruby-version:
8
+ type: string
9
+ docker:
10
+ - image: cimg/ruby:<< parameters.ruby-version >>
11
+ parallelism: 3
12
+ steps:
13
+ - checkout
14
+ - ruby/install-deps
15
+ - run:
16
+ name: Run static code analysis
17
+ command: bundle exec rubocop
18
+ - run:
19
+ name: Run tests
20
+ command: bundle exec rspec
21
+ workflows:
22
+ version: 2
23
+ test:
24
+ jobs:
25
+ - check_and_test:
26
+ # cribbed from http://mikebian.co/running-tests-against-multiple-ruby-versions-using-circleci/
27
+ matrix:
28
+ parameters:
29
+ ruby-version: ["3.1", "3.2", "3.3"]
@@ -72,6 +72,7 @@ module URLCanonicalize
72
72
  def redirect_loop_detected?
73
73
  if redirect_list.include?(response_url)
74
74
  return true if last_known_good
75
+
75
76
  raise URLCanonicalize::Exception::Redirect, 'Redirect loop detected'
76
77
  end
77
78
 
@@ -84,6 +85,7 @@ module URLCanonicalize
84
85
  def max_redirects_reached?
85
86
  return false unless @redirects > options[:max_redirects]
86
87
  return true if last_known_good
88
+
87
89
  raise URLCanonicalize::Exception::Redirect, "#{@redirects} redirects is too many"
88
90
  end
89
91
 
@@ -102,6 +104,7 @@ module URLCanonicalize
102
104
  def handle_canonical_found
103
105
  self.last_known_good = response.response
104
106
  return true if response_url == url || redirect_list.include?(response_url)
107
+
105
108
  set_url_from_response
106
109
  false
107
110
  end
@@ -112,6 +115,7 @@ module URLCanonicalize
112
115
 
113
116
  def handle_failure
114
117
  return true if last_known_good
118
+
115
119
  raise URLCanonicalize::Exception::Failure, "#{response.failure_class}: #{response.message}"
116
120
  end
117
121
 
@@ -149,14 +153,18 @@ module URLCanonicalize
149
153
  h.open_timeout = options[:open_timeout]
150
154
  h.read_timeout = options[:read_timeout]
151
155
 
156
+ ssl!(h)
157
+
158
+ h
159
+ end
160
+
161
+ def ssl!(http)
152
162
  if uri.scheme == 'https'
153
- h.use_ssl = true # Can generate exception
154
- h.verify_mode = OpenSSL::SSL::VERIFY_NONE
163
+ http.use_ssl = true # Can generate exception
164
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
155
165
  else
156
- h.use_ssl = false
166
+ http.use_ssl = false
157
167
  end
158
-
159
- h
160
168
  end
161
169
 
162
170
  def options
@@ -38,7 +38,7 @@ module URLCanonicalize
38
38
  end
39
39
 
40
40
  # We can stub this method in testing then call #response any number of times
41
- def do_http_request #:nodoc: internal use only
41
+ def do_http_request # :nodoc: internal use only
42
42
  http.do_request request # Some URLs can throw an exception here
43
43
  end
44
44
 
@@ -147,8 +147,8 @@ module URLCanonicalize
147
147
  def headers
148
148
  @headers ||= {
149
149
  'Accept-Language' => 'en-US,en;q=0.8',
150
- 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) '\
151
- 'AppleWebKit/537.36 (KHTML, like Gecko) '\
150
+ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) ' \
151
+ 'AppleWebKit/537.36 (KHTML, like Gecko) ' \
152
152
  'Chrome/51.0.2704.103 Safari/537.36'
153
153
  }
154
154
  end
@@ -170,6 +170,7 @@ module URLCanonicalize
170
170
 
171
171
  def relative_to_absolute(partial_url)
172
172
  return unless partial_url
173
+
173
174
  partial_uri = ::URI.parse(partial_url)
174
175
 
175
176
  if partial_uri.host
@@ -183,9 +184,11 @@ module URLCanonicalize
183
184
 
184
185
  def log_response
185
186
  return unless ENV['DEBUG']
187
+
186
188
  puts "#{http_method.upcase} #{url} #{response.code} #{response.message}"
187
189
 
188
190
  return unless ENV['DEBUG'].casecmp('headers')
191
+
189
192
  response.each { |k, v| puts " #{k}:\t#{v}" }
190
193
  end
191
194
 
@@ -28,7 +28,7 @@ module URLCanonicalize
28
28
  def initialize(url, response, html)
29
29
  @response = response
30
30
  @html = html
31
- super url
31
+ super(url)
32
32
  end
33
33
  end
34
34
 
@@ -40,7 +40,7 @@ module URLCanonicalize
40
40
 
41
41
  def initialize(url, response)
42
42
  @response = response
43
- super url
43
+ super(url)
44
44
  end
45
45
  end
46
46
 
@@ -18,16 +18,19 @@ module URLCanonicalize
18
18
  def valid?(uri)
19
19
  raise URLCanonicalize::Exception::URI, "#{uri} must be http or https" unless VALID_CLASSES.include?(uri.class)
20
20
  raise URLCanonicalize::Exception::URI, "Missing host name in #{uri}" unless uri.host
21
+ raise URLCanonicalize::Exception::URI, "Empty host name in #{uri}" if uri.host.empty?
22
+
21
23
  true
22
24
  end
23
25
 
24
26
  def decorate(url)
25
27
  return url if url.include? COLON
28
+
26
29
  "http://#{url}" # Add protocol if we just receive a host name
27
30
  end
28
31
 
29
32
  VALID_CLASSES = [::URI::HTTP, ::URI::HTTPS].freeze
30
- COLON = ':'.freeze
33
+ COLON = ':'
31
34
  end
32
35
  end
33
36
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module URLCanonicalize
4
- VERSION = '0.2.0'.freeze
4
+ VERSION = '1.0.0'
5
5
  end
data/renovate.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "config:recommended"
5
+ ]
6
+ }
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'url_canonicalize/version'
5
6
 
@@ -9,20 +10,20 @@ Gem::Specification.new do |s|
9
10
  s.authors = ['Dominic Sayers']
10
11
  s.email = ['dominic@sayers.cc']
11
12
  s.summary = 'Finds the canonical version of a URL'
12
- s.description = 'Rubygem that finds the canonical version of a URL by '\
13
- 'providing #canonicalize methods for the String, URI::HTTP'\
13
+ s.description = 'Rubygem that finds the canonical version of a URL by ' \
14
+ 'providing #canonicalize methods for the String, URI::HTTP' \
14
15
  ', URI::HTTPS and Addressable::URI classes'
15
16
  s.homepage = 'https://github.com/dominicsayers/url_canonicalize'
16
17
  s.license = 'MIT'
17
18
 
18
- s.files = `git ls-files`.split($RS).reject do |file|
19
- file =~ /^spec\//
20
- end
19
+ s.required_ruby_version = '>= 3.1.0'
20
+
21
+ s.files = `git ls-files`.split($RS).grep_v(%r{^spec/})
21
22
 
22
- s.test_files = []
23
23
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
24
  s.require_paths = ['lib']
25
25
 
26
- s.add_dependency 'addressable', '~> 2' # To normalize URLs
27
- s.add_dependency 'nokogiri', '>= 1.8.2' # To look for <link rel="canonical" ...> in HTML
26
+ s.add_runtime_dependency 'addressable', '~> 2' # To normalize URLs
27
+ s.add_runtime_dependency 'nokogiri', '>= 1.13' # To look for <link rel="canonical" ...> in HTML
28
+ s.metadata['rubygems_mfa_required'] = 'true'
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: url_canonicalize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominic Sayers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-30 00:00:00.000000000 Z
11
+ date: 2024-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.8.2
33
+ version: '1.13'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.8.2
40
+ version: '1.13'
41
41
  description: 'Rubygem that finds the canonical version of a URL by providing #canonicalize
42
42
  methods for the String, URI::HTTP, URI::HTTPS and Addressable::URI classes'
43
43
  email:
@@ -47,6 +47,7 @@ extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
49
  - ".codeclimate.yml"
50
+ - ".github/workflows/codeql-analysis.yml"
50
51
  - ".gitignore"
51
52
  - ".hound.yml"
52
53
  - ".rspec"
@@ -55,7 +56,7 @@ files:
55
56
  - ".travis.yml"
56
57
  - CHANGELOG.md
57
58
  - Gemfile
58
- - Gemfile.local.example
59
+ - Gemfile.lock
59
60
  - Guardfile
60
61
  - LICENSE
61
62
  - README.md
@@ -71,11 +72,13 @@ files:
71
72
  - lib/url_canonicalize/response.rb
72
73
  - lib/url_canonicalize/uri.rb
73
74
  - lib/url_canonicalize/version.rb
75
+ - renovate.json
74
76
  - url_canonicalize.gemspec
75
77
  homepage: https://github.com/dominicsayers/url_canonicalize
76
78
  licenses:
77
79
  - MIT
78
- metadata: {}
80
+ metadata:
81
+ rubygems_mfa_required: 'true'
79
82
  post_install_message:
80
83
  rdoc_options: []
81
84
  require_paths:
@@ -84,15 +87,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
87
  requirements:
85
88
  - - ">="
86
89
  - !ruby/object:Gem::Version
87
- version: '0'
90
+ version: 3.1.0
88
91
  required_rubygems_version: !ruby/object:Gem::Requirement
89
92
  requirements:
90
93
  - - ">="
91
94
  - !ruby/object:Gem::Version
92
95
  version: '0'
93
96
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.7.7
97
+ rubygems_version: 3.4.6
96
98
  signing_key:
97
99
  specification_version: 4
98
100
  summary: Finds the canonical version of a URL
@@ -1,12 +0,0 @@
1
- # Copy this file to a file named Gemfile.local to add these gems to your dev toolset
2
- # Feel free to modify Gemfile.local to suit your own preferences
3
- group :development do
4
- gem 'github_changelog_generator'
5
- gem 'gem-release'
6
- gem 'guard'
7
- gem 'guard-rspec'
8
- gem 'guard-rubocop'
9
- gem 'listen', '~> 3.0', '< 3.1' # Dependency of guard, 3.1 requires Ruby 2.2+
10
- gem 'rake'
11
- gem 'rubocop'
12
- end