http_headers-utils 0.1.1 → 0.2.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 +4 -4
- data/CHANGELOG.md +10 -1
- data/Gemfile.lock +1 -1
- data/lib/http_headers/utils.rb +2 -0
- data/lib/http_headers/utils/list.rb +21 -28
- data/lib/http_headers/utils/single.rb +23 -0
- data/lib/http_headers/utils/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7f3ae6d09938a47e48e9459736fe03829cb53d05c2e4d67dfac7ce7c91b853b
|
4
|
+
data.tar.gz: 464ef40919624f9d2e40ba66bc190649e9b87a3dc20c1ef4bea7d1b862e8ff8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54ed03eadbe9b7d7c658d2083413c607f8c8ecbc60c6248d7787c59f877349cbed77c393d9f4391b1b5dbd5fac357acf05e0309b56e99cf9a2ce69c8b6b72faf
|
7
|
+
data.tar.gz: 53a3145d07bc953cc0d04a1e665b0da0b61ab3e56c11ae1f4024824384c851f1b8249777c8753ea7c656e0f244e5711796aa72653e0753f20d8fc705d599318c
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.2.0
|
4
|
+
|
5
|
+
- Fix whitespace on input by using `strip`
|
6
|
+
- Change `List` from `class` to `module`
|
7
|
+
- Change `List.new` to automatically sort
|
8
|
+
- Add `Single` for a single header value
|
9
|
+
- Add `to_header` lookup and implementation for `Single` and `List`
|
10
|
+
- Change `to_header` to use `HEADER_DELIMITER`
|
11
|
+
|
3
12
|
## 0.1.1
|
4
13
|
|
5
|
-
Add a missing require to `delegate`
|
14
|
+
- Add a missing require to `delegate`
|
6
15
|
|
7
16
|
## 0.1.0
|
8
17
|
|
data/Gemfile.lock
CHANGED
data/lib/http_headers/utils.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
|
-
require 'delegate'
|
2
|
-
|
3
1
|
module HttpHeaders
|
4
2
|
module Utils
|
5
3
|
|
6
4
|
##
|
7
5
|
# @example Accept values
|
8
6
|
#
|
9
|
-
# class Accept <
|
7
|
+
# class Accept < DelegateClass(Array)
|
10
8
|
# def initialize(value)
|
11
|
-
# super value, entry_klazz: Accept::Entry
|
12
|
-
# sort!
|
9
|
+
# super HttpHeaders::List.new(value, entry_klazz: Accept::Entry)
|
13
10
|
# end
|
14
11
|
#
|
15
12
|
# class Entry
|
@@ -32,39 +29,35 @@ module HttpHeaders
|
|
32
29
|
# Accept.new(['*/*; q=0.1', 'application/json, text/html; q=0.8'])
|
33
30
|
# # => List['application/json', 'text/html', '*/*']
|
34
31
|
#
|
35
|
-
|
36
|
-
|
32
|
+
module List
|
37
33
|
HEADER_DELIMITER = ','
|
38
34
|
PARAMETER_DELIMITER = ';'
|
39
35
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
36
|
+
module_function
|
37
|
+
|
38
|
+
def parse(combined, entry_klazz:)
|
39
|
+
Array(combined).map { |line| line.split(HEADER_DELIMITER) }.flatten.each_with_index.map do |entry, index|
|
40
|
+
value, *parameters = entry.strip.split(PARAMETER_DELIMITER)
|
41
|
+
indexed_parameters = Hash[Array(parameters).map { |p| p.strip.split('=') }].transform_keys!(&:to_sym)
|
42
|
+
entry_klazz.new(value, index: index, parameters: indexed_parameters)
|
47
43
|
end
|
48
44
|
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
# @param value [String] the header value
|
54
|
-
# @param entry_klazz [Class] the class for the list items
|
55
|
-
#
|
56
|
-
# @see List.parse
|
57
|
-
#
|
58
|
-
def initialize(value, entry_klazz:)
|
59
|
-
super List.parse(value, entry_klazz: entry_klazz)
|
46
|
+
def new(combined, entry_klazz:)
|
47
|
+
result = parse(combined, entry_klazz: entry_klazz)
|
48
|
+
entry_klazz.instance_methods(false).include?(:<=>) ? result.sort! : result
|
60
49
|
end
|
61
50
|
|
62
|
-
def
|
63
|
-
|
51
|
+
def to_header(list)
|
52
|
+
# noinspection RubyBlockToMethodReference
|
53
|
+
list.map { |entry| stringify_entry(entry) }
|
54
|
+
.join("#{HEADER_DELIMITER} ")
|
64
55
|
end
|
65
56
|
|
66
|
-
def
|
67
|
-
|
57
|
+
def stringify_entry(entry)
|
58
|
+
return entry.to_header if entry.respond_to?(:to_header)
|
59
|
+
return entry.to_s if entry.respond_to?(:to_s)
|
60
|
+
entry.inspect
|
68
61
|
end
|
69
62
|
end
|
70
63
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'http_headers/utils/list'
|
2
|
+
|
3
|
+
module HttpHeaders
|
4
|
+
module Utils
|
5
|
+
module Single
|
6
|
+
module_function
|
7
|
+
|
8
|
+
def parse(value, entry_klazz:)
|
9
|
+
List.new(value, entry_klazz: entry_klazz).last
|
10
|
+
end
|
11
|
+
|
12
|
+
def new(*args)
|
13
|
+
parse(*args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_header(single)
|
17
|
+
List.stringify_entry(single)
|
18
|
+
end
|
19
|
+
|
20
|
+
alias new parse
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http_headers-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derk-Jan Karrenbeld
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- http_headers-utils.gemspec
|
81
81
|
- lib/http_headers/utils.rb
|
82
82
|
- lib/http_headers/utils/list.rb
|
83
|
+
- lib/http_headers/utils/single.rb
|
83
84
|
- lib/http_headers/utils/version.rb
|
84
85
|
homepage: https://github.com/XPBytes/http_headers-utils
|
85
86
|
licenses:
|