bullet_train-api 1.6.37 → 1.6.38

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: 5998b9f275e4d510c6813400d6901bbcdae7dd64d2050ab73ba0e7591be07940
4
- data.tar.gz: 13fb31eb150e116cfcf05775950a24bd7cd416e39624d7acdc9cad41819f50b5
3
+ metadata.gz: 032efe953b88f9db79bee4f1e1b53f9a25b168a3579620d3c5e4ffe213734984
4
+ data.tar.gz: 3c15eabd737d77781282cef0be064121d35f1dffe4b012818fca5ac5c971ba85
5
5
  SHA512:
6
- metadata.gz: 84762565f3bf2ed15536a7903911fc49d5caad26ac303331122d65dba0428dbb1f96a59a8994162f3debbdfd16c3b264e967fc6b651ffceac6ef9c621c775bfb
7
- data.tar.gz: a3d559780886d26c9833e2a2219a78164c61a0b8e85ef54b35bc9a9d31c1c5a3296a36507c596c1ff47fab39f1269d1b2ac4dbdfa25e8a2a771980a1041f849b
6
+ metadata.gz: 40fb6d61b1968e0e584512bf33797432712665629bc16991b930a5a0934dde01c87512f213bc1db0b3145fee6e558abd1520814564ad1f682257dffe8eeda3b4
7
+ data.tar.gz: 1465a7fa12bd8be5d1ca2daaeb08c456acd7416b26dd880a8fac3ac31f63774227e675d4bc9066658e72c7d288fcc33a1940dbf2fdc64bee0ba4b3970306a6c3
data/README.md CHANGED
@@ -1,28 +1,267 @@
1
1
  # BulletTrain::Api
2
- Short description and motivation.
2
+ API capabilities for apps built with Bullet Train framework.
3
3
 
4
- ## Usage
5
- How to use my plugin.
4
+ ## Quick Start
6
5
 
7
- ## Installation
8
- Add this line to your application's Gemfile:
6
+ ### Installation
9
7
 
10
- ```ruby
11
- gem "bullet_train-api"
12
- ```
8
+ Add this to your Gemfile:
13
9
 
14
- And then execute:
15
- ```bash
16
- $ bundle
17
- ```
10
+ gem "bullet_train-api"
18
11
 
