http_headers-utils 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: