linkhum-url 0.1.0 → 0.1.1

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +9 -6
  4. data/lib/linkhum/url.rb +9 -1
  5. metadata +32 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2499da4f4ea690201eb85d3f2e8942b90655629e
4
- data.tar.gz: c4738dc13d7dab8dba1008b89cce1c09d360fe13
3
+ metadata.gz: d8aa891eed2cfe43008f162c21df1f7f475d6505
4
+ data.tar.gz: 08261faca4002474b5632f34a2e0c4feaaa067fc
5
5
  SHA512:
6
- metadata.gz: c7dc9f9ec8fa62d742ff51a3cdeac046353f83833341f57c76d57b0e726dd54719bb22c70bf969f4109d3fdb08660fb376d7155c0b7e02ef4f24e3c55dc08bb2
7
- data.tar.gz: 1359bf86a29b802371fa7411068adda60fb7db20fd7793e533c27620867aac71de6cdc4450f17a68ca8046b56a10ed58fb80585bf235d4b16addac4b1e37ed88
6
+ metadata.gz: bf51abd8b3e08070bb62627e69d633ad5801ddb061dbb68461313fd9af1a8b20bb87c2ee8dc534d9ec307c295ff8382202cb44c3122067405e73c96a1c8310d0
7
+ data.tar.gz: 032b83a347f6756256306e2f485d87b83fd42e2f7ed452b7a6af551c3f110496d6ad3186057816cc18c11fa10e88c256d05abe39b0154397d1c1283d92364557
data/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ 0.1.1:
2
+
3
+ * Handle percent-encoded non-UTF8 query strings: return
4
+ percent-encoded value as human-readable (we have no way of guessing the original encoding);
5
+
6
+ 0.1.0:
7
+
8
+ * Initial release.
data/README.md CHANGED
@@ -10,6 +10,8 @@ scenes `addressable` gem is used to handle actual URL parsing.
10
10
  This is a sister gem to
11
11
  [`linkhum`](https://github.com/zverok/linkhum).
12
12
 
13
+ [![Build Status](https://travis-ci.org/squadette/linkhum-url.svg?branch=master)](https://travis-ci.org/squadette/linkhum-url)
14
+
13
15
  ## Usage
14
16
 
15
17
  `linkhum-url` has only one method: `Linkhum::URL.parse(url)`. It
@@ -24,19 +26,20 @@ embedding etc.
24
26
  => true
25
27
  2.3.0 :002 > Linkhum::URL.parse("https://example.org")
26
28
  => {:human_readable=>"https://example.org", :url_encoded=>"https://example.org"}
27
- 2.3.0 :003 > Linkhum::URL.parse("https://пивбар.рф/поиск.html?q=пивбар")
28
- => {:human_readable=>"https://пивбар.рф/поиск.html?q=пивбар", :url_encoded=>"https://xn--80abcx8ak.xn--p1ai/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA.html?q=%D0%BF%D0%B8%D0%B2%D0%B1%D0%B0%D1%80"}
29
+ 2.3.0 :003 > Linkhum::URL.parse("https://пивбар-хмель.рф/поиск.html?q=пивбар")
30
+ => {:human_readable=>"https://пивбар-хмель.рф/поиск.html?q=пивбар", :url_encoded=>"https://xn----7sbcdsn0agvo0d1e.xn--p1ai/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA.html?q=%D0%BF%D0%B8%D0%B2%D0%B1%D0%B0%D1%80"}
29
31
  2.3.0 :004 > Linkhum::URL.parse("https://xn--80abcx8ak.xn--p1ai/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA.html?q=%D0%BF%D0%B8%D0%B2%D0%B1%D0%B0%D1%80")
30
- => {:human_readable=>"https://пивбар.рф/поиск.html?q=пивбар", :url_encoded=>"https://xn--80abcx8ak.xn--p1ai/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA.html?q=%D0%BF%D0%B8%D0%B2%D0%B1%D0%B0%D1%80"}
32
+ => {:human_readable=>"https://пивбар-хмель.рф/поиск.html?q=пивбар", :url_encoded=>"https://xn----7sbcdsn0agvo0d1e.xn--p1ai/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA.html?q=%D0%BF%D0%B8%D0%B2%D0%B1%D0%B0%D1%80"}
31
33
 
32
34
  ## Install
33
35
 
34
36
  $ sudo apt-get install idn # Debian/Ubuntu
35
- $ brew install libidn # OS X
37
+ $ brew install libidn # Mac OS X
36
38
 
37
39
  $ gem install linkhum-url
38
40
 
39
41
  ## License
40
42
 
41
- `linkhum-url` released under MIT License. Copyright (C) Alexey
42
- Makhotkin, 2016.
43
+ `linkhum-url` released under MIT License.
44
+
45
+ Copyright (C) Alexey Makhotkin, 2016.
data/lib/linkhum/url.rb CHANGED
@@ -29,6 +29,13 @@ module Linkhum
29
29
  url_encoded[:path] = Addressable::URI.encode_component(au_path)
30
30
 
31
31
  human_readable[:query] = Addressable::URI.unencode_component(au.query)
32
+ if au.query
33
+ decoded_query = human_readable[:query].dup
34
+ if !decoded_query.force_encoding(Encoding::UTF_8).valid_encoding?
35
+ human_readable[:query] = au.query
36
+ end
37
+ end
38
+
32
39
  if au.query
33
40
  # see above
34
41
  au_query = au.query.dup
@@ -49,9 +56,10 @@ module Linkhum
49
56
 
50
57
  private
51
58
  def self.generate_url(parts)
59
+ userinfo_part = parts[:userinfo] ? "#{parts[:userinfo]}@" : ""
52
60
  query_part = parts[:query] ? "?#{parts[:query]}" : ""
53
61
  fragment_part = parts[:fragment] ? "##{parts[:fragment]}" : ""
54
- "#{parts[:scheme]}://#{parts[:userinfo]}#{parts[:host]}#{parts[:path]}#{query_part}#{fragment_part}"
62
+ "#{parts[:scheme]}://#{userinfo_part}#{parts[:host]}#{parts[:path]}#{query_part}#{fragment_part}"
55
63
  end
56
64
  end
57
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linkhum-url
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Makhotkin
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: travis
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.8'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.8'
55
83
  description: 'Input URL could be both human-readable and URL-encoded. Two URLs are
56
84
  returned as result: human-readable and URL-encoded'
57
85
  email: squadette@gmail.com
@@ -59,6 +87,7 @@ executables: []
59
87
  extensions: []
60
88
  extra_rdoc_files: []
61
89
  files:
90
+ - CHANGELOG.md
62
91
  - LICENSE.txt
63
92
  - README.md
64
93
  - lib/linkhum-url.rb
@@ -73,9 +102,9 @@ require_paths:
73
102
  - lib
74
103
  required_ruby_version: !ruby/object:Gem::Requirement
75
104
  requirements:
76
- - - ">="
105
+ - - "~>"
77
106
  - !ruby/object:Gem::Version
78
- version: '0'
107
+ version: '2.2'
79
108
  required_rubygems_version: !ruby/object:Gem::Requirement
80
109
  requirements:
81
110
  - - ">="