bullet_train-api 1.0.0 → 1.0.1

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: 9e0f1c01d87b93a40a16d82907bf84068a03842fb085b4a95b984d70512f0bde
4
+ data.tar.gz: 60a82c00ed0fed7accc7de60fe4e294fb09ac2cdd644f4257e3013a8086d13cd
5
5
  SHA512:
6
- metadata.gz: 417fb8b614b5a43313c63f1c12572a5ce26eb604412d04deccade31ba27b22974dd32c08791cb1aba0b5397ddba59d94874a131af11e77ea61080875dc85442c
7
- data.tar.gz: dc17c6b4d31ef02c167da2f69262794960e7cd4e1d8bc96142109262c9326a73f7e0cb77998a6854df0eb0cb2c87f1119f4a6ba257c9675beed3a2b487997ca7
6
+ metadata.gz: abed93cb81502188395b8571f50c3f0e60b7704ed2b83d958006d0bd152cd24023b8563601be5506e47ab6278abf7154d5f27d2f545faaa6f1012399b3f22b87
7
+ data.tar.gz: 52962a262499e9ea63ba67ce6bd83853375d82bb1caabdbb128a7b4cb07998597ae3dd0d662a46f1781005177bc41c837f03499c2dfdfbc324a1dd4363219a99
@@ -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,93 @@
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.gsub!(/^#{Rails.root}\/app\/controllers\/api\/v\d+\//, "")
11
+ path.split("_endpoint.").first
12
+ end
13
+
14
+ def self.serializer
15
+ # TODO This could be smart enough to figure out if `V1` is accurate, as well.
16
+ "Api::V1::#{Api.topic.classify}Serializer"
17
+ end
18
+
19
+ def self.status(code)
20
+ I18n.t("api.statuses.#{code}")
21
+ end
22
+
23
+ def self.title(path)
24
+ I18n.t("#{topic}.api.#{path}")
25
+ end
26
+
27
+ def self.heading(path)
28
+ I18n.t("#{topic}.api.fields.#{path}.heading")
29
+ end
30
+
31
+ def self.show_desc
32
+ proc do
33
+ success code: 200, model: Api.serializer, message: Api.status(200)
34
+ failure [
35
+ {code: 401, message: Api.status(401)}, # unauthorized
36
+ {code: 403, message: Api.status(403)}, # forbidden
37
+ {code: 404, message: Api.status(404)}, # not found
38
+ {code: 429, message: Api.status(429)} # too many requests
39
+ ]
40
+ produces ["application/vnd.api+json"]
41
+ end
42
+ end
43
+
44
+ def self.index_desc
45
+ proc do
46
+ success code: 200, model: Api.serializer, message: Api.status(200)
47
+ failure [
48
+ {code: 401, message: Api.status(401)}, # unauthorized
49
+ {code: 429, message: Api.status(429)} # too many requests
50
+ ]
51
+ produces ["application/vnd.api+json"]
52
+ is_array true
53
+ end
54
+ end
55
+
56
+ def self.create_desc
57
+ proc do
58
+ success code: 201, model: Api.serializer, message: Api.status(201)
59
+ failure [
60
+ {code: 400, message: Api.status(400)}, # bad request
61
+ {code: 401, message: Api.status(401)}, # unauthorized
62
+ {code: 403, message: Api.status(403)}, # forbidden
63
+ {code: 406, message: Api.status(406)}, # not acceptable
64
+ {code: 422, message: Api.status(422)}, # unprocessable entity
65
+ {code: 429, message: Api.status(429)} # too many requests
66
+ ]
67
+ consumes ["application/json", "multipart/form-data"]
68
+ produces ["application/vnd.api+json"]
69
+ end
70
+ end
71
+
72
+ def self.update_desc
73
+ proc do
74
+ success code: 200, model: Api.serializer, message: Api.status(200)
75
+ failure [
76
+ {code: 400, message: Api.status(400)}, # bad request
77
+ {code: 401, message: Api.status(401)}, # unauthorized
78
+ {code: 403, message: Api.status(403)}, # forbidden
79
+ {code: 404, message: Api.status(404)}, # not found
80
+ {code: 406, message: Api.status(406)}, # not acceptable
81
+ {code: 422, message: Api.status(422)}, # unprocessable entity
82
+ {code: 429, message: Api.status(429)} # too many requests
83
+ ]
84
+ consumes ["application/json", "multipart/form-data"]
85
+ produces ["application/vnd.api+json"]
86
+ end
87
+ end
88
+
89
+ def self.destroy_desc
90
+ # TODO We don't have anything for this, but we want to make sure it's easy to roll out updates going forward.
91
+ proc {}
92
+ end
93
+ end
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Api
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
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.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
@@ -36,6 +36,8 @@ files:
36
36
  - Rakefile
37
37
  - app/assets/config/bullet_train_api_manifest.js
38
38
  - app/controllers/account/platform/applications_controller.rb
39
+ - app/controllers/api.rb
40
+ - app/controllers/api/base.rb
39
41
  - app/controllers/api/v1.rb
40
42
  - app/controllers/api/v1/defaults.rb
41
43
  - app/controllers/api/v1/exceptions_handler.rb