kumonos 0.18.0 → 0.19.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: a9d8e70b585fb2808b2d3f92d44595ad1662230c4c15f7f3d653b0385ceb98e1
4
- data.tar.gz: 97df76a08e71b7f9297a89a0354d96beaefc21471bdd4e4a612fb45980f8b638
3
+ metadata.gz: 5ad34c03f753a4743846d5133b14ce0ac2d932a4ff1c2cf1a7cceb7933763ab9
4
+ data.tar.gz: 1b2bf98aab7f7adbc5fcaee56a875b6c54d8bd394c68ee162d62edeaaf8438e6
5
5
  SHA512:
6
- metadata.gz: 82ebb28e772af08d06f014223711bd81f6e43fed8259c9f41834ced770cbe2882e2dcb2ecbf5ec5bf3602b3de30440e54d0a806c9e8b9b8e24abb05f43cd88b4
7
- data.tar.gz: ceebdbab976f00c99b3717168451a52c6ebba6d70c841d8a319c71a548b908d2ec9022d233d3da61c567e31a749eddcb2d5242b788d01243afc025ffd07a8bfd
6
+ metadata.gz: e1eb30a96aada1267584b1582d844df9adea466d04efca71f9c29fb85026232a53c8b98df73e7cb8352088db753f70f82adfdf2b95eb031aa9d563749f49d90c
7
+ data.tar.gz: f46169d86632de1a48b24960739d659da3fc4f16d9f85b895f8539379c63524b287a2385d80da1dc20142725b00b7d535e159bc585759a04fdb2518401b13029
data/example/book.jsonnet CHANGED
@@ -21,7 +21,19 @@ local routes = import 'routes.libsonnet';
21
21
  tls: false,
22
22
  connect_timeout_ms: 250,
23
23
  circuit_breaker: circuit_breaker,
24
- routes: [routes.root],
24
+ routes: [
25
+ routes.root,
26
+ {
27
+ path: '/grpc.health.v1.Health/Check',
28
+ method: 'POST',
29
+ timeout_ms: 3000,
30
+ retry_policy: {
31
+ retry_on: '5xx,connect-failure,refused-stream,cancelled,deadline-exceeded,resource-exhausted',
32
+ num_retries: 3,
33
+ per_try_timeout_ms: 700,
34
+ },
35
+ },
36
+ ],
25
37
  },
26
38
  ],
27
39
  }
@@ -23,15 +23,23 @@ module Kumonos
23
23
 
24
24
  def to_h
25
25
  h = super
26
- h[:routes] = routes.flat_map { |r| [r.to_h_with_retry, r.to_h] }
26
+ h[:routes] = routes.flat_map do |r|
27
+ # i.e. retry with gRPC request (HTTP POST)
28
+ if r.method
29
+ [r.to_h_with_retry]
30
+ else
31
+ [r.to_h_with_retry, r.to_h]
32
+ end
33
+ end
27
34
  h
28
35
  end
29
36
  end
30
37
 
31
- Route = Struct.new(:prefix, :cluster, :timeout_ms, :retry_policy, :host_header) do
38
+ Route = Struct.new(:prefix, :path, :method, :cluster, :timeout_ms, :retry_policy, :host_header) do
32
39
  class << self
33
40
  def build(h, cluster, host_header)
34
- new(h.fetch('prefix'), cluster, h.fetch('timeout_ms'), RetryPolicy.build(h.fetch('retry_policy')), host_header)
41
+ new(h['prefix'], h['path'], h['method'], cluster, h.fetch('timeout_ms'),
42
+ RetryPolicy.build(h.fetch('retry_policy')), host_header)
35
43
  end
36
44
  end
37
45
 
@@ -39,6 +47,18 @@ module Kumonos
39
47
  h = super
40
48
  h.delete(:retry_policy)
41
49
  h.delete(:host_header)
50
+ h.delete(:method)
51
+
52
+ if prefix
53
+ h.delete(:path)
54
+ h[:prefix] = prefix
55
+ elsif path
56
+ h.delete(:prefix)
57
+ h[:path] = path
58
+ else
59
+ raise '`path` or `prefix` is required'
60
+ end
61
+
42
62
  if host_header
43
63
  h[:host_rewrite] = host_header
44
64
  else
@@ -47,10 +67,22 @@ module Kumonos
47
67
  h
48
68
  end
49
69
 
70
+ ALLOWED_METHODS = %w[GET HEAD POST PUT DELETE].freeze
50
71
  def to_h_with_retry
51
72
  h = to_h
52
73
  h[:retry_policy] = retry_policy.to_h
53
- h[:headers] = [{ name: ':method', value: '(GET|HEAD)', regex: true }]
74
+
75
+ if method
76
+ m = method.upcase
77
+ unless ALLOWED_METHODS.include?(m)
78
+ raise "method must be one of #{ALLOWED_METHODS.join(',')}: given `#{m}`"
79
+ end
80
+
81
+ h[:headers] = [{ name: ':method', value: m, regex: false }]
82
+ else
83
+ h[:headers] = [{ name: ':method', value: '(GET|HEAD)', regex: true }]
84
+ end
85
+
54
86
  h
55
87
  end
56
88
  end
@@ -1,3 +1,3 @@
1
1
  module Kumonos
2
- VERSION = '0.18.0'.freeze
2
+ VERSION = '0.19.0'.freeze
3
3
  end
@@ -93,9 +93,8 @@
93
93
  "items": {
94
94
  "type": "object",
95
95
  "id": "/properties/dependencies/items/properties/routes/items",
96
- "additionalProperties": false,
96
+ "additionalProperties": true,
97
97
  "required": [
98
- "prefix",
99
98
  "timeout_ms",
100
99
  "retry_policy"
101
100
  ],
@@ -105,6 +104,16 @@
105
104
  "id": "/properties/dependencies/items/properties/routes/items/properties/prefix",
106
105
  "default": "/"
107
106
  },
107
+ "path": {
108
+ "type": "string",
109
+ "id": "/properties/dependencies/items/properties/routes/items/properties/path",
110
+ "default": "/"
111
+ },
112
+ "method": {
113
+ "type": "string",
114
+ "id": "/properties/dependencies/items/properties/routes/items/properties/method",
115
+ "default": "/"
116
+ },
108
117
  "timeout_ms": {
109
118
  "type": "integer",
110
119
  "id": "/properties/dependencies/items/properties/routes/items/properties/timeout_ms",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kumonos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taiki Ono
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-11 00:00:00.000000000 Z
11
+ date: 2018-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema