api_schema 0.1.2 → 0.1.3
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 +4 -4
- data/README.md +8 -2
- data/lib/api_schema/resource_definition.rb +9 -5
- data/lib/api_schema/root_methods.rb +13 -7
- data/lib/api_schema/serializer_definition.rb +8 -4
- data/lib/api_schema/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c1107551e7ed1520bba3597273977a97dcc3403
|
4
|
+
data.tar.gz: 989b92b544a4ac765456010a52e19070385bd39b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b06b88aa9b4490e6751978ed85ce84c2072d62c78a0a3aeae5908966a9f94d251d8fa73be1acfe546c2830af9587994cdd1ac8e7ad774a872df95ce7ea4a852a
|
7
|
+
data.tar.gz: 3ae635ef41a88bbf511e483dbbe9a88ff7a09b73e68043e8bf74e680b0adde4cfe895890b2bddb31bdfc6caa37d8427982701e239b9e3d393445a0935ce129f6
|
data/README.md
CHANGED
@@ -23,8 +23,9 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
Just add `include ApiSchema` and configurations to your base class and inherit from it.
|
27
|
-
|
26
|
+
Just add `include ApiSchema` and configurations to your base class and inherit from it. You also should define your default `:error_model`
|
27
|
+
|
28
|
+
**To generate json use `BaseDocs.generate_json` method.**
|
28
29
|
|
29
30
|
#### BaseDocs
|
30
31
|
|
@@ -52,6 +53,11 @@ module V1
|
|
52
53
|
'422' => "Unprocessable Entity"
|
53
54
|
}
|
54
55
|
end
|
56
|
+
|
57
|
+
serializer :error_model do |f|
|
58
|
+
f.integer :code, required: true
|
59
|
+
f.string :message, required: true
|
60
|
+
end
|
55
61
|
end
|
56
62
|
end
|
57
63
|
```
|
@@ -2,7 +2,7 @@ module ApiSchema
|
|
2
2
|
class ResourceDefinition
|
3
3
|
include ::Swagger::Blocks::ClassMethods
|
4
4
|
|
5
|
-
|
5
|
+
@neighbors = {}
|
6
6
|
|
7
7
|
def initialize(method, base_path, extra_path = nil)
|
8
8
|
@base_path = base_path
|
@@ -21,6 +21,10 @@ module ApiSchema
|
|
21
21
|
:path_params, :query_params, :resp,
|
22
22
|
:errors, :base_path, :extra_path, :full_path
|
23
23
|
|
24
|
+
def self.neighbors
|
25
|
+
@neighbors
|
26
|
+
end
|
27
|
+
|
24
28
|
def name(name)
|
25
29
|
@summary = name
|
26
30
|
end
|
@@ -75,8 +79,8 @@ module ApiSchema
|
|
75
79
|
|
76
80
|
def build_neighbors
|
77
81
|
generate_full_path
|
78
|
-
|
79
|
-
|
82
|
+
self.class.neighbors[full_path] ||= []
|
83
|
+
self.class.neighbors[full_path] << self
|
80
84
|
end
|
81
85
|
|
82
86
|
def build
|
@@ -88,9 +92,9 @@ module ApiSchema
|
|
88
92
|
'422' => "Unprocessable Entity"
|
89
93
|
}
|
90
94
|
resource = self
|
91
|
-
|
95
|
+
resource_class = self.class
|
92
96
|
swagger_path resource.full_path do
|
93
|
-
|
97
|
+
resource_class.neighbors[resource.full_path].each do |r|
|
94
98
|
operation(r.method) do
|
95
99
|
key :summary, r.summary
|
96
100
|
key :description, r.description
|
@@ -1,21 +1,27 @@
|
|
1
1
|
module ApiSchema
|
2
2
|
module RootMethods
|
3
|
+
|
4
|
+
def inherited(subclass)
|
5
|
+
instance_var = "@api_version"
|
6
|
+
subclass.instance_variable_set(instance_var, instance_variable_get(instance_var))
|
7
|
+
end
|
8
|
+
|
3
9
|
def configure
|
4
|
-
configuration
|
10
|
+
configuration = Configuration.new
|
5
11
|
yield(configuration)
|
6
|
-
|
12
|
+
@api_version = ApiVersion.new(configuration)
|
7
13
|
end
|
8
14
|
|
9
15
|
def api_version
|
10
|
-
|
16
|
+
@api_version
|
11
17
|
end
|
12
18
|
|
13
19
|
def generate_json
|
14
|
-
|
15
|
-
|
16
|
-
|
20
|
+
@api_version.configuration.build
|
21
|
+
@api_version.serializers.each { |s| s.build }
|
22
|
+
@api_version.resources.each { |r| r.build }
|
17
23
|
|
18
|
-
nodes = [
|
24
|
+
nodes = [@api_version.configuration] + @api_version.serializers + @api_version.resources
|
19
25
|
::Swagger::Blocks.build_root_json(nodes)
|
20
26
|
end
|
21
27
|
end
|
@@ -2,7 +2,7 @@ module ApiSchema
|
|
2
2
|
class SerializerDefinition
|
3
3
|
include ::Swagger::Blocks::ClassMethods
|
4
4
|
|
5
|
-
|
5
|
+
@serializers = {}
|
6
6
|
|
7
7
|
PriorReference = ::Struct.new(:id, :type, :desc)
|
8
8
|
|
@@ -13,11 +13,15 @@ module ApiSchema
|
|
13
13
|
@id = id
|
14
14
|
@type = type
|
15
15
|
@name = name || id
|
16
|
-
@parent =
|
16
|
+
@parent = self.class.serializers[parent_id]
|
17
17
|
@fields = parent&.fields || []
|
18
18
|
@prior_references = parent&.prior_references || []
|
19
19
|
@references = []
|
20
|
-
|
20
|
+
self.class.serializers[id] = self
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.serializers
|
24
|
+
@serializers
|
21
25
|
end
|
22
26
|
|
23
27
|
def required_fields
|
@@ -36,7 +40,7 @@ module ApiSchema
|
|
36
40
|
|
37
41
|
def build_references
|
38
42
|
@prior_references.each do |pr|
|
39
|
-
reference =
|
43
|
+
reference = self.class.serializers[pr.id].clone
|
40
44
|
reference.type = pr.type
|
41
45
|
reference.description = pr.desc
|
42
46
|
reference.name = reference.name.to_s.pluralize if reference.type == :array
|
data/lib/api_schema/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Chopey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|