-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathbase.rb
82 lines (67 loc) · 1.95 KB
/
base.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# frozen_string_literal: true
module Grape
module Middleware
module Versioner
class Base < Grape::Middleware::Base
DEFAULT_PATTERN = /.*/i.freeze
DEFAULT_PARAMETER = 'apiver'
def self.inherited(klass)
super
Versioner.register(klass)
end
def default_options
{
versions: nil,
prefix: nil,
mount_path: nil,
pattern: DEFAULT_PATTERN,
version_options: {
strict: false,
cascade: true,
parameter: DEFAULT_PARAMETER
}
}
end
def versions
options[:versions]
end
def prefix
options[:prefix]
end
def mount_path
options[:mount_path]
end
def pattern
options[:pattern]
end
def version_options
options[:version_options]
end
def strict?
version_options[:strict]
end
# By default those errors contain an `X-Cascade` header set to `pass`, which allows nesting and stacking
# of routes (see Grape::Router) for more information). To prevent
# this behavior, and not add the `X-Cascade` header, one can set the `:cascade` option to `false`.
def cascade?
version_options[:cascade]
end
def parameter_key
version_options[:parameter]
end
def vendor
version_options[:vendor]
end
def error_headers
cascade? ? { Grape::Http::Headers::X_CASCADE => 'pass' } : {}
end
def potential_version_match?(potential_version)
versions.blank? || versions.any? { |v| v.to_s == potential_version }
end
def version_not_found!
throw :error, status: 404, message: '404 API Version Not Found', headers: { Grape::Http::Headers::X_CASCADE => 'pass' }
end
end
end
end
end