swagger-core 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -23
- data/.rubocop_todo.yml +76 -0
- data/.travis.yml +19 -4
- data/Gemfile +4 -0
- data/README.md +1 -1
- data/gemfiles/mime_types_1.gemfile +6 -0
- data/gemfiles/mime_types_2.gemfile +6 -0
- data/gemfiles/mime_types_3.gemfile +6 -0
- data/lib/swagger.rb +3 -2
- data/lib/swagger/api.rb +1 -1
- data/lib/swagger/attachable.rb +4 -5
- data/lib/swagger/boolean.rb +1 -1
- data/lib/swagger/builder.rb +19 -16
- data/lib/swagger/mime_type.rb +3 -3
- data/lib/swagger/parsers.rb +6 -3
- data/lib/swagger/schema.rb +2 -2
- data/lib/swagger/v2/api.rb +3 -3
- data/lib/swagger/v2/example.rb +0 -4
- data/lib/swagger/v2/header.rb +1 -1
- data/lib/swagger/v2/operation.rb +3 -2
- data/lib/swagger/v2/parameter.rb +16 -2
- data/lib/swagger/v2/path.rb +4 -9
- data/lib/swagger/v2/security_scheme.rb +35 -6
- data/lib/swagger/version.rb +1 -1
- data/spec/swagger/operation_spec.rb +0 -2
- data/spec/swagger/swagger_spec.rb +8 -1
- data/spec/swagger/v2/path_spec.rb +15 -0
- data/swagger-core.gemspec +2 -2
- metadata +17 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cf6361f1aaca29c27ed5db6b69f02c52fa84d8e
|
4
|
+
data.tar.gz: 0c44de715f74ca30ffd3a0b3733ef1505065e55a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34aba24af7c45545bb12b5a989c6cc6f844049c1301cc5fd845a69df474e975cb8100ff21f0cd0ed68e86ae7ddc6aa0d875574b39a4391dbd26b3afc46e33b7b
|
7
|
+
data.tar.gz: fd004cbb732785e6502b1eb62011512dd49a98b664e73550afb37f289a45b2f8037ccdc3dceb746c07a295bfd5e5bcb425544d4025c62dbebf656632cfb9ef41
|
data/.rubocop.yml
CHANGED
@@ -1,23 +1 @@
|
|
1
|
-
|
2
|
-
# on 2014-08-05 12:05:37 -0400 using RuboCop version 0.24.1.
|
3
|
-
# The point is for the user to remove these configuration records
|
4
|
-
# one by one as the offenses are removed from the code base.
|
5
|
-
# Note that changes in the inspected code, or installation of new
|
6
|
-
# versions of RuboCop, may require this file to be generated again.
|
7
|
-
|
8
|
-
# Not yet...
|
9
|
-
Style/Documentation:
|
10
|
-
# See https://github.com/bbatsov/rubocop/issues/947
|
11
|
-
# Use inch instead
|
12
|
-
Enabled: false
|
13
|
-
Style/Encoding:
|
14
|
-
EnforcedStyle: when_needed
|
15
|
-
|
16
|
-
Metrics/LineLength:
|
17
|
-
Max: 120
|
18
|
-
Metrics/MethodLength:
|
19
|
-
Max: 15
|
20
|
-
|
21
|
-
AllCops:
|
22
|
-
Exclude:
|
23
|
-
- 'swagger_spec/**/*'
|
1
|
+
inherit_from: .rubocop_todo.yml
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-02-04 16:29:20 -0500 using RuboCop version 0.47.1.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 3
|
10
|
+
Lint/IneffectiveAccessModifier:
|
11
|
+
Exclude:
|
12
|
+
- 'lib/swagger/builder.rb'
|
13
|
+
|
14
|
+
# Offense count: 1
|
15
|
+
Lint/NestedMethodDefinition:
|
16
|
+
Exclude:
|
17
|
+
- 'lib/swagger/builder.rb'
|
18
|
+
|
19
|
+
# Offense count: 2
|
20
|
+
# Configuration parameters: ContextCreatingMethods, MethodCreatingMethods.
|
21
|
+
Lint/UselessAccessModifier:
|
22
|
+
Exclude:
|
23
|
+
- 'lib/swagger/builder.rb'
|
24
|
+
|
25
|
+
# Offense count: 8
|
26
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
27
|
+
Metrics/BlockLength:
|
28
|
+
Max: 71
|
29
|
+
|
30
|
+
# Offense count: 73
|
31
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
32
|
+
# URISchemes: http, https
|
33
|
+
Metrics/LineLength:
|
34
|
+
Max: 116
|
35
|
+
|
36
|
+
# Offense count: 3
|
37
|
+
# Configuration parameters: CountComments.
|
38
|
+
Metrics/MethodLength:
|
39
|
+
Max: 13
|
40
|
+
|
41
|
+
# Offense count: 1
|
42
|
+
# Cop supports --auto-correct.
|
43
|
+
Security/YAMLLoad:
|
44
|
+
Exclude:
|
45
|
+
- 'swagger_spec/test/validate_spec.rb'
|
46
|
+
|
47
|
+
# Offense count: 2
|
48
|
+
Style/Documentation:
|
49
|
+
Exclude:
|
50
|
+
- 'spec/**/*'
|
51
|
+
- 'test/**/*'
|
52
|
+
- 'lib/swagger.rb'
|
53
|
+
- 'lib/swagger/boolean.rb'
|
54
|
+
|
55
|
+
# Offense count: 2
|
56
|
+
# Cop supports --auto-correct.
|
57
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
|
58
|
+
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
|
59
|
+
Style/HashSyntax:
|
60
|
+
Exclude:
|
61
|
+
- 'swagger_spec/test/validate_spec.rb'
|
62
|
+
|
63
|
+
# Offense count: 1
|
64
|
+
# Cop supports --auto-correct.
|
65
|
+
Style/NestedParenthesizedCalls:
|
66
|
+
Exclude:
|
67
|
+
- 'swagger_spec/test/validate_spec.rb'
|
68
|
+
|
69
|
+
# Offense count: 3
|
70
|
+
# Cop supports --auto-correct.
|
71
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
72
|
+
# SupportedStyles: slashes, percent_r, mixed
|
73
|
+
Style/RegexpLiteral:
|
74
|
+
Exclude:
|
75
|
+
- 'lib/swagger/mime_type.rb'
|
76
|
+
- 'swagger-core.gemspec'
|
data/.travis.yml
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
language: ruby
|
2
|
+
before_install: gem install bundler
|
3
|
+
install: bundle install --jobs=3 --retry=3
|
2
4
|
rvm:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
- 2.0
|
6
|
+
- 2.1
|
7
|
+
- 2.2
|
8
|
+
- 2.3
|
9
|
+
- 2.4.0
|
10
|
+
gemfile:
|
11
|
+
- gemfile/mime_types_1.gemfile
|
12
|
+
- gemfile/mime_types_2.gemfile
|
13
|
+
- gemfile/mime_types_3.gemfile
|
14
|
+
deploy:
|
15
|
+
provider: rubygems
|
16
|
+
api_key:
|
17
|
+
secure: BMsVwSCrMbeCVICWMe5dobyr5nMOcugTwlDOjZCuWprIH/nk1G9zlRDO+j86/FGsc9yDolv4QM8HmS4KwA+/kiWfRRJtXsD9VEUkSwaSji8rFKpBaZjm9cZ13LNX5/LOzWW/n3nXGfbkNlpmIbX9XQt3BG7fVL5EVj03k7EQe4w=
|
18
|
+
gem: swagger-core
|
19
|
+
on:
|
20
|
+
tags: true
|
21
|
+
repo: swagger-rb/swagger-rb
|
data/Gemfile
CHANGED
@@ -3,3 +3,7 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in swagger.gemspec
|
4
4
|
gemspec
|
5
5
|
gem 'pry'
|
6
|
+
|
7
|
+
# temporary workaround for a problematic rainbow 2.2.0 release
|
8
|
+
# see https://github.com/sickill/rainbow/issues/40 for details
|
9
|
+
gem 'rainbow', '>= 2.1.0', '< 2.2.0'
|
data/README.md
CHANGED
data/lib/swagger.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
require 'swagger/version'
|
2
|
-
require 'swagger/boolean'
|
3
1
|
require 'addressable/uri'
|
4
2
|
require 'addressable/template'
|
3
|
+
require 'forwardable'
|
5
4
|
require 'hashie'
|
5
|
+
require 'swagger/version'
|
6
|
+
require 'swagger/boolean'
|
6
7
|
|
7
8
|
# Provides loading and building capabilities for Swagger.
|
8
9
|
# @see http://swagger.io Swagger
|
data/lib/swagger/api.rb
CHANGED
data/lib/swagger/attachable.rb
CHANGED
@@ -16,17 +16,16 @@ module Swagger
|
|
16
16
|
|
17
17
|
# @api private
|
18
18
|
def attach_to_children
|
19
|
-
each_value do |v|
|
19
|
+
each_value do |v|
|
20
20
|
v.attach_parent self if v.respond_to? :attach_parent
|
21
21
|
if v.respond_to? :each_value
|
22
22
|
v.each_value do |sv|
|
23
23
|
sv.attach_parent self if sv.respond_to? :attach_parent
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
26
|
+
next unless v.respond_to? :each
|
27
|
+
v.each do |sv|
|
28
|
+
sv.attach_parent self if sv.respond_to? :attach_parent
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
data/lib/swagger/boolean.rb
CHANGED
@@ -7,7 +7,7 @@ module Swagger
|
|
7
7
|
val = obj.to_s.downcase
|
8
8
|
return true if val.match(TRUE_REGEXP)
|
9
9
|
return false if val.match(FALSE_REGEXP)
|
10
|
-
|
10
|
+
raise ArgumentError, "#{obj} cannot be coerced to a boolean"
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/swagger/builder.rb
CHANGED
@@ -8,7 +8,7 @@ module Swagger
|
|
8
8
|
# @api private
|
9
9
|
module ClassMethods
|
10
10
|
def self.extend_object(dash)
|
11
|
-
|
11
|
+
raise TypeError, 'Bash only works on Dash' unless dash <= Hashie::Dash
|
12
12
|
dash.instance_variable_get('@required_properties').clear
|
13
13
|
dash.coerce_value Hashie::Dash, Swagger::Bash, strict: false
|
14
14
|
end
|
@@ -20,21 +20,23 @@ module Swagger
|
|
20
20
|
|
21
21
|
# @api private
|
22
22
|
def self.included(dash) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
23
|
-
|
23
|
+
raise TypeError, 'Bash only works on Dash' unless dash <= Hashie::Dash
|
24
24
|
dash.extend ClassMethods
|
25
25
|
dash.instance_variable_get('@required_properties').clear
|
26
26
|
|
27
27
|
# Very hacky... copy instance_variables for coercions
|
28
28
|
base_dash = dash.superclass
|
29
|
-
[:@properties, :@defaults].each do |
|
29
|
+
[:@properties, :@defaults].each do |property|
|
30
30
|
dash.instance_variable_set(property, base_dash.instance_variable_get(property))
|
31
31
|
end
|
32
32
|
|
33
|
-
[:@key_coercions, :@value_coercions].each do |
|
33
|
+
[:@key_coercions, :@value_coercions].each do |property|
|
34
34
|
coercions = base_dash.instance_variable_get(property)
|
35
|
-
coercions
|
36
|
-
|
37
|
-
|
35
|
+
if coercions
|
36
|
+
coercions.each_pair do |key, into|
|
37
|
+
infect_class coercions, key, into
|
38
|
+
end
|
39
|
+
end
|
38
40
|
dash.instance_variable_set(property, coercions)
|
39
41
|
end
|
40
42
|
|
@@ -57,11 +59,11 @@ module Swagger
|
|
57
59
|
|
58
60
|
def self.infect_class(coercions, key, into)
|
59
61
|
if into.is_a? Hash
|
60
|
-
into.each_pair do |
|
62
|
+
into.each_pair do |sub_key, sub_into|
|
61
63
|
coercions[key][sub_key] = infect sub_into
|
62
64
|
end
|
63
65
|
elsif into.is_a? Array
|
64
|
-
coercions[key] = into.map do |
|
66
|
+
coercions[key] = into.map do |sub_into|
|
65
67
|
infect sub_into
|
66
68
|
end
|
67
69
|
else
|
@@ -72,12 +74,13 @@ module Swagger
|
|
72
74
|
def self.infect(klass)
|
73
75
|
return klass unless klass <= Hashie::Dash
|
74
76
|
|
75
|
-
klass.
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
77
|
+
unless klass.const_defined? 'Bash'
|
78
|
+
klass.const_set('Bash',
|
79
|
+
Class.new(klass).tap do |bash_klass|
|
80
|
+
# include is public in Ruby 2.1+, hack to support older
|
81
|
+
bash_klass.send(:include, Bash)
|
82
|
+
end)
|
83
|
+
end
|
81
84
|
|
82
85
|
klass.const_get('Bash')
|
83
86
|
end
|
@@ -102,7 +105,7 @@ module Swagger
|
|
102
105
|
when '2'
|
103
106
|
Swagger::V2::API
|
104
107
|
else
|
105
|
-
|
108
|
+
raise ArgumentError, "Swagger version #{version} is not currently supported"
|
106
109
|
end
|
107
110
|
end
|
108
111
|
end
|
data/lib/swagger/mime_type.rb
CHANGED
@@ -15,12 +15,12 @@ module Swagger
|
|
15
15
|
json: 'application/json',
|
16
16
|
xml: 'application/xml',
|
17
17
|
binary: 'application/octet-stream'
|
18
|
-
}
|
18
|
+
}.freeze
|
19
19
|
|
20
20
|
def initialize(mime_type_name)
|
21
21
|
@mime_type_name = mime_type_name.to_s
|
22
22
|
@mime_type = MIME::Types[@mime_type_name].first || base_type(@mime_type_name)
|
23
|
-
|
23
|
+
raise ArgumentError, "Unknown mime type or suffix: #{mime_type_name}" if @mime_type.nil?
|
24
24
|
super @mime_type_name
|
25
25
|
end
|
26
26
|
|
@@ -30,7 +30,7 @@ module Swagger
|
|
30
30
|
when 'application/json'
|
31
31
|
return JSON
|
32
32
|
else
|
33
|
-
|
33
|
+
raise NotImplementedError, "Parser support for #{mime_type} is not implemented"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
data/lib/swagger/parsers.rb
CHANGED
@@ -10,8 +10,6 @@ module Swagger
|
|
10
10
|
YAMLParser
|
11
11
|
when '.json', '.js', :json
|
12
12
|
JSONParser
|
13
|
-
else
|
14
|
-
nil
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
@@ -21,7 +19,12 @@ module Swagger
|
|
21
19
|
# @param content [String] The YAML content to parse
|
22
20
|
# @return [Hash] the parsed content
|
23
21
|
def self.parse(content)
|
24
|
-
YAML.
|
22
|
+
if YAML.respond_to? :safe_load
|
23
|
+
YAML.safe_load(content)
|
24
|
+
else
|
25
|
+
# rubocop:disable Security/YAMLLoad
|
26
|
+
YAML.load(content)
|
27
|
+
end
|
25
28
|
end
|
26
29
|
end
|
27
30
|
|
data/lib/swagger/schema.rb
CHANGED
@@ -23,7 +23,7 @@ module Swagger
|
|
23
23
|
|
24
24
|
count = 0
|
25
25
|
until schema.refs_resolved?
|
26
|
-
|
26
|
+
raise 'Could not resolve non-remote $refs 5 cycles - circular references?' if count >= 5
|
27
27
|
schema.resolve_refs
|
28
28
|
count += 1
|
29
29
|
end
|
@@ -39,7 +39,7 @@ module Swagger
|
|
39
39
|
|
40
40
|
def resolve_refs
|
41
41
|
items_and_props = [deep_select('items'), deep_select('properties')].flatten.compact
|
42
|
-
items_and_props.each do |
|
42
|
+
items_and_props.each do |item|
|
43
43
|
key = item.delete('$ref')
|
44
44
|
next if remote_ref? key
|
45
45
|
model = root.definitions[key]
|
data/lib/swagger/v2/api.rb
CHANGED
@@ -35,13 +35,13 @@ module Swagger
|
|
35
35
|
field :externalDocs, Object # TODO: ExternalDocs class
|
36
36
|
# @endgroup
|
37
37
|
|
38
|
-
|
38
|
+
alias base_path basePath
|
39
39
|
|
40
40
|
# All operations under all paths
|
41
41
|
# @return [Array<Operation>]
|
42
42
|
def operations
|
43
43
|
# Perhaps not the best way...
|
44
|
-
paths.values.map do |
|
44
|
+
paths.values.map do |path|
|
45
45
|
path.operations.values
|
46
46
|
end.flatten
|
47
47
|
end
|
@@ -59,7 +59,7 @@ module Swagger
|
|
59
59
|
def fully_validate
|
60
60
|
# NOTE: fully_validate is ideal, but very slow with the current schema/validator
|
61
61
|
errors = JSON::Validator.fully_validate(swagger_schema, to_json)
|
62
|
-
|
62
|
+
raise Swagger::InvalidDefinition, errors unless errors.empty?
|
63
63
|
true
|
64
64
|
end
|
65
65
|
|
data/lib/swagger/v2/example.rb
CHANGED
data/lib/swagger/v2/header.rb
CHANGED
data/lib/swagger/v2/operation.rb
CHANGED
@@ -14,7 +14,7 @@ module Swagger
|
|
14
14
|
field :summary, String
|
15
15
|
field :description, String
|
16
16
|
field :operationId, String
|
17
|
-
|
17
|
+
alias operation_id operationId
|
18
18
|
field :produces, Array[String] # TODO: Need a lookup that merges w/ API-level field
|
19
19
|
field :consumes, Array[String] # TODO: Need a lookup that merges w/ API-level field
|
20
20
|
field :tags, Array[String] # TODO: This is an array of tag names, need to handle resolution name -> Tag object
|
@@ -23,6 +23,7 @@ module Swagger
|
|
23
23
|
field :schemes, Array[String] # TODO: Need a lookup that merges w/ API-level field
|
24
24
|
field :security, Array[SecurityRequirement] # TODO: Need a lookup that merges w/ API-level field
|
25
25
|
field :externalDocs, Object # TODO: ExternalDocumentation class
|
26
|
+
field :deprecated, Boolean
|
26
27
|
|
27
28
|
def api_title
|
28
29
|
root.info.title
|
@@ -53,7 +54,7 @@ module Swagger
|
|
53
54
|
# defined at the API level.
|
54
55
|
def each_parameter
|
55
56
|
return if parameters.nil?
|
56
|
-
parameters.each do |
|
57
|
+
parameters.each do |parameter|
|
57
58
|
yield parameter
|
58
59
|
end
|
59
60
|
end
|
data/lib/swagger/v2/parameter.rb
CHANGED
@@ -6,12 +6,13 @@ module Swagger
|
|
6
6
|
# @see https://github.com/wordnik/swagger-spec/blob/master/versions/2.0.md#parameterObject Parameter Object
|
7
7
|
class Parameter < SwaggerObject
|
8
8
|
# @!group Fixed Fields
|
9
|
-
required_field :name, String
|
9
|
+
# required_field :name, String
|
10
|
+
field :name, String
|
10
11
|
# required_field :in, String
|
11
12
|
field :in, String
|
12
13
|
field :description, String
|
13
14
|
field :required, Swagger::Boolean
|
14
|
-
|
15
|
+
alias required? required
|
15
16
|
# @!endgroup
|
16
17
|
|
17
18
|
# @!group Body Fields
|
@@ -26,6 +27,19 @@ module Swagger
|
|
26
27
|
field :default, Object
|
27
28
|
# @!endgroup
|
28
29
|
|
30
|
+
def parse
|
31
|
+
# resolve $ref parameters
|
32
|
+
schema = clone
|
33
|
+
if schema.key?('$ref')
|
34
|
+
# TODO: Make this smarter than just split, assuming local ref
|
35
|
+
key = schema.delete('$ref').split('/').last
|
36
|
+
model = root.parameters[key]
|
37
|
+
schema.merge!(model)
|
38
|
+
end
|
39
|
+
|
40
|
+
schema.to_hash
|
41
|
+
end
|
42
|
+
|
29
43
|
include DeterministicJSONSchema
|
30
44
|
end
|
31
45
|
end
|
data/lib/swagger/v2/path.rb
CHANGED
@@ -9,19 +9,14 @@ module Swagger
|
|
9
9
|
extend Forwardable
|
10
10
|
def_delegator :parent, :host
|
11
11
|
|
12
|
-
VERBS = [:get, :put, :post, :delete, :options, :head, :patch]
|
13
|
-
VERBS.each do |
|
12
|
+
VERBS = [:get, :put, :post, :delete, :options, :head, :patch].freeze
|
13
|
+
VERBS.each do |verb|
|
14
14
|
field verb, Operation
|
15
15
|
end
|
16
16
|
field :parameters, Array[Parameter]
|
17
17
|
|
18
|
-
def initialize(hash)
|
19
|
-
hash[:parameters] ||= []
|
20
|
-
super
|
21
|
-
end
|
22
|
-
|
23
18
|
def operations
|
24
|
-
VERBS.each_with_object({}) do |
|
19
|
+
VERBS.each_with_object({}) do |v, h|
|
25
20
|
operation = send v
|
26
21
|
h[v] = operation if operation
|
27
22
|
end
|
@@ -38,7 +33,7 @@ module Swagger
|
|
38
33
|
# Iterates over each Path level parameter.
|
39
34
|
def each_parameter
|
40
35
|
return if parameters.nil?
|
41
|
-
parameters.each do |
|
36
|
+
parameters.each do |parameter|
|
42
37
|
yield parameter
|
43
38
|
end
|
44
39
|
end
|
@@ -6,6 +6,10 @@ module Swagger
|
|
6
6
|
# @see https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#securitySchemeObject
|
7
7
|
# Security Scheme Object
|
8
8
|
class SecurityScheme < SwaggerObject
|
9
|
+
OAUTH2_TYPE = 'oauth'.freeze
|
10
|
+
API_KEY_TYPE = 'apikey'.freeze
|
11
|
+
FLOW_TYPES_REQUIRING_AUTHORIZATION_URL = %w(implicit accesscode).freeze
|
12
|
+
FLOW_TYPES_REQUIRING_TOKEN_URL = %w(password application accesscode).freeze
|
9
13
|
# FIXME: Swagger documentation about what's required doesn't seem accurate - OSAuth2 centric?
|
10
14
|
|
11
15
|
# According to docs, all except description are required. Schema and samples don't match.
|
@@ -13,13 +17,38 @@ module Swagger
|
|
13
17
|
# @!group Fixed Fields
|
14
18
|
required_field :type, String
|
15
19
|
field :description, String
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
|
21
|
+
# Fields required for type apiKey
|
22
|
+
field :name, String # , required: :api_key?
|
23
|
+
field :in, String # , required: :api_key?
|
24
|
+
|
25
|
+
# Fields required for type oauth2
|
26
|
+
field :flow, String # , required: :oauth2?
|
27
|
+
field :scopes, Hash # , required: :oauth2?
|
28
|
+
|
29
|
+
# Fields required for oauth 2 for certain flow types
|
30
|
+
field :authorizationUrl, String # , required: :requires_authorization_url?
|
31
|
+
field :tokenUrl, String # , required: :requires_token_url?
|
22
32
|
# @!endgroup
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def oauth2?
|
37
|
+
type.to_s.downcase == OAUTH2_TYPE
|
38
|
+
end
|
39
|
+
|
40
|
+
def api_key?
|
41
|
+
type.to_s.downcase == API_KEY_TYPE
|
42
|
+
end
|
43
|
+
|
44
|
+
def requires_authorization_url?
|
45
|
+
oauth2? &&
|
46
|
+
FLOW_TYPES_REQUIRING_AUTHORIZATION_URL.include?(flow.to_s.downcase)
|
47
|
+
end
|
48
|
+
|
49
|
+
def requires_token_url?
|
50
|
+
oauth2? && FLOW_TYPES_REQUIRING_TOKEN_URL.include?(flow.to_s.downcase)
|
51
|
+
end
|
23
52
|
end
|
24
53
|
end
|
25
54
|
end
|
data/lib/swagger/version.rb
CHANGED
@@ -32,7 +32,14 @@ describe Swagger do
|
|
32
32
|
|
33
33
|
context 'already parsed' do
|
34
34
|
let(:swagger_file) { 'swagger_spec/examples/v2.0/yaml/petstore.yaml' }
|
35
|
-
let(:content)
|
35
|
+
let(:content) do
|
36
|
+
if YAML.respond_to? :safe_load
|
37
|
+
YAML.safe_load(File.read(swagger_file))
|
38
|
+
else
|
39
|
+
# rubocop:disable Security/YAMLLoad
|
40
|
+
YAML.load(File.read(swagger_file))
|
41
|
+
end
|
42
|
+
end
|
36
43
|
subject(:swagger) { Swagger.build(content) }
|
37
44
|
include_examples 'swagger loading'
|
38
45
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Swagger
|
4
|
+
module V2
|
5
|
+
describe Path do
|
6
|
+
subject(:path) { Path.new({}) }
|
7
|
+
describe 'initial fields' do
|
8
|
+
describe '#parameters' do
|
9
|
+
subject { path.parameters }
|
10
|
+
it { is_expected.to eq(nil) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/swagger-core.gemspec
CHANGED
@@ -23,8 +23,8 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'addressable', '~> 2.3'
|
24
24
|
spec.add_dependency 'hashie', '~> 3.0', '< 3.4.0'
|
25
25
|
spec.add_dependency 'json-schema', '~> 2.2'
|
26
|
-
spec.add_dependency 'mime-types'
|
27
|
-
spec.add_development_dependency 'bundler'
|
26
|
+
spec.add_dependency 'mime-types'
|
27
|
+
spec.add_development_dependency 'bundler'
|
28
28
|
spec.add_development_dependency 'rake'
|
29
29
|
spec.add_development_dependency 'rspec'
|
30
30
|
spec.add_development_dependency 'rubocop'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagger-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Lincoln
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -62,30 +62,30 @@ dependencies:
|
|
62
62
|
name: mime-types
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
67
|
+
version: '0'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- - "
|
72
|
+
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '0'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: bundler
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '0'
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- - "
|
86
|
+
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: rake
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,12 +169,16 @@ files:
|
|
169
169
|
- ".gitmodules"
|
170
170
|
- ".rspec"
|
171
171
|
- ".rubocop.yml"
|
172
|
+
- ".rubocop_todo.yml"
|
172
173
|
- ".travis.yml"
|
173
174
|
- ".yardopts"
|
174
175
|
- Gemfile
|
175
176
|
- LICENSE.txt
|
176
177
|
- README.md
|
177
178
|
- Rakefile
|
179
|
+
- gemfiles/mime_types_1.gemfile
|
180
|
+
- gemfiles/mime_types_2.gemfile
|
181
|
+
- gemfiles/mime_types_3.gemfile
|
178
182
|
- lib/swagger.rb
|
179
183
|
- lib/swagger/api.rb
|
180
184
|
- lib/swagger/attachable.rb
|
@@ -210,6 +214,7 @@ files:
|
|
210
214
|
- spec/swagger/info_spec.rb
|
211
215
|
- spec/swagger/operation_spec.rb
|
212
216
|
- spec/swagger/swagger_spec.rb
|
217
|
+
- spec/swagger/v2/path_spec.rb
|
213
218
|
- swagger-core.gemspec
|
214
219
|
homepage: https://github.com/maxlinc/swagger-rb
|
215
220
|
licenses:
|
@@ -231,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
236
|
version: '0'
|
232
237
|
requirements: []
|
233
238
|
rubyforge_project:
|
234
|
-
rubygems_version: 2.
|
239
|
+
rubygems_version: 2.6.8
|
235
240
|
signing_key:
|
236
241
|
specification_version: 4
|
237
242
|
summary: Swagger parser for Ruby
|
@@ -244,4 +249,4 @@ test_files:
|
|
244
249
|
- spec/swagger/info_spec.rb
|
245
250
|
- spec/swagger/operation_spec.rb
|
246
251
|
- spec/swagger/swagger_spec.rb
|
247
|
-
|
252
|
+
- spec/swagger/v2/path_spec.rb
|