bullet_train-api 1.1.10 → 1.1.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40bc7b779d26dad0888ccb49f7f28a07a0ea038b3f1b22225029a032563af937
4
- data.tar.gz: 402a6f89d5537cd1815fd0e22fed93e0dda462c97be190f4fcdc7df529eafb58
3
+ metadata.gz: 807f6397b8ca4d3ed29c7181d9aa72456630ad6262baeab928637f11858d83f1
4
+ data.tar.gz: d3db30ae44aa54f4504554a10eadd3570c061a558068b9dba844580bb8fb1b7d
5
5
  SHA512:
6
- metadata.gz: f1f25622d149fb10bcb5a5ffdb8e36ec868a9f43884708de02508db66e265c4961d62a0c28a7308ffb4087eaae99c0f308c91a98a0511f7297d3ea206142d224
7
- data.tar.gz: ca923f4efc9d4b475f2b20e64f00448c4b91d38709073b71fda5cd33de9dbb6565d01cf6a6ddab4a4e4317bfef8135f31f230d9dbc079f8e2dee2cef0c7ffa49
6
+ metadata.gz: e748b8c2207bc0a43e8cbacfb69e48108fff664298404194299fafa5271d5b330222830bedce8351916096430ef42d83ea9b4af96c647abc9f4996e9e73194f8
7
+ data.tar.gz: 702abad5b373fe2600f460c26c363a2063082e9cd9fb832b9991d7bf079ba40175e0eba8ef25f2f4a3bf0f9e4b46026e83b1383144cafb0c20789a8c0c7574e2
@@ -17,6 +17,30 @@ module Api::Controllers::Base
17
17
 
18
18
  before_action :set_default_response_format
19
19
  before_action :doorkeeper_authorize!
20
+ after_action :set_pagination_headers
21
+
22
+ def modify_url_params(url, new_params)
23
+ uri = URI.parse(url)
24
+ query = Rack::Utils.parse_query(uri.query)
25
+ new_params.each do |key, value|
26
+ query[key] = value
27
+ end
28
+ uri.query = Rack::Utils.build_query(query)
29
+ uri.to_s
30
+ end
31
+
32
+ def set_pagination_headers
33
+ return unless @pagy
34
+
35
+ if @pagy.has_more?
36
+ if (collection = instance_variable_get(collection_variable))
37
+ next_cursor = collection.last.id
38
+ # TODO Probably not great that we're clobbering any `Link` header that might be set.
39
+ response.headers["Link"] = "<#{modify_url_params(request.url, after: next_cursor)}>; rel=next"
40
+ response.headers["Pagination-Next"] = next_cursor
41
+ end
42
+ end
43
+ end
20
44
 
21
45
  rescue_from CanCan::AccessDenied, ActiveRecord::RecordNotFound do |exception|
22
46
  render json: {error: "Not found"}, status: :not_found
@@ -42,7 +66,13 @@ module Api::Controllers::Base
42
66
 
43
67
  def current_user
44
68
  raise NotAuthenticatedError unless doorkeeper_token.present?
45
- doorkeeper_token.update(last_used_at: Time.zone.now)
69
+ # TODO Remove this rescue once workspace clusters can write to this column on the identity server.
70
+ # TODO Make this logic configurable so that downstream developers can write different methods for this column getting updated.
71
+ begin
72
+ doorkeeper_token.update(last_used_at: Time.zone.now)
73
+ rescue
74
+ ActiveRecord::StatementInvalid
75
+ end
46
76
  @current_user ||= User.find_by(id: doorkeeper_token[:resource_owner_id])
47
77
  end
48
78
 
@@ -51,10 +81,13 @@ module Api::Controllers::Base
51
81
  current_user&.teams&.first
52
82
  end
53
83
 
84
+ def collection_variable
85
+ @collection_variable ||= "@#{self.class.name.split("::").last.gsub("Controller", "").underscore}"
86
+ end
87
+
54
88
  def apply_pagination
55
- collection_variable = "@#{self.class.name.split("::").last.gsub("Controller", "").underscore}"
56
89
  collection = instance_variable_get collection_variable
57
- @pagy, collection = pagy_cursor collection
90
+ @pagy, collection = pagy_cursor collection, after: params[:after]
58
91
  instance_variable_set collection_variable, collection
59
92
  end
60
93
 
@@ -1,5 +1 @@
1
- json.data do
2
- json.array! @access_tokens, partial: "api/v1/platform/access_tokens/access_token", as: :access_token
3
- end
4
-
5
- render_pagination(json)
1
+ json.array! @access_tokens, partial: "api/v1/platform/access_tokens/access_token", as: :access_token
@@ -1,5 +1 @@
1
- json.data do
2
- json.array! @teams, partial: "api/v1/teams/team", as: :team
3
- end
4
-
5
- render_pagination(json)
1
+ json.array! @teams, partial: "api/v1/teams/team", as: :team
@@ -1,5 +1 @@
1
- json.data do
2
- json.array! @users, partial: "api/v1/users/user", as: :user
3
- end
4
-
5
- render_pagination(json)
1
+ json.array! @users, partial: "api/v1/users/user", as: :user
@@ -0,0 +1,108 @@
1
+ <% except ||= [] %>
2
+ <% unless except.include?(:index) && except.include?(:create) %>
3
+ /scaffolding/absolutely_abstract/creative_concepts/{absolutely_abstract_creative_concept_id}/completely_concrete/tangible_things:
4
+ <% unless except.include?(:index) %>
5
+ get:
6
+ tags:
7
+ - "Scaffolding/Completely Concrete/Tangible Things"
8
+ summary: "List Tangible Things"
9
+ operationId: listScaffoldingCompletelyConcreteTangibleThings
10
+ parameters:
11
+ - name: absolutely_abstract_creative_concept_id
12
+ in: path
13
+ required: true
14
+ schema:
15
+ type: string
16
+ responses:
17
+ "404":
18
+ description: "Not Found"
19
+ "200":
20
+ description: "OK"
21
+ content:
22
+ application/json:
23
+ schema:
24
+ type: object
25
+ properties:
26
+ data:
27
+ type: array
28
+ items:
29
+ $ref: "#/components/schemas/ScaffoldingCompletelyConcreteTangibleThingAttributes"
30
+ has_more:
31
+ type: boolean
32
+ <% end %>
33
+ <% unless except.include?(:create) %>
34
+ post:
35
+ tags:
36
+ - "Scaffolding/Completely Concrete/Tangible Things"
37
+ summary: "Create Tangible Thing"
38
+ operationId: createScaffoldingCompletelyConcreteTangibleThings
39
+ parameters:
40
+ - name: absolutely_abstract_creative_concept_id
41
+ in: path
42
+ required: true
43
+ schema:
44
+ type: string
45
+ responses:
46
+ "404":
47
+ description: "Not Found"
48
+ "201":
49
+ description: "Created"
50
+ content:
51
+ application/json:
52
+ schema:
53
+ $ref: "#/components/schemas/ScaffoldingCompletelyConcreteTangibleThingParameters"
54
+ <% end %>
55
+ <% end %>
56
+ <% unless except.include?(:show) && except.include?(:update) && except.include?(:destroy) %>
57
+ /scaffolding/completely_concrete/tangible_things/{id}:
58
+ <% unless except.include?(:show) %>
59
+ get:
60
+ tags:
61
+ - "Scaffolding/Completely Concrete/Tangible Things"
62
+ summary: "Fetch Tangible Thing"
63
+ operationId: getScaffoldingCompletelyConcreteTangibleThings
64
+ parameters:
65
+ - $ref: "#/components/parameters/id"
66
+ responses:
67
+ "404":
68
+ description: "Not Found"
69
+ "200":
70
+ description: "OK"
71
+ content:
72
+ application/json:
73
+ schema:
74
+ $ref: "#/components/schemas/ScaffoldingCompletelyConcreteTangibleThingAttributes"
75
+ <% end %>
76
+ <% unless except.include?(:update) %>
77
+ put:
78
+ tags:
79
+ - "Scaffolding/Completely Concrete/Tangible Things"
80
+ summary: "Update Tangible Thing"
81
+ operationId: updateScaffoldingCompletelyConcreteTangibleThings
82
+ parameters:
83
+ - $ref: "#/components/parameters/id"
84
+ responses:
85
+ "404":
86
+ description: "Not Found"
87
+ "200":
88
+ description: "OK"
89
+ content:
90
+ application/json:
91
+ schema:
92
+ $ref: "#/components/schemas/ScaffoldingCompletelyConcreteTangibleThingParameters"
93
+ <% end %>
94
+ <% unless except.include?(:destroy) %>
95
+ delete:
96
+ tags:
97
+ - "Scaffolding/Completely Concrete/Tangible Things"
98
+ summary: "Remove Tangible Thing"
99
+ operationId: removeScaffoldingCompletelyConcreteTangibleThings
100
+ parameters:
101
+ - $ref: "#/components/parameters/id"
102
+ responses:
103
+ "404":
104
+ description: "Not Found"
105
+ "200":
106
+ description: "OK"
107
+ <% end %>
108
+ <% end %>
@@ -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/TeamAttributes"
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/TeamAttributes"
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/TeamParameters"
@@ -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/UserAttributes"
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/UserAttributes"
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/UserParameters"
@@ -0,0 +1,10 @@
1
+ json.extract! access_token,
2
+ :id,
3
+ :application_id,
4
+ :token,
5
+ :expires_in,
6
+ :scopes,
7
+ :last_used_at,
8
+ :description,
9
+ # 🚅 super scaffolding will insert new fields above this line.
10
+ :created_at
@@ -0,0 +1 @@
1
+ json.array! @access_tokens, partial: "api/v2/platform/access_tokens/access_token", as: :access_token
@@ -0,0 +1 @@
1
+ json.partial! "api/v2/platform/access_tokens/access_token", access_token: @access_token
@@ -0,0 +1 @@
1
+ json.array! @teams, partial: "api/v2/teams/team", as: :team
@@ -0,0 +1 @@
1
+ json.partial! "api/v2/teams/team", team: @team
@@ -0,0 +1 @@
1
+ json.array! @users, partial: "api/v2/users/user", as: :user
@@ -0,0 +1 @@
1
+ json.partial! "api/v2/users/user", user: @user
data/config/routes.rb CHANGED
@@ -20,15 +20,17 @@ Rails.application.routes.draw do
20
20
  namespace :api do
21
21
  match "*version/openapi.yaml" => "open_api#index", :via => :get
22
22
 
23
- namespace :v1 do
24
- shallow do
25
- resources :users
26
- resources :teams do
27
- resources :invitations
28
- resources :memberships
29
- namespace :platform do
30
- resources :applications do
31
- resources :access_tokens
23
+ BulletTrain::Api.all_versions.each do |version|
24
+ namespace version do
25
+ shallow do
26
+ resources :users
27
+ resources :teams do
28
+ resources :invitations
29
+ resources :memberships
30
+ namespace :platform do
31
+ resources :applications do
32
+ resources :access_tokens
33
+ end
32
34
  end
33
35
  end
34
36
  end
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Api
3
- VERSION = "1.1.10"
3
+ VERSION = "1.1.11"
4
4
  end
5
5
  end
@@ -16,5 +16,18 @@ module BulletTrain
16
16
  module Api
17
17
  mattr_accessor :endpoints, default: []
18
18
  mattr_accessor :current_version, default: "v1"
19
+ mattr_accessor :initial_version, default: "v1"
20
+
21
+ def self.current_version_numeric
22
+ current_version.split("v").last.to_i
23
+ end
24
+
25
+ def self.initial_version_numeric
26
+ initial_version.split("v").last.to_i
27
+ end
28
+
29
+ def self.all_versions
30
+ (initial_version_numeric..current_version_numeric).map { |version| "v#{version}".to_sym }
31
+ end
19
32
  end
20
33
  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.10
4
+ version: 1.1.11
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-10-14 00:00:00.000000000 Z
11
+ date: 2022-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -172,6 +172,16 @@ files:
172
172
  - app/views/api/v1/teams/show.json.jbuilder
173
173
  - app/views/api/v1/users/index.json.jbuilder
174
174
  - app/views/api/v1/users/show.json.jbuilder
175
+ - app/views/api/v2/open_api/shared/_paths.yaml.erb
176
+ - app/views/api/v2/open_api/teams/_paths.yaml.erb
177
+ - app/views/api/v2/open_api/users/_paths.yaml.erb
178
+ - app/views/api/v2/platform/access_tokens/_access_token.json.jbuilder
179
+ - app/views/api/v2/platform/access_tokens/index.json.jbuilder
180
+ - app/views/api/v2/platform/access_tokens/show.json.jbuilder
181
+ - app/views/api/v2/teams/index.json.jbuilder
182
+ - app/views/api/v2/teams/show.json.jbuilder
183
+ - app/views/api/v2/users/index.json.jbuilder
184
+ - app/views/api/v2/users/show.json.jbuilder
175
185
  - config/locales/en/api.en.yml
176
186
  - config/locales/en/me.en.yml
177
187
  - config/locales/en/platform/access_tokens.en.yml