ruby-swagger 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: 1d1aefb55567ede55aa051c96e6d6c9e3c8041fa
4
- data.tar.gz: 7c2b67857e4d9a58347f4abadf180f1832f42c32
3
+ metadata.gz: 5ccc71e0ff84b67c4ac47b030628c2066702eb09
4
+ data.tar.gz: 3e41cd67f7e59e2edfc529946eddee2e9704c95b
5
5
  SHA512:
6
- metadata.gz: e0afd868df01ae477ca6510e1157b95d2ff5c6e9f4e0bb7215b59184802b7d23b44e2bcb3c7b83a9567098da2868d061f2efa5d1078ee7e32e6cb40b7d00ea38
7
- data.tar.gz: 953b8463f9866be1b997072c45972693c9895149e76c0e517607da7ff318cac77bda98d564f1a8f46adf47ba57bca94b6933e3c0a23449b19497de14fb07c20e
6
+ metadata.gz: fccc7b0f0152cd5bd34e06747b91cc6a632d03a18056415a2f826fe8b9384a75acc38ac49dc14658d13e7e17a25c6fbc8bd42e1b90c5f2fc01c7b36272cabfd8
7
+ data.tar.gz: 7e6f89f399ba6f59749da1fcbc0f33cb046a4137d6c6f61109d4b5632e24d89402279f257328d6fd24feace23f965b37948bfd62048fcdb942edfcab9a5eada2
@@ -3,9 +3,9 @@ module Swagger::Data
3
3
  @@types = [
4
4
  'text/plain',
5
5
  'text/plain; charset=utf-8',
6
- 'application/octet-stream',
7
6
  'application/json',
8
7
  'application/hal+json',
8
+ 'application/problem+json',
9
9
  'application/postscript',
10
10
  'application/pdf',
11
11
  'application/postscript',
@@ -16,6 +16,10 @@ module Swagger::Data
16
16
  res
17
17
  end
18
18
 
19
+ def all_methods
20
+ [@get, @put, @post, @delete, @options, @head, @patch].compact
21
+ end
22
+
19
23
  def get=(new_get)
20
24
  return nil unless new_get
21
25
  unless new_get.is_a?(Swagger::Data::Operation)
@@ -25,7 +29,7 @@ module Swagger::Data
25
29
  @get = new_get
26
30
  end
27
31
 
28
- def self.put=(new_put)
32
+ def put=(new_put)
29
33
  return nil unless new_put
30
34
  unless new_put.is_a?(Swagger::Data::Operation)
31
35
  new_put = Swagger::Data::Operation.parse(new_put)
@@ -31,6 +31,10 @@ module Swagger::Data
31
31
  @paths[path] = path_obj
32
32
  end
33
33
 
34
+ def all_paths
35
+ @paths.values
36
+ end
37
+
34
38
  def [](path)
35
39
  @paths[path]
36
40
  end
@@ -239,12 +239,18 @@ module Swagger::Grape
239
239
  end
240
240
 
241
241
  # Can potentionelly be used for per-param documentation, for now used for example values
242
- def documented_paramter(schema, name, parameter)
242
+ def documented_paramter(schema, target, parameter)
243
243
  return if parameter.nil? || parameter[:documentation].nil?
244
-
245
244
  unless parameter[:documentation][:example].nil?
246
245
  schema['example'] ||= {}
247
- schema['example'][name] = parameter[:documentation][:example]
246
+ if target.is_a? Array
247
+ nesting = target[0]
248
+ target = target[1]
249
+ schema['example'][nesting] ||= {}
250
+ schema['example'][nesting][target] = parameter[:documentation][:example]
251
+ else
252
+ schema['example'][target] = parameter[:documentation][:example]
253
+ end
248
254
  end
249
255
  end
250
256
 
@@ -259,12 +265,12 @@ module Swagger::Grape
259
265
  path = param_name.scan(/[0-9a-zA-Z_]+/)
260
266
  append_to = find_elem_in_schema(schema, path.dup)
261
267
  converted_param = Swagger::Grape::Param.new(parameter)
268
+
262
269
  append_to['properties'][path.last] = converted_param.to_swagger
263
270
 
264
271
  remember_type(converted_param.type_definition) if converted_param.has_type_definition?
265
-
266
272
  required_parameter(append_to, path.last, parameter)
267
- documented_paramter(append_to, path.last, parameter)
273
+ documented_paramter(schema, path, parameter)
268
274
  end
269
275
 
270
276
  def find_elem_in_schema(root, schema_path)
@@ -8,11 +8,10 @@ module Swagger::Grape
8
8
 
9
9
  def initialize(type)
10
10
  @type = type.to_s || 'String'
11
- @swagger_type = {}
12
11
  end
13
12
 
14
13
  def to_swagger(with_definition = true)
15
- translate(@type, with_definition)
14
+ translate(with_definition)
16
15
  end
17
16
 
18
17
  def sub_types
@@ -21,47 +20,94 @@ module Swagger::Grape
21
20
 
22
21
  private
23
22
 
24
- def translate(type, with_definition)
25
- case type.downcase
26
- when 'string'
27
- @swagger_type['type'] = 'string'
28
- when 'integer'
29
- @swagger_type['type'] = 'integer'
30
- when 'array'
31
- @swagger_type['type'] = 'array'
32
- @swagger_type['items'] = { 'type' => 'string' }
33
- when 'hash'
34
- @swagger_type['type'] = 'object'
35
- @swagger_type['properties'] = {}
36
- when 'boolean'
37
- @swagger_type['type'] = 'boolean'
38
- when 'virtus::attribute::boolean'
39
- @swagger_type['type'] = 'boolean'
40
- when 'symbol'
41
- @swagger_type['type'] = 'string'
42
- when 'float'
43
- @swagger_type['type'] = 'number'
44
- @swagger_type['format'] = 'float'
45
- when 'rack::multipart::uploadedfile'
46
- @swagger_type['type'] = 'string'
47
- STDERR.puts 'Warning - I have no idea how to handle the type file. Right now I will consider this a string, but we should probably handle it...'
48
- when 'date'
49
- @swagger_type['type'] = 'string'
50
- @swagger_type['format'] = 'date'
51
- when 'datetime'
52
- @swagger_type['type'] = 'string'
53
- @swagger_type['format'] = 'date-time'
54
- else
23
+ def translate(with_definition)
24
+ swagger_type = {}
25
+
26
+ # basic type
27
+ if basic_type?
28
+ swagger_type = basic_type_schemes[@type.downcase]
55
29
 
30
+ # grape shorthand array eg. `Array[Integer]`
31
+ elsif short_hand_array?
32
+ swagger_type = shorthand_array_scheme
33
+
34
+ # representer or entity object
35
+ else
56
36
  if with_definition
57
- # I can just reference the name of the object here
58
- @swagger_type['type'] = 'object'
59
- @swagger_type['$ref'] = "#/definitions/#{type}"
37
+ # I can just reference the name of the representer here
38
+ swagger_type = {
39
+ 'type' => 'object',
40
+ '$ref' => "#/definitions/#{@type}"
41
+ }
42
+
43
+ # grape-entity object
60
44
  else
61
- @swagger_type = Swagger::Grape::Entity.new(type).to_swagger
45
+ swagger_type = Swagger::Grape::Entity.new(@type).to_swagger
62
46
  end
63
47
  end
64
- @swagger_type
48
+ swagger_type
49
+ end
50
+
51
+ def short_hand_array?
52
+ !(@type.downcase =~ /\[[a-zA-Z]+\]/).nil?
53
+ end
54
+
55
+ def basic_type?
56
+ basic_type_schemes.key? @type.downcase
57
+ end
58
+
59
+ def shorthand_array_scheme
60
+ match = @type.downcase.match(/\[(.*?)\]/)
61
+ @swagger_type = {
62
+ 'type' => 'array',
63
+ 'items' => {
64
+ 'type' => match[1]
65
+ }
66
+ }
67
+ end
68
+
69
+ def basic_type_schemes
70
+ {
71
+ 'string' => {
72
+ 'type' => 'string'
73
+ },
74
+ 'integer' => {
75
+ 'type' => 'integer'
76
+ },
77
+ 'array' => {
78
+ 'type' => 'array',
79
+ 'items' => { 'type' => 'string' }
80
+ },
81
+ 'hash' => {
82
+ 'type' => 'object',
83
+ 'properties' => {}
84
+ },
85
+ 'boolean' => {
86
+ 'type' => 'boolean'
87
+ },
88
+ 'virtus::attribute::boolean' => {
89
+ 'type' => 'boolean'
90
+ },
91
+ 'symbol' => {
92
+ 'type' => 'string'
93
+ },
94
+ 'float' => {
95
+ 'type' => 'number',
96
+ 'format' => 'float'
97
+ },
98
+ 'rack::multipart::uploadedfile' => {
99
+ 'type' => 'string' # 'Warning - I have no idea how to handle the type file. Right now I will consider this a string, but we should probably handle it...'
100
+ },
101
+ 'date' => {
102
+ 'type' => 'string',
103
+ 'format' => 'date'
104
+ },
105
+ 'datetime' => {
106
+ 'type' => 'string',
107
+ 'format' => 'date-time'
108
+ }
109
+
110
+ }.freeze
65
111
  end
66
112
  end
67
113
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-swagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Bonmassar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-24 00:00:00.000000000 Z
11
+ date: 2016-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable