api_schema 0.1.6 → 0.1.7
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 +1 -1
- data/lib/api_schema/resource_definition.rb +5 -12
- data/lib/api_schema/resource_methods.rb +5 -5
- data/lib/api_schema/root_methods.rb +16 -2
- data/lib/api_schema/serializer_definition.rb +8 -13
- data/lib/api_schema/serializer_methods.rb +2 -2
- data/lib/api_schema/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35b851123a21e5f4688f88f145ddf1e2881323a1
|
4
|
+
data.tar.gz: e54cb55d27b82897bb098dc915a7b1b70fb81fff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6938dfbd1307a7af2da7b0e9aa61b552c250ae07927c516b8e101544fdc83087f5b2285f19a891f6f63cee9b541aa40e4fb785591e3fa91d87ccc720a2949a3d
|
7
|
+
data.tar.gz: f2fab1d59adaefbf68ab0099c39729037a0bd6c584c34e3916eb7ca38770fbe8abc5f902a0682855a00bcb9494b905fae9e1b5f1e4e40f1caf19ca25ae075542
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Api Schema [](https://travis-ci.org/qonto/api_schema)
|
1
|
+
# Api Schema [](https://travis-ci.org/qonto/api_schema) [](https://badge.fury.io/rb/api_schema)
|
2
2
|
Provides a framework and DSL for describing APIs and generate swagger-json using minimalist, schema.db-like syntax.
|
3
3
|
|
4
4
|
<p align="center">
|
@@ -2,8 +2,6 @@ module ApiSchema
|
|
2
2
|
class ResourceDefinition
|
3
3
|
include ::Swagger::Blocks::ClassMethods
|
4
4
|
|
5
|
-
@neighbors = {}
|
6
|
-
|
7
5
|
def initialize(method, base_path, extra_path = nil)
|
8
6
|
@base_path = base_path
|
9
7
|
@extra_path = extra_path
|
@@ -21,10 +19,6 @@ module ApiSchema
|
|
21
19
|
:path_params, :query_params, :resp,
|
22
20
|
:errors, :base_path, :extra_path, :full_path
|
23
21
|
|
24
|
-
def self.neighbors
|
25
|
-
@neighbors
|
26
|
-
end
|
27
|
-
|
28
22
|
def name(name)
|
29
23
|
@summary = name
|
30
24
|
end
|
@@ -77,13 +71,13 @@ module ApiSchema
|
|
77
71
|
@full_path << "/#{extra_path}" if extra_path
|
78
72
|
end
|
79
73
|
|
80
|
-
def build_neighbors
|
74
|
+
def build_neighbors(neighbors)
|
81
75
|
generate_full_path
|
82
|
-
|
83
|
-
|
76
|
+
neighbors[full_path] ||= []
|
77
|
+
neighbors[full_path] << self
|
84
78
|
end
|
85
79
|
|
86
|
-
def build
|
80
|
+
def build(neighbors)
|
87
81
|
error_model = :error_model
|
88
82
|
error_desc = {
|
89
83
|
'401' => "Unauthorized",
|
@@ -92,9 +86,8 @@ module ApiSchema
|
|
92
86
|
'422' => "Unprocessable Entity"
|
93
87
|
}
|
94
88
|
resource = self
|
95
|
-
resource_class = self.class
|
96
89
|
swagger_path resource.full_path do
|
97
|
-
|
90
|
+
neighbors[resource.full_path].each do |r|
|
98
91
|
operation(r.method) do
|
99
92
|
key :summary, r.summary
|
100
93
|
key :description, r.description
|
@@ -7,35 +7,35 @@ module ApiSchema
|
|
7
7
|
resource = ResourceDefinition.new(:get, base_path, extra_path)
|
8
8
|
resource.instance_eval(&block)
|
9
9
|
api_version.resources << resource
|
10
|
-
resource.build_neighbors
|
10
|
+
resource.build_neighbors(version_resources)
|
11
11
|
end
|
12
12
|
|
13
13
|
def post(base_path = default_path, extra_path: nil, &block)
|
14
14
|
resource = ResourceDefinition.new(:post, base_path, extra_path)
|
15
15
|
resource.instance_eval(&block)
|
16
16
|
api_version.resources << resource
|
17
|
-
resource.build_neighbors
|
17
|
+
resource.build_neighbors(version_resources)
|
18
18
|
end
|
19
19
|
|
20
20
|
def put(base_path = default_path, extra_path: nil, &block)
|
21
21
|
resource = ResourceDefinition.new(:put, base_path, extra_path)
|
22
22
|
resource.instance_eval(&block)
|
23
23
|
api_version.resources << resource
|
24
|
-
resource.build_neighbors
|
24
|
+
resource.build_neighbors(version_resources)
|
25
25
|
end
|
26
26
|
|
27
27
|
def patch(base_path = default_path, extra_path: nil, &block)
|
28
28
|
resource = ResourceDefinition.new(:patch, base_path, extra_path)
|
29
29
|
resource.instance_eval(&block)
|
30
30
|
api_version.resources << resource
|
31
|
-
resource.build_neighbors
|
31
|
+
resource.build_neighbors(version_resources)
|
32
32
|
end
|
33
33
|
|
34
34
|
def delete(base_path = default_path, extra_path: nil, &block)
|
35
35
|
resource = ResourceDefinition.new(:delete, base_path, extra_path)
|
36
36
|
resource.instance_eval(&block)
|
37
37
|
api_version.resources << resource
|
38
|
-
resource.build_neighbors
|
38
|
+
resource.build_neighbors(version_resources)
|
39
39
|
end
|
40
40
|
|
41
41
|
def default_path
|
@@ -4,22 +4,36 @@ module ApiSchema
|
|
4
4
|
def inherited(subclass)
|
5
5
|
instance_var = "@api_version"
|
6
6
|
subclass.instance_variable_set(instance_var, instance_variable_get(instance_var))
|
7
|
+
instance_var_neighbors = "@version_resources"
|
8
|
+
subclass.instance_variable_set(instance_var_neighbors, instance_variable_get(instance_var_neighbors))
|
9
|
+
instance_var_neighbors = "@version_serializers"
|
10
|
+
subclass.instance_variable_set(instance_var_neighbors, instance_variable_get(instance_var_neighbors))
|
7
11
|
end
|
8
12
|
|
9
13
|
def configure
|
10
14
|
configuration = Configuration.new
|
11
15
|
yield(configuration)
|
12
16
|
@api_version = ApiVersion.new(configuration)
|
17
|
+
@version_resources = {}
|
18
|
+
@version_serializers = {}
|
13
19
|
end
|
14
20
|
|
15
21
|
def api_version
|
16
22
|
@api_version
|
17
23
|
end
|
18
24
|
|
25
|
+
def version_resources
|
26
|
+
@version_resources
|
27
|
+
end
|
28
|
+
|
29
|
+
def version_serializers
|
30
|
+
@version_serializers
|
31
|
+
end
|
32
|
+
|
19
33
|
def generate_json
|
20
34
|
@api_version.configuration.build
|
21
|
-
@api_version.serializers.each { |s| s.build }
|
22
|
-
@api_version.resources.each { |r| r.build }
|
35
|
+
@api_version.serializers.each { |s| s.build(version_serializers) }
|
36
|
+
@api_version.resources.each { |r| r.build(version_resources) }
|
23
37
|
|
24
38
|
nodes = [@api_version.configuration] + @api_version.serializers + @api_version.resources
|
25
39
|
::Swagger::Blocks.build_root_json(nodes)
|
@@ -2,26 +2,21 @@ module ApiSchema
|
|
2
2
|
class SerializerDefinition
|
3
3
|
include ::Swagger::Blocks::ClassMethods
|
4
4
|
|
5
|
-
@serializers = {}
|
6
|
-
|
7
5
|
PriorReference = ::Struct.new(:id, :type, :desc)
|
8
6
|
|
9
7
|
attr_reader :id, :fields, :references, :parent
|
10
8
|
attr_accessor :type, :name, :description
|
11
9
|
|
12
|
-
def initialize(id, type, name=nil, parent_id = nil)
|
10
|
+
def initialize(id, type, serializers, name=nil, parent_id = nil)
|
13
11
|
@id = id
|
14
12
|
@type = type
|
15
13
|
@name = name || id
|
16
|
-
@parent =
|
14
|
+
@parent = serializers[parent_id]
|
17
15
|
@fields = parent&.fields || []
|
18
16
|
@prior_references = parent&.prior_references || []
|
19
17
|
@references = []
|
20
|
-
self.class.serializers[id] = self
|
21
|
-
end
|
22
18
|
|
23
|
-
|
24
|
-
@serializers
|
19
|
+
serializers[id] = self
|
25
20
|
end
|
26
21
|
|
27
22
|
def required_fields
|
@@ -32,16 +27,16 @@ module ApiSchema
|
|
32
27
|
@prior_references << PriorReference.new(refernce_id, type, desc)
|
33
28
|
end
|
34
29
|
|
35
|
-
def build
|
36
|
-
build_references
|
30
|
+
def build(serializers)
|
31
|
+
build_references(serializers)
|
37
32
|
sd = self
|
38
33
|
swagger_schema(id) { schema_for(sd) }
|
39
34
|
end
|
40
35
|
|
41
|
-
def build_references
|
36
|
+
def build_references(serializers)
|
42
37
|
@prior_references.each do |pr|
|
43
|
-
raise "Model #{pr.id} is not defined" unless
|
44
|
-
reference =
|
38
|
+
raise "Model #{pr.id} is not defined" unless serializers[pr.id]
|
39
|
+
reference = serializers[pr.id].clone
|
45
40
|
reference.type = pr.type
|
46
41
|
reference.description = pr.desc
|
47
42
|
reference.name = reference.name.to_s.pluralize if reference.type == :array
|
@@ -4,13 +4,13 @@ module ApiSchema
|
|
4
4
|
private
|
5
5
|
|
6
6
|
def serializer(id, structure: :object, name: nil, parent: nil)
|
7
|
-
serializer = SerializerDefinition.new(id, structure, name, parent)
|
7
|
+
serializer = SerializerDefinition.new(id, structure, version_serializers, name, parent)
|
8
8
|
yield serializer if block_given?
|
9
9
|
api_version.serializers << serializer
|
10
10
|
end
|
11
11
|
|
12
12
|
def array_serializer(id, name: nil, parent: nil)
|
13
|
-
serializer = SerializerDefinition.new(id, :array, name, parent)
|
13
|
+
serializer = SerializerDefinition.new(id, :array, version_serializers, name, parent)
|
14
14
|
yield serializer if block_given?
|
15
15
|
api_version.serializers << serializer
|
16
16
|
end
|
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.7
|
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-
|
11
|
+
date: 2017-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
134
|
version: '0'
|
135
135
|
requirements: []
|
136
136
|
rubyforge_project:
|
137
|
-
rubygems_version: 2.6.
|
137
|
+
rubygems_version: 2.6.11
|
138
138
|
signing_key:
|
139
139
|
specification_version: 4
|
140
140
|
summary: api_schema provides a framework and DSL for describing APIs and generate
|