19
- Or install it yourself as:
20
- ```bash
21
- $ gem install bullet_train-api
22
- ```
12
+ Then, run `bundle` or install it manually using `gem install bullet_train-api`.
13
+
14
+ ## Contents
15
+
16
+ - [API](#api)
17
+ - [Accessing](#accessing)
18
+ - [Versioning](#versioning)
19
+ - [Views](#views)
20
+ - [Documentation](#documentation)
21
+ - [Index file](#index-file)
22
+ - [Automatic Components](#automatic-components)
23
+ - [Automatic Paths](#automatic-paths)
24
+ - [External Markdown files](#external-markdown-files)
25
+ - [Examples](#examples)
26
+ - [Example IDs](#example-ids)
27
+ - [Associations](#associations)
28
+ - [Localization](#localization)
29
+ - [Rake Tasks](#rake-tasks)
30
+ - [Bump version](#bump-version)
31
+ - [Export OpenAPI document in file](#export-openapi-document-in-file)
32
+ - [Push OpenAPI document to Redocly](#push-openapi-document-to-redocly)
33
+ - [Create separate translations for API](#create-separate-translations-for-api)
34
+ - [Contributing](#contributing)
35
+ - [License](#license)
36
+ - [Sponsor](#open-source-development-sponsored-by)
37
+
38
+ ### API
39
+
40
+ BulletTrain::Api defines basic REST actions for every model generated with super-scaffolding.
41
+
42
+ #### Accessing
43
+
44
+ BulletTrain::Api uses Bearer token as a default authentication method with the help of [Doorkeeper](https://github.com/doorkeeper-gem/doorkeeper) gem.
45
+ It uses the idea that in order to access the API, there should be a Platform Application object, which can have access to different parts of the application.
46
+ In Bullet Train, each Team may have several Platform Applications (created in Developers > API menu). When a Platform Application is created,
47
+ it automatically generates an Bearer Token needed to access the API, controlled by this Platform Application.
48
+
49
+ #### Versioning
50
+
51
+ Versions are being set automatically based on the location of the controller.
52
+
53
+ Current version can also be checked with
54
+ ````ruby
55
+ BulletTrain::Api.current_version
56
+ ````
57
+
58
+ #### Views
59
+ All API response templates are located in `app/views/api/<version>/` and are written using standard jbuilder syntax.
60
+
61
+ ### Documentation
62
+
63
+ This gem automatically generates OpenAPI 3.1 compatible documentation at:
64
+
65
+ /api/v1/openapi.yaml
66
+
67
+
68
+ #### Index File
69
+
70
+ app/views/api/v1/open_api/index.yaml.erb
71
+
72
+ The index file is the central point for the API documentation. This consists of a number of sections,
73
+ some that get pulled in and bundled at build time.
74
+
75
+ The file is in YAML format, but includes erb code which generates additional YAML with the help of [`jbuilder-schema`](https://github.com/bullet-train-co/jbuilder-schema) gem.
76
+
77
+ #### Automatic Components
78
+
79
+ There are several helper methods available in Index file.
80
+ One of them is `automatic_components_for`, which generates two schemas of a model, Attributes and Parameters, based on it's Jbuilder show file.
81
+ Parameters are used in requests and Attributes are used in responses.
82
+
83
+ For example this code:
84
+ ````yaml
85
+ components:
86
+ schemas:
87
+ <%= automatic_components_for User %>
88
+ ````
89
+ looks for the file `app/views/api/v1/users/_user.json.jbuilder`.
90
+ Let's say it has this contents:
91
+ ````ruby
92
+ json.extract! user,
93
+ :id,
94
+ :email,
95
+ :name
96
+ ````
97
+ then the produced component will be:
98
+ ````yaml
99
+ components:
100
+ schemas:
101
+ UserAttributes:
102
+ type: object
103
+ title: Users
104
+ description: Users
105
+ required:
106
+ - id
107
+ - email
108
+ properties:
109
+ id:
110
+ type: integer
111
+ description: Team ID
112
+ email:
113
+ type: string
114
+ description: Email Address
115
+ name:
116
+ type:
117
+ - string
118
+ - 'null'
119
+ description: Name
120
+ example:
121
+ id: 42
122
+ email: generic-user-1@example.com
123
+ name: Example Name
124
+ UserParameters:
125
+ type: object
126
+ title: Users
127
+ description: Users
128
+ required:
129
+ - email
130
+ properties:
131
+ email:
132
+ type: string
133
+ description: Email Address
134
+ name:
135
+ type:
136
+ - string
137
+ - 'null'
138
+ description: Name
139
+ example:
140
+ email: generic-user-1@example.com
141
+ name: Example First Name
142
+ ````
143
+ As you can see, it automatically sets required fields based on presence validators of the model,
144
+ field types based on the value found in Jbuilder file, descriptions and examples.
145
+ More on how it works and how you can customize the output in [`jbuilder-schema`](https://github.com/bullet-train-co/jbuilder-schema) documentation.
146
+
147
+ #### Automatic Paths
148
+
149
+ Method `automatic_paths_for` generates basic REST paths. It accepts model as it's argument.
150
+ To generate paths for nested models, pass parent model as a second argument. It also accepts `except` as a third argument,
151
+ where you can list actions which paths you don't want to be generated.
152
+
153
+ If the methods defined in the `automatic_paths_for` for the endpoints support
154
+ a write action (i.e. create or update), then doc generation uses the `strong_parameters`
155
+ defined in the corresponding controller to generate the Parameters section in the schema.
156
+
157
+ Automatic paths are generated for basic REST actions. You can customize those paths or add your own by creating a
158
+ file at `app/views/api/<version>/open_api/<Model.underscore.plural>/_paths.yaml.erb`. For REST paths there's no need to
159
+ duplicate all the schema, you can specify only what differs from auto-generated code.
160
+
161
+ #### External Markdown files
162
+
163
+ External text files with Markdown markup can be added with `external_doc` method.
164
+ It assumes that the file with `.md` extension can be found in `app/views/api/<version>/open_api/docs`.
165
+ You can also use `description_for` method with a model, then there should be file `app/views/api/<version>/open_api/docs/<Model.name.underscore>_description.md`
166
+
167
+ This allows including external markdown files in OpenAPI schema like in this example:
168
+
169
+ ````yaml
170
+ openapi: 3.1.0
171
+ info:
172
+ ...
173
+ description: <%= external_doc "info_description" %>
174
+ ...
175
+ tags:
176
+ - name: Team
177
+ description: <%= description_for Team %>
178
+ - name: Addresses::Country
179
+ description: <%= description_for Addresses::Country %>
180
+ ...
181
+ ````
182
+ supposing the following files exist:
183
+ ````
184
+ app/views/api/v1/open_api/docs/info_description.md
185
+ app/views/api/v1/open_api/docs/team_description.md
186
+ app/views/api/v1/open_api/docs/addresses/country_description.md
187
+ ````
188
+
189
+ #### Examples
190
+
191
+ In order to generate example requests and responses for the documentation in the
192
+ `automatic_components_for` calls, the bullet_train-api gem contains `ExampleBot`
193
+ which uses FactoryBot to build an in-memory representation of the model,
194
+ then generates the relevant OpenAPI schema for that model.
195
+
196
+ ExampleBot will attempt to create an instance of the given model called `<model>_example`.
197
+ For namespaced models, `<plural_namespaces>_<model>_example`
198
+
199
+ For example, for the Order model, use `order_example` factory.
200
+
201
+ For Orders::Invoices::LineItem, use `orders_invoices_line_item_example` factory.
202
+
203
+ When writing the factory, the example factory should usually inherit from the existing factory,
204
+ but in some cases (usually if the existing factory uses callbacks or creates associations
205
+ that you may not want), you may wish to not inherit from the existing one.
206
+
207
+ ##### Example IDs
208
+
209
+ Since we only want to use in-memory instances, we need to ensure that all examples
210
+ have an `id` specified, along with `created_at` and `updated_at`, otherwise they
211
+ will show as `null` in the examples.
212
+
213
+ You may wish to use `sequence` for the id in the examples, but you need to be careful
214
+ not to create circular references (see Associations section below)
215
+
216
+ ##### Associations
217
+
218
+ You need to be careful when specifying associated examples since it is easy to get
219
+ into a recursive loop (see Example IDs section above). Also, ensure that you only
220
+ create associations using `FactoryBot.example()` and not `create`, otherwise it will
221
+ create records in your database.
222
+
223
+ #### Localization
224
+
225
+ The documentation requires that `"#{model.name.underscore.pluralize}.label"` localisation value is defined,
226
+ which will be used to set model title and description.
227
+
228
+ ### Rake Tasks
229
+
230
+ #### Bump version
231
+
232
+ Bump the current version of application's API:
233
+
234
+ rake bullet_train:api:bump_version
235
+
236
+ #### Export OpenAPI document in file
237
+
238
+ Export the OpenAPI schema for the application to `tmp/openapi` directory:
239
+
240
+ rake bullet_train:api:export_openapi_schema
241
+
242
+ #### Push OpenAPI document to Redocly
243
+
244
+ Needs `REDOCLY_ORGANIZATION_ID` and `REDOCLY_API_KEY` to be set:
245
+
246
+ rake bullet_train:api:push_to_redocly
247
+
248
+ #### Create separate translations for API
249
+
250
+ Starting in 1.6.28, Bullet Train Scaffolding generates separate translations for API documentation: `api_title` and `api_description`.
251
+ This rake task will add those translations for the existing fields, based on their `heading` value:
252
+
253
+ rake bullet_train:api:create_translations
254
+
255
+ It only needs to be run once after upgrade.
23
256
 
24
257
  ## Contributing
25
- Contribution directions go here.
258
+
259
+ Contributions are welcome! Report bugs and submit pull requests on [GitHub](https://github.com/bullet-train-co/bullet_train-core/tree/main/bullet_train-api).
26
260
 
27
261
  ## License
28
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
262
+
263
+ This gem is open source under the [MIT License](https://opensource.org/licenses/MIT).
264
+
265
+ ## Open-source development sponsored by:
266
+
267
+ <a href="https://www.clickfunnels.com"><img src="https://images.clickfunnel.com/uploads/digital_asset/file/176632/clickfunnels-dark-logo.svg" width="575" /></a>
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Api
3
- VERSION = "1.6.37"
3
+ VERSION = "1.6.38"
4
4
  end
5
5
  end
@@ -92,7 +92,7 @@ namespace :bullet_train do
92
92
  puts "Finished bumping to #{new_version}"
93
93
  end
94
94
 
95
- desc "Bump the current version of application's API"
95
+ desc "Push OpenAPI yaml file to Redocly"
96
96
  task push_to_redocly: :environment do
97
97
  include Rails.application.routes.url_helpers
98
98
 
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.6.37
4
+ version: 1.6.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-11 00:00:00.000000000 Z
11
+ date: 2024-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -164,7 +164,7 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
- description: Bullet Train API
167
+ description: API capabilities for apps built with Bullet Train framework
168
168
  email:
169
169
  - andrew.culver@gmail.com
170
170
  executables: []