bullet_train-api 1.1.3 → 1.1.6

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
  SHA256:
3
- metadata.gz: f74e01f8b6f3b2eafac8bd31e934ffd26ca0a286c5d38081884089f034f5515e
4
- data.tar.gz: 32fe4b66a1d33d9b1754a9978c9b800c18389fda615f681c38a9fb254aa4255c
3
+ metadata.gz: f474623bb0f011c89b57e3d4b0c6b8dbce5dc388772dfa5373155b2216a39b8e
4
+ data.tar.gz: cc167320a1f660301b3beab289db2fd29c2c6b72361d47c5276fe24a28f27eec
5
5
  SHA512:
6
- metadata.gz: 5e5fe1616498933e0c55258cae6a4bd4f17c33bbf7ff5c15595a807fd103fcde3e648a600e7f71833874271dcae75b366d8cdc209b11d2a88003992f84373369
7
- data.tar.gz: b5b543622985e9d25dcf91b05839a0af7dc7740751e0b2d4a1adbb16ec09babcd3482dddadee8d2fa9834cf69b31d749f929860954af4fac27433d67a9f0572d
6
+ metadata.gz: cf49807aecaa0e1814fce504b214c41b6606f36dbd69814b520c45eb5ad7bf75af2b593befd2617cff8198572d0a0b3c8256f38aba78dcc5874cbae021939db5
7
+ data.tar.gz: 1ba92be181ff6faa0bbcfb0e480105e31222076d48bd213710200772403328492391a0247023cb0eff6f4c2b2e1d54f40a1dd8427d57d256ba2d5f91467bebff
@@ -0,0 +1,59 @@
1
+ module OpenApiHelper
2
+ def indent(string, count)
3
+ lines = string.lines
4
+ first_line = lines.shift
5
+ lines = lines.map { |line| (" " * count).to_s + line }
6
+ lines.unshift(first_line).join.html_safe
7
+ end
8
+
9
+ def components_for(model)
10
+ for_model model do
11
+ indent(render("api/#{@version}/open_api/#{model.name.underscore.pluralize}/components"), 2)
12
+ end
13
+ end
14
+
15
+ def current_model
16
+ @model_stack.last
17
+ end
18
+
19
+ def for_model(model)
20
+ @model_stack ||= []
21
+ @model_stack << model
22
+ result = yield
23
+ @model_stack.pop
24
+ result
25
+ end
26
+
27
+ def paths_for(model)
28
+ for_model model do
29
+ indent(render("api/#{@version}/open_api/#{model.name.underscore.pluralize}/paths"), 1)
30
+ end
31
+ end
32
+
33
+ def attribute(attribute)
34
+ heading = t("#{current_model.name.underscore.pluralize}.fields.#{attribute}.heading")
35
+ # TODO A lot of logic to be done here.
36
+ indent("#{attribute}:\n description: \"#{heading}\"\n type: string", 2)
37
+ end
38
+
39
+ def parameter(attribute)
40
+ heading = t("#{current_model.name.underscore.pluralize}.fields.#{attribute}.heading")
41
+ # TODO A lot of logic to be done here.
42
+ indent("#{attribute}:\n description: \"#{heading}\"\n type: string", 2)
43
+ end
44
+ end
45
+
46
+ class Api::OpenApiController < ApplicationController
47
+ helper :open_api
48
+
49
+ def set_default_response_format
50
+ request.format = :yaml
51
+ end
52
+
53
+ before_action :set_default_response_format
54
+
55
+ def index
56
+ @version = params[:version]
57
+ render "api/#{@version}/open_api/index", layout: nil, format: :text
58
+ end
59
+ end
@@ -0,0 +1,29 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: Bullet Train API
4
+ description: |
5
+ The baseline API of a new Bullet Train application.
6
+ license:
7
+ name: MIT
8
+ url: https://opensource.org/licenses/MIT
9
+ version: "<%= @version.upcase %>"
10
+ servers:
11
+ - url: <%= ENV["BASE_URL"] %>/api/<%= @version %>
12
+ components:
13
+ schemas:
14
+ <%= components_for Team %>
15
+ <%= components_for User %>
16
+ <%= components_for Scaffolding::CompletelyConcrete::TangibleThing unless scaffolding_things_disabled? %>
17
+ <%# 🚅 super scaffolding will insert new components above this line. %>
18
+ parameters:
19
+ id:
20
+ name: id
21
+ in: path
22
+ required: true
23
+ schema:
24
+ type: string
25
+ paths:
26
+ <%= paths_for Team %>
27
+ <%= paths_for User %>
28
+ <%= paths_for Scaffolding::CompletelyConcrete::TangibleThing unless scaffolding_things_disabled? %>
29
+ <%# 🚅 super scaffolding will insert new paths above this line. %>
@@ -0,0 +1,55 @@
1
+ /teams:
2
+ get:
3
+ tags:
4
+ - Teams
5
+ summary: "List Teams"
6
+ operationId: listTeams
7
+ responses:
8
+ "404":
9
+ description: "Not Found"
10
+ "200":
11
+ description: "OK"
12
+ content:
13
+ application/json:
14
+ schema:
15
+ type: object
16
+ properties:
17
+ data:
18
+ type: array
19
+ items:
20
+ $ref: "#/components/schemas/Team::Attributes"
21
+ has_more:
22
+ type: boolean
23
+ /teams/{id}:
24
+ get:
25
+ tags:
26
+ - Teams
27
+ summary: "Fetch Team"
28
+ operationId: fetchTeam
29
+ parameters:
30
+ - $ref: "#/components/parameters/id"
31
+ responses:
32
+ "404":
33
+ description: "Not Found"
34
+ "200":
35
+ description: "OK"
36
+ content:
37
+ application/json:
38
+ schema:
39
+ $ref: "#/components/schemas/Team::Attributes"
40
+ put:
41
+ tags:
42
+ - Teams
43
+ summary: "Update Team"
44
+ operationId: updateTeam
45
+ parameters:
46
+ - $ref: "#/components/parameters/id"
47
+ responses:
48
+ "404":
49
+ description: "Not Found"
50
+ "200":
51
+ description: "OK"
52
+ content:
53
+ application/json:
54
+ schema:
55
+ $ref: "#/components/schemas/Team::Parameters"
@@ -0,0 +1,55 @@
1
+ /users:
2
+ get:
3
+ tags:
4
+ - Users
5
+ summary: "List Users"
6
+ operationId: listUsers
7
+ responses:
8
+ "404":
9
+ description: "Not Found"
10
+ "200":
11
+ description: "OK"
12
+ content:
13
+ application/json:
14
+ schema:
15
+ type: object
16
+ properties:
17
+ data:
18
+ type: array
19
+ items:
20
+ $ref: "#/components/schemas/User::Attributes"
21
+ has_more:
22
+ type: boolean
23
+ /users/{id}:
24
+ get:
25
+ tags:
26
+ - Users
27
+ summary: "Fetch User"
28
+ operationId: fetchUser
29
+ parameters:
30
+ - $ref: "#/components/parameters/id"
31
+ responses:
32
+ "404":
33
+ description: "Not Found"
34
+ "200":
35
+ description: "OK"
36
+ content:
37
+ application/json:
38
+ schema:
39
+ $ref: "#/components/schemas/User::Attributes"
40
+ put:
41
+ tags:
42
+ - Users
43
+ summary: "Update User"
44
+ operationId: updateUser
45
+ parameters:
46
+ - $ref: "#/components/parameters/id"
47
+ responses:
48
+ "404":
49
+ description: "Not Found"
50
+ "200":
51
+ description: "OK"
52
+ content:
53
+ application/json:
54
+ schema:
55
+ $ref: "#/components/schemas/User::Parameters"
data/config/routes.rb CHANGED
@@ -18,6 +18,8 @@ Rails.application.routes.draw do
18
18
  end
19
19
 
20
20
  namespace :api do
21
+ match "*version/openapi.yaml" => "open_api#index", :via => :get
22
+
21
23
  namespace :v1 do
22
24
  shallow do
23
25
  resources :users
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Api
3
- VERSION = "1.1.3"
3
+ VERSION = "1.1.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-05 00:00:00.000000000 Z
11
+ date: 2022-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -122,6 +122,7 @@ files:
122
122
  - app/assets/config/bullet_train_api_manifest.js
123
123
  - app/controllers/account/platform/access_tokens_controller.rb
124
124
  - app/controllers/account/platform/applications_controller.rb
125
+ - app/controllers/api/open_api_controller.rb
125
126
  - app/controllers/api/v1/platform/access_tokens_controller.rb
126
127
  - app/controllers/concerns/api/controllers/base.rb
127
128
  - app/controllers/concerns/api/v1/teams/controller_base.rb
@@ -147,6 +148,9 @@ files:
147
148
  - app/views/account/platform/applications/new.html.erb
148
149
  - app/views/account/platform/applications/show.html.erb
149
150
  - app/views/account/platform/applications/show.json.jbuilder
151
+ - app/views/api/v1/open_api/index.yaml.erb
152
+ - app/views/api/v1/open_api/teams/_paths.yaml.erb
153
+ - app/views/api/v1/open_api/users/_paths.yaml.erb
150
154
  - app/views/api/v1/platform/access_tokens/_access_token.json.jbuilder
151
155
  - app/views/api/v1/platform/access_tokens/index.json.jbuilder
152
156
  - app/views/api/v1/platform/access_tokens/show.json.jbuilder