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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c4e6817ad1c97d2254f434882726ca515a6a34ac6a4ab26a5750aa5a17aa53f
4
- data.tar.gz: c7315d9b3dbe69884e8e0acb0678346cc013bb93f6be5e4554c8345465cce79b
3
+ metadata.gz: f7f3ae6d09938a47e48e9459736fe03829cb53d05c2e4d67dfac7ce7c91b853b
4
+ data.tar.gz: 464ef40919624f9d2e40ba66bc190649e9b87a3dc20c1ef4bea7d1b862e8ff8e
5
5
  SHA512:
6
- metadata.gz: 2dea1c2db8331b3532955091008b7f3a9117b341ab1df1a862f2edb38caf2df251069b169ecb3113fffb09e18b8d8228eea8be375077457e095a506032c43f72
7
- data.tar.gz: 9d5a5dc58193be367b432a69bf106f38f9d462a6815eb90088e27191d076f840b2aa2badee287f790bbeb6aa4640d8d48396c0502483dbe89a2875ca8091e741
6
+ metadata.gz: 54ed03eadbe9b7d7c658d2083413c607f8c8ecbc60c6248d7787c59f877349cbed77c393d9f4391b1b5dbd5fac357acf05e0309b56e99cf9a2ce69c8b6b72faf
7
+ data.tar.gz: 53a3145d07bc953cc0d04a1e665b0da0b61ab3e56c11ae1f4024824384c851f1b8249777c8753ea7c656e0f244e5711796aa72653e0753f20d8fc705d599318c
@@ -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
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- http_headers-utils (0.1.1)
4
+ http_headers-utils (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,5 +1,7 @@
1
1
  require 'http_headers/utils/version'
2
+
2
3
  require 'http_headers/utils/list'
4
+ require 'http_headers/utils/single'
3
5
 
4
6
  module HttpHeaders
5
7
  module Utils
@@ -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 < HttpHeaders::Utils::List
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
- class List < DelegateClass(Array)
36
-
32
+ module List
37
33
  HEADER_DELIMITER = ','
38
34
  PARAMETER_DELIMITER = ';'
39
35
 
40
- class << self
41
- def parse(combined, entry_klazz:)
42
- Array(combined).map { |line| line.split(HEADER_DELIMITER) }.flatten.each_with_index.map do |entry, index|
43
- value, *parameters = entry.split(PARAMETER_DELIMITER)
44
- indexed_parameters = Hash[Array(parameters).map { |p| p.strip.split('=') }].transform_keys!(&:to_sym)
45
- entry_klazz.new(value, index: index, parameters: indexed_parameters)
46
- end
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
- # Create a new list
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 sort!
63
- __setobj__(__getobj__.sort!)
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 inspect
67
- map(&:inspect).join(', ')
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
@@ -1,5 +1,5 @@
1
1
  module HttpHeaders
2
2
  module Utils
3
- VERSION = "0.1.1"
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  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.1.1
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-15 00:00:00.000000000 Z
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: