bullet_train-api 1.0.0 → 1.0.4

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: 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