interpol 0.0.4 → 0.0.5
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.
- data/lib/interpol/configuration.rb +45 -18
- data/lib/interpol/errors.rb +8 -1
- data/lib/interpol/version.rb +1 -1
- metadata +31 -20
@@ -26,33 +26,20 @@ module Interpol
|
|
26
26
|
# Public: Defines interpol configuration.
|
27
27
|
class Configuration
|
28
28
|
attr_reader :endpoint_definition_files, :endpoints
|
29
|
-
attr_accessor :validation_mode, :documentation_title
|
29
|
+
attr_accessor :validation_mode, :documentation_title, :endpoint_definition_merge_key_files
|
30
30
|
|
31
31
|
def initialize
|
32
|
-
api_version do
|
33
|
-
raise ConfigurationError, "api_version has not been configured"
|
34
|
-
end
|
35
|
-
|
36
|
-
validate_if do |env, status, headers, body|
|
37
|
-
headers['Content-Type'].to_s.include?('json') &&
|
38
|
-
(200..299).cover?(status) && status != 204 # No Content
|
39
|
-
end
|
40
|
-
|
41
|
-
on_unavailable_request_version do |requested, available|
|
42
|
-
message = "The requested API version is invalid. " +
|
43
|
-
"Requested: #{requested}. " +
|
44
|
-
"Available: #{available}"
|
45
|
-
halt 406, JSON.dump(error: message)
|
46
|
-
end
|
47
|
-
|
48
32
|
self.endpoint_definition_files = []
|
33
|
+
self.endpoint_definition_merge_key_files = []
|
49
34
|
self.documentation_title = "API Documentation Provided by Interpol"
|
35
|
+
register_default_callbacks
|
36
|
+
|
50
37
|
yield self if block_given?
|
51
38
|
end
|
52
39
|
|
53
40
|
def endpoint_definition_files=(files)
|
54
41
|
self.endpoints = files.map do |file|
|
55
|
-
Endpoint.new(
|
42
|
+
Endpoint.new(deserialized_hash_from file)
|
56
43
|
end
|
57
44
|
@endpoint_definition_files = files
|
58
45
|
end
|
@@ -98,6 +85,46 @@ module Interpol
|
|
98
85
|
block ||= lambda { |c| }
|
99
86
|
dup.tap(&block)
|
100
87
|
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def deserialized_hash_from(file)
|
92
|
+
YAML.load(yaml_content_for file)
|
93
|
+
rescue TypeError => e
|
94
|
+
raise ConfigurationError.new \
|
95
|
+
"Received an error while loading YAML from #{file}: \"" +
|
96
|
+
"#{e.class}: #{e.message}\" If you are using YAML merge keys " +
|
97
|
+
"to declare shared types, you must configure endpoint_definition_merge_key_files " +
|
98
|
+
"before endpoint_definition_files.", e
|
99
|
+
end
|
100
|
+
|
101
|
+
def yaml_content_for(file)
|
102
|
+
File.read(file).gsub(/\A---\n/, "---\n" + endpoint_merge_keys + "\n\n")
|
103
|
+
end
|
104
|
+
|
105
|
+
def endpoint_merge_keys
|
106
|
+
@endpoint_merge_keys ||= endpoint_definition_merge_key_files.map { |f|
|
107
|
+
File.read(f).gsub(/\A---\n/, '')
|
108
|
+
}.join("\n\n")
|
109
|
+
end
|
110
|
+
|
111
|
+
def register_default_callbacks
|
112
|
+
api_version do
|
113
|
+
raise ConfigurationError, "api_version has not been configured"
|
114
|
+
end
|
115
|
+
|
116
|
+
validate_if do |env, status, headers, body|
|
117
|
+
headers['Content-Type'].to_s.include?('json') &&
|
118
|
+
(200..299).cover?(status) && status != 204 # No Content
|
119
|
+
end
|
120
|
+
|
121
|
+
on_unavailable_request_version do |requested, available|
|
122
|
+
message = "The requested API version is invalid. " +
|
123
|
+
"Requested: #{requested}. " +
|
124
|
+
"Available: #{available}"
|
125
|
+
halt 406, JSON.dump(error: message)
|
126
|
+
end
|
127
|
+
end
|
101
128
|
end
|
102
129
|
end
|
103
130
|
|
data/lib/interpol/errors.rb
CHANGED
@@ -3,7 +3,14 @@ module Interpol
|
|
3
3
|
class Error < StandardError; end
|
4
4
|
|
5
5
|
# Error raised when the configuration is invalid.
|
6
|
-
class ConfigurationError < Error
|
6
|
+
class ConfigurationError < Error
|
7
|
+
attr_reader :original_error
|
8
|
+
|
9
|
+
def initialize(message=nil, original_error=nil)
|
10
|
+
@original_error = original_error
|
11
|
+
super(message)
|
12
|
+
end
|
13
|
+
end
|
7
14
|
|
8
15
|
# Error raised when data fails to validate against the schema
|
9
16
|
# for an endpoint.
|
data/lib/interpol/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interpol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152129140 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -24,10 +24,10 @@ dependencies:
|
|
24
24
|
version: 2.0.0
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *2152129140
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: json-schema
|
30
|
-
requirement: &
|
30
|
+
requirement: &2152127380 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
@@ -35,10 +35,10 @@ dependencies:
|
|
35
35
|
version: 1.0.5
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
|
-
version_requirements: *
|
38
|
+
version_requirements: *2152127380
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: nokogiri
|
41
|
-
requirement: &
|
41
|
+
requirement: &2152126360 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
@@ -46,10 +46,10 @@ dependencies:
|
|
46
46
|
version: '1.5'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
|
-
version_requirements: *
|
49
|
+
version_requirements: *2152126360
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: rspec
|
52
|
-
requirement: &
|
52
|
+
requirement: &2152125580 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
55
55
|
- - ~>
|
@@ -57,10 +57,10 @@ dependencies:
|
|
57
57
|
version: '2.9'
|
58
58
|
type: :development
|
59
59
|
prerelease: false
|
60
|
-
version_requirements: *
|
60
|
+
version_requirements: *2152125580
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rspec-fire
|
63
|
-
requirement: &
|
63
|
+
requirement: &2152125020 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
@@ -68,10 +68,10 @@ dependencies:
|
|
68
68
|
version: '0.4'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
|
-
version_requirements: *
|
71
|
+
version_requirements: *2152125020
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: simplecov
|
74
|
-
requirement: &
|
74
|
+
requirement: &2152124120 !ruby/object:Gem::Requirement
|
75
75
|
none: false
|
76
76
|
requirements:
|
77
77
|
- - ~>
|
@@ -79,10 +79,10 @@ dependencies:
|
|
79
79
|
version: '0.6'
|
80
80
|
type: :development
|
81
81
|
prerelease: false
|
82
|
-
version_requirements: *
|
82
|
+
version_requirements: *2152124120
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: cane
|
85
|
-
requirement: &
|
85
|
+
requirement: &2152123560 !ruby/object:Gem::Requirement
|
86
86
|
none: false
|
87
87
|
requirements:
|
88
88
|
- - ~>
|
@@ -90,10 +90,21 @@ dependencies:
|
|
90
90
|
version: '1.2'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
|
-
version_requirements: *
|
93
|
+
version_requirements: *2152123560
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: tailor
|
96
|
+
requirement: &2152122640 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: *2152122640
|
94
105
|
- !ruby/object:Gem::Dependency
|
95
106
|
name: rake
|
96
|
-
requirement: &
|
107
|
+
requirement: &2152122040 !ruby/object:Gem::Requirement
|
97
108
|
none: false
|
98
109
|
requirements:
|
99
110
|
- - ~>
|
@@ -101,10 +112,10 @@ dependencies:
|
|
101
112
|
version: 0.9.2.2
|
102
113
|
type: :development
|
103
114
|
prerelease: false
|
104
|
-
version_requirements: *
|
115
|
+
version_requirements: *2152122040
|
105
116
|
- !ruby/object:Gem::Dependency
|
106
117
|
name: rack-test
|
107
|
-
requirement: &
|
118
|
+
requirement: &2152121500 !ruby/object:Gem::Requirement
|
108
119
|
none: false
|
109
120
|
requirements:
|
110
121
|
- - =
|
@@ -112,7 +123,7 @@ dependencies:
|
|
112
123
|
version: 0.6.1
|
113
124
|
type: :development
|
114
125
|
prerelease: false
|
115
|
-
version_requirements: *
|
126
|
+
version_requirements: *2152121500
|
116
127
|
description: Interpol is a toolkit for working with API endpoint definition files,
|
117
128
|
giving you a stub app, a schema validation middleware, and browsable documentation.
|
118
129
|
email:
|