swagger_yard 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/swagger_yard/configuration.rb +4 -0
- data/lib/swagger_yard/handlers.rb +35 -0
- data/lib/swagger_yard/model.rb +5 -0
- data/lib/swagger_yard/property.rb +43 -4
- data/lib/swagger_yard/version.rb +1 -1
- data/lib/swagger_yard.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e69ba8fc51e7c39ca9291c1e2917f28b5ed794fe
|
4
|
+
data.tar.gz: f00801cc7268c6faf6d1fdc22c8d9b14ccf55756
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: baa76a8eccd08176c057fb6d6969001899350d7f0ce8b5cf25ab00cd29d42bf81e554440e5517a1dd517c1bb4952f8deb6143127442e208f91c181825fec6faa
|
7
|
+
data.tar.gz: 7ddf6347f3a340ab921f0f576146fcd3709f8adbcbe049319ab63137fc156779998369f68b1612b97138434fccf9ae8198dde34b19e6463bc713df9d6038d375
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module SwaggerYard::Handlers
|
2
|
+
class DSLHandler < YARD::Handlers::Ruby::Base
|
3
|
+
include YARD::CodeObjects
|
4
|
+
namespace_only
|
5
|
+
|
6
|
+
def self.method_options
|
7
|
+
@method_options ||= {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.reset
|
11
|
+
method_options.keys.each do |m|
|
12
|
+
handler = handlers.detect { |h| h.respond_to?(:name) && h.send(:name).to_s == m.to_s }
|
13
|
+
handlers.delete handler if handler
|
14
|
+
end
|
15
|
+
method_options.clear
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.register_dsl_method(name, options = {})
|
19
|
+
return if self.method_options[name.to_s]
|
20
|
+
options[:args] ||= 0..-1
|
21
|
+
self.method_options[name.to_s] = options
|
22
|
+
handles method_call(name)
|
23
|
+
end
|
24
|
+
|
25
|
+
def process
|
26
|
+
options = self.class.method_options[caller_method]
|
27
|
+
return unless options
|
28
|
+
call_params[options[:args]].each do |method_name|
|
29
|
+
object = MethodObject.new(namespace, method_name, scope)
|
30
|
+
object.signature = "def #{method_name}"
|
31
|
+
register(object)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/swagger_yard/model.rb
CHANGED
@@ -11,6 +11,11 @@ module SwaggerYard
|
|
11
11
|
new.tap do |model|
|
12
12
|
model.add_info(yard_object)
|
13
13
|
model.parse_tags(yard_object.tags)
|
14
|
+
yard_object.children.each do |child|
|
15
|
+
next unless child.is_a?(YARD::CodeObjects::MethodObject)
|
16
|
+
prop = Property.from_method(child)
|
17
|
+
model.properties << prop if prop
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
|
@@ -4,17 +4,56 @@ module SwaggerYard
|
|
4
4
|
#
|
5
5
|
class Property
|
6
6
|
include Example
|
7
|
-
attr_reader :name, :
|
7
|
+
attr_reader :name, :required, :type, :nullable
|
8
|
+
attr_accessor :description
|
9
|
+
|
10
|
+
NAME_OPTIONS_REGEXP = /[\(\)]/
|
11
|
+
|
12
|
+
def self.tag_name(tag)
|
13
|
+
if tag.object.is_a?(YARD::CodeObjects::MethodObject)
|
14
|
+
tag.object.name.to_s
|
15
|
+
else
|
16
|
+
tag = SwaggerYard.requires_name(tag)
|
17
|
+
return nil unless tag
|
18
|
+
tag.name.split(NAME_OPTIONS_REGEXP).first
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.from_method(yard_method)
|
23
|
+
return nil unless yard_method.explicit || yard_method.parameters.empty?
|
24
|
+
tags = (yard_method.tags ||[]).dup
|
25
|
+
prop_tag = tags.detect { |t| t.tag_name == 'property' }
|
26
|
+
return nil unless prop_tag
|
27
|
+
tags.reject { |t| t.tag_name == 'property' }
|
28
|
+
from_tag(prop_tag).tap do |prop|
|
29
|
+
ex = tags.detect { |t| t.tag_name == 'example' }
|
30
|
+
prop.example = ex.text.empty? ? ex.name : ex.text if ex
|
31
|
+
prop.description = yard_method.docstring unless prop.description
|
32
|
+
end
|
33
|
+
end
|
8
34
|
|
9
35
|
def self.from_tag(tag)
|
10
|
-
tag = SwaggerYard.
|
36
|
+
tag = SwaggerYard.requires_type(tag)
|
11
37
|
return nil unless tag
|
12
38
|
|
13
|
-
name
|
39
|
+
name = tag_name(tag)
|
40
|
+
return nil unless name
|
41
|
+
|
42
|
+
text = tag.text
|
43
|
+
|
44
|
+
if (options_src = (tag.name || '')) =~ NAME_OPTIONS_REGEXP
|
45
|
+
_, options_string = options_src.split(NAME_OPTIONS_REGEXP)
|
46
|
+
elsif tag.name && tag.object.is_a?(YARD::CodeObjects::MethodObject)
|
47
|
+
if text
|
48
|
+
text = tag.name + ' ' + text
|
49
|
+
else
|
50
|
+
text = tag.name
|
51
|
+
end
|
52
|
+
end
|
14
53
|
|
15
54
|
options = options_string.to_s.split(',').map(&:strip)
|
16
55
|
|
17
|
-
new(name, tag.types,
|
56
|
+
new(name, tag.types, text, options)
|
18
57
|
end
|
19
58
|
|
20
59
|
def initialize(name, types, description, options)
|
data/lib/swagger_yard/version.rb
CHANGED
data/lib/swagger_yard.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagger_yard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- chtrinh (Chris Trinh)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -194,6 +194,7 @@ files:
|
|
194
194
|
- lib/swagger_yard/authorization.rb
|
195
195
|
- lib/swagger_yard/configuration.rb
|
196
196
|
- lib/swagger_yard/example.rb
|
197
|
+
- lib/swagger_yard/handlers.rb
|
197
198
|
- lib/swagger_yard/model.rb
|
198
199
|
- lib/swagger_yard/openapi.rb
|
199
200
|
- lib/swagger_yard/operation.rb
|