kapellmeister 0.9.3 → 0.9.5

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: 32e1209ce6cc479533048192e649ec0834e00dd32c2f259d5fa5ce9c57742b64
4
- data.tar.gz: 4658216be2508dc3cb6821e8768083a44d6854845c7de7f08aa18b1bd5771418
3
+ metadata.gz: 93fe2a387a68b2a5faf9b507a8cc7e8ce1f43623e6b65e2fa62823acb7ac6f2f
4
+ data.tar.gz: cdc95e84692e828f107c82c0b6ea1b403dbe49b514cc64a6a7eae3e8486cd2d8
5
5
  SHA512:
6
- metadata.gz: 60a588209e3cb1de365500385d4196b23760f448fd27107f6da65d144b611a58fbb7b355011590b606c172dfdf7bff9754d4557a1e53183ab63c9da40b5eaa0e
7
- data.tar.gz: 5f579c8ed56808d489f7ffbae8b8fda9556796145b640e2f2f5f196dabcde2e29c2265c6f99313fe789a7c7491017506207154805945ac8ab80ce41226806fa6
6
+ metadata.gz: b8b0496064d754c153b15502c47815bd54684616acdb8da9367e4dd06b493d84ed78a449cfe69e312cf91c4d923ebd49c9e79bb3f8ade21137d9c8948496aec4
7
+ data.tar.gz: 444d6951d7c13ea2c2fe5c71ce0662bfb632e45802aee5fcbc94c776f2c507e4db0d505cfe539733939695ca3265ee796d203d50d020985294e2dfe1795dbbfe
@@ -91,6 +91,10 @@ class Kapellmeister::Dispatcher
91
91
  end
92
92
 
93
93
  def url_with_params(url)
94
+ url = url.split('/').map do |url_part|
95
+ url_part.ascii_only? ? url_part : CGI.escape(url_part)
96
+ end.join('/')
97
+
94
98
  return url if query_params.blank?
95
99
 
96
100
  uri = URI(url)
@@ -15,9 +15,9 @@ module Kapellmeister::RequestsExtension
15
15
  return ::Kapellmeister::Base.routes_scheme_parse(mock)
16
16
  end
17
17
 
18
- data = query_params.compact_blank.merge(data) if data.is_a?(Hash)
18
+ data, query_keys = *parsed_query(query_params, data)
19
+ valid_query?(data, query_keys)
19
20
  valid_body?(data, body)
20
- valid_query?(data, query_params)
21
21
 
22
22
  full_path = generate_full_path(path, data)
23
23
 
@@ -32,6 +32,29 @@ module Kapellmeister::RequestsExtension
32
32
  end
33
33
  end
34
34
 
35
+ def parsed_query(params, data)
36
+ return [data, []] if params.blank?
37
+
38
+ hash_data, filtered_query = *split_hashes(params)
39
+ required_empty_query, default_data = *hash_data.partition { |elem| elem.values.compact_blank.blank? }
40
+ data = Hash[filtered_query.zip].compact_blank.merge(data) if data.is_a?(Hash)
41
+ optional_data, default_data = *split_optional(default_data)
42
+ data = data.merge(default_data) unless data.blank? && default_data.blank?
43
+
44
+ [data, filtered_query + required_empty_query.map(&:keys).flatten + default_data.keys.flatten]
45
+ end
46
+
47
+ def split_hashes(params)
48
+ case params
49
+ when Array then params.compact_blank.partition { |elem| elem.is_a?(Hash) }
50
+ when Hash then [[params], []]
51
+ end
52
+ end
53
+
54
+ def split_optional(params)
55
+ params.inject(:merge).partition { |key, value| key == :optional }.map(&:to_h)
56
+ end
57
+
35
58
  def generate_full_path(original_path, data)
36
59
  path = generate_path(original_path, data)
37
60
  query = data.delete(:query_params)&.to_query
@@ -47,7 +70,7 @@ def generate_path(original_path, data)
47
70
  next part unless part.include? '%<'
48
71
 
49
72
  data.delete(part.match(/%<(.*)>/).to_a.last.to_sym)
50
- end.join('/')
73
+ end.join('/').squeeze('/')
51
74
  end
52
75
 
53
76
  def valid_body?(data, body)
@@ -63,7 +86,7 @@ end
63
86
  def valid_query?(data, query)
64
87
  return if query.blank?
65
88
 
66
- required_keys = query.keys
89
+ required_keys = query.map(&:to_sym)
67
90
 
68
91
  from_data = data.slice(*required_keys)
69
92
  data.except!(*required_keys)
@@ -1,3 +1,3 @@
1
1
  module Kapellmeister
2
- VERSION = '0.9.3'.freeze
2
+ VERSION = '0.9.5'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kapellmeister
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - DarkWater
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-30 00:00:00.000000000 Z
11
+ date: 2023-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-schema