bullet_train-api 1.0.0 → 1.0.4

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: e1a328cffebe8bbf05bf9d14df56afe1142c64cae544f63cc2a306fa1b999cd8
4
- data.tar.gz: 6e0d56ea3c25db247665f92b2c443ab027ad2a14540307ae0e938b4a9ad890cd
3
+ metadata.gz: 3193b351fc4f2279c115fb5f0c9b7a4faa716aaf471ef46e1cef99ede8e4f22f
4
+ data.tar.gz: f1833fdccd067769780ddfb225afa34fb4c41180b710a6c8125d212e14b98ced
5
5
  SHA512:
6
- metadata.gz: 417fb8b614b5a43313c63f1c12572a5ce26eb604412d04deccade31ba27b22974dd32c08791cb1aba0b5397ddba59d94874a131af11e77ea61080875dc85442c
7
- data.tar.gz: dc17c6b4d31ef02c167da2f69262794960e7cd4e1d8bc96142109262c9326a73f7e0cb77998a6854df0eb0cb2c87f1119f4a6ba257c9675beed3a2b487997ca7
6
+ metadata.gz: eb7b59e156cadb8ac52ecc6e5e1dbf3b9d0910a99fcffcb77b3785f8a557e27fda9ab16049afe08cdbfa23d78975980e10ccf03c3b15e667eb88c793990d5af2
7
+ data.tar.gz: 46aac6d3e39cbc8bd4593f7ee16d77d5669fb582c0949abe6cd78fd5c3d9b6fec07b9aebce72b21d3eac1527446a6902f7d197e894b8c351802adc01c11aceb3
@@ -0,0 +1,26 @@
1
+ require "grape-swagger"
2
+ require_relative "../api"
3
+
4
+ class Api::Base < Grape::API
5
+ content_type :jsonapi, "application/vnd.api+json"
6
+ formatter :json, Grape::Formatter::Jsonapi
7
+ formatter :jsonapi, Grape::Formatter::Jsonapi
8
+ format :jsonapi
9
+ default_error_formatter :json
10
+
11
+ # TODO Shouldn't this be in V1 or not versioned?
12
+ include Api::V1::ExceptionsHandler
13
+
14
+ mount Api::V1::Root
15
+
16
+ # Swagger docs are available at `/api/swagger_doc.json`.
17
+ add_swagger_documentation \
18
+ hide_documentation_path: true,
19
+ array_use_braces: true,
20
+ api_version: "v1",
21
+ info: {
22
+ title: I18n.t("application.name"),
23
+ description: I18n.t("application.description")
24
+ },
25
+ endpoint_auth_wrapper: WineBouncer::OAuth2
26
+ end
@@ -0,0 +1,92 @@
1
+ # We have to do this because there are a couple of different Grape contexts where you're trying to define something
2
+ # for a model's API representation, but the execution context doesn't have access to the endpoint object you're
3
+ # defining things for. I understand the design thinking that caused that situation, but unfortunately for us we just
4
+ # have to brute force our way around it for now. In doing so, we're implementing something not unlike the magic of the
5
+ # `t` helper in Rails views.
6
+
7
+ module Api
8
+ def self.topic
9
+ path = caller.find { |path| path.include?("controllers/api") && !path.include?("app/controllers/api.rb") }
10
+ path.split(/\/app\/controllers\/api\/v\d+\//).last.split("_endpoint.").first
11
+ end
12
+
13
+ def self.serializer
14
+ # TODO This could be smart enough to figure out if `V1` is accurate, as well.
15
+ "Api::V1::#{Api.topic.classify}Serializer"
16
+ end
17
+
18
+ def self.status(code)
19
+ I18n.t("api.statuses.#{code}")
20
+ end
21
+
22
+ def self.title(path)
23
+ I18n.t("#{topic}.api.#{path}")
24
+ end
25
+
26
+ def self.heading(path)
27
+ I18n.t("#{topic}.api.fields.#{path}.heading")
28
+ end
29
+
30
+ def self.show_desc
31
+ proc do
32
+ success code: 200, model: Api.serializer, message: Api.status(200)
33
+ failure [
34
+ {code: 401, message: Api.status(401)}, # unauthorized
35
+ {code: 403, message: Api.status(403)}, # forbidden
36
+ {code: 404, message: Api.status(404)}, # not found
37
+ {code: 429, message: Api.status(429)} # too many requests
38
+ ]
39
+ produces ["application/vnd.api+json"]
40
+ end
41
+ end
42
+
43
+ def self.index_desc
44
+ proc do
45
+ success code: 200, model: Api.serializer, message: Api.status(200)
46
+ failure [
47
+ {code: 401, message: Api.status(401)}, # unauthorized
48
+ {code: 429, message: Api.status(429)} # too many requests
49
+ ]
50
+ produces ["application/vnd.api+json"]
51
+ is_array true
52
+ end
53
+ end
54
+
55
+ def self.create_desc
56
+ proc do
57
+ success code: 201, model: Api.serializer, message: Api.status(201)
58
+ failure [
59
+ {code: 400, message: Api.status(400)}, # bad request
60
+ {code: 401, message: Api.status(401)}, # unauthorized
61
+ {code: 403, message: Api.status(403)}, # forbidden
62
+ {code: 406, message: Api.status(406)}, # not acceptable
63
+ {code: 422, message: Api.status(422)}, # unprocessable entity
64
+ {code: 429, message: Api.status(429)} # too many requests
65
+ ]
66
+ consumes ["application/json", "multipart/form-data"]
67
+ produces ["application/vnd.api+json"]
68
+ end
69
+ end
70
+
71
+ def self.update_desc
72
+ proc do
73
+ success code: 200, model: Api.serializer, message: Api.status(200)
74
+ failure [
75
+ {code: 400, message: Api.status(400)}, # bad request
76
+ {code: 401, message: Api.status(401)}, # unauthorized
77
+ {code: 403, message: Api.status(403)}, # forbidden
78
+ {code: 404, message: Api.status(404)}, # not found
79
+ {code: 406, message: Api.status(406)}, # not acceptable
80
+ {code: 422, message: Api.status(422)}, # unprocessable entity
81
+ {code: 429, message: Api.status(429)} # too many requests
82
+ ]
83
+ consumes ["application/json", "multipart/form-data"]
84
+ produces ["application/vnd.api+json"]
85
+ end
86
+ end
87
+
88
+ def self.destroy_desc
89
+ # TODO We don't have anything for this, but we want to make sure it's easy to roll out updates going forward.
90
+ proc {}
91
+ end
92
+ end
data/config/routes.rb CHANGED
@@ -1,2 +1,4 @@
1
1
  Rails.application.routes.draw do
2
+ use_doorkeeper
3
+ mount Api::Base, at: "/api"
2
4
  end
@@ -1,3 +1,13 @@
1
+ require "grape"
2
+ require "grape-cancan"
3
+ require "grape_jsonapi"
4
+ require "grape-swagger"
5
+ require "grape_on_rails_routes"
6
+ require "wine_bouncer"
7
+ require "kaminari"
8
+ require "api-pagination"
9
+ require "rack/cors"
10
+
1
11
  module BulletTrain
2
12
  module Api
3
13
  class Engine < ::Rails::Engine
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Api
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.4"
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.0.0
4
+ version: 1.0.4
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-01-31 00:00:00.000000000 Z
11
+ date: 2022-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,132 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 7.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: grape
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: grape-cancan
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: grape-jsonapi
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: grape-swagger
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: grape_on_rails_routes
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: wine_bouncer
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: kaminari
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: api-pagination
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rack-cors
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
27
153
  description: Bullet Train API
28
154
  email:
29
155
  - andrew.culver@gmail.com
@@ -36,6 +162,8 @@ files:
36
162
  - Rakefile
37
163
  - app/assets/config/bullet_train_api_manifest.js
38
164
  - app/controllers/account/platform/applications_controller.rb
165
+ - app/controllers/api.rb
166
+ - app/controllers/api/base.rb
39
167
  - app/controllers/api/v1.rb
40
168
  - app/controllers/api/v1/defaults.rb
41
169
  - app/controllers/api/v1/exceptions_handler.rb