openapi-rails 0.3.0 → 0.3.1

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
  SHA1:
3
- metadata.gz: 4c59c89fba1f2018b1a64be627710bf6f3bfdea7
4
- data.tar.gz: c913517ac8e3f9111f7c6df93bceb32a9565df25
3
+ metadata.gz: 7de2269c948f0ee5b643d6508f87551181bec70c
4
+ data.tar.gz: 7b2f7b0279fa82108b3aafcaa7a52743991c5a90
5
5
  SHA512:
6
- metadata.gz: 01bcda62e4d144fed5d03b213693d0cbf00a5df5cab518dd46511d753309fdee6309967249fe319b5b7f21cfbaf4202aa6c57d20c4cfcbbbf8ef93e1369cf3a0
7
- data.tar.gz: 5363c1889eb1245ec444273804822dae79f994b6e9cc6556dd4e8ea67c3ebddf101d6ff903c3476adec91009ea5a24291e7701a942729a82c962fa270696ce3b
6
+ metadata.gz: 344fd7b1b01c77d22bda310dd0ccbcc9719260e5b09e7e5a27cebbc68819b2f3c9e101b3a333045cfbb9ff1e5923f6cb4e4dbb7f09160861cc2130a98e48d843
7
+ data.tar.gz: 658ff23bab20e35dbdfe7e128b014abf73818d8349192f3ded01539315e189ca8aaf798279f407fba5f294e70312d65629d7b6c8cb62c797d0ac13095bbb6bfd
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- <img src="http://www.kra.vc/_Media/swagger-logo.png" align="right" width="90px" />
1
+ <img src="http://www.kra.vc/_Media/swagger-logo.png" align="right" width="100px" />
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/openapi-rails.svg)](https://badge.fury.io/rb/openapi-rails)
2
4
 
3
5
  # OpenAPI
4
6
 
@@ -6,13 +8,15 @@ CRUD interface for Rails models with OpenAPI ([Swagger](http://swagger.io/))
6
8
  specification support and [Swagger UI](http://swagger.io/swagger-ui/)
7
9
  integration.
8
10
 
11
+ **This gem supports only Mongoid, for other ORMs RPs are welcome.**
12
+
9
13
 
10
14
  ## Installation
11
15
 
12
16
  Add to your `Gemfile`:
13
17
 
14
18
  ```ruby
15
- gem 'openapi'
19
+ gem 'openapi-rails'
16
20
  ```
17
21
 
18
22
  For new projects we recommend to run generator to create basic setup:
@@ -21,41 +25,202 @@ For new projects we recommend to run generator to create basic setup:
21
25
  rake g openapi:config
22
26
  ```
23
27
 
28
+ If you have an existing project, please look through this readme file first to
29
+ get an idea of how it works.
30
+
31
+ Generator is creating configuration file `config/initializer/openapi.rb` with
32
+ default `/api` configuration and base controller `app/controllers/api/base_controlle.rb` that provides CRUD actions and specification builder.
33
+
24
34
 
25
35
  ## Usage
26
36
 
37
+ *Here projects API considered to be available at `/api`. Please check out
38
+ [Multiple APIs](#multiple-apis) section for other options.*
39
+
40
+ To add `CRUD` interface for the `Project` model create an empty controller that
41
+ inherits from `BaseController` at `app/controllers/api/projects_controller.rb`:
42
+
43
+ ```ruby
44
+ module Api
45
+ class ProjectsController < BaseController
46
+ end
47
+ end
48
+ ```
49
+
50
+ Map controller with `crud` helper, mount specification and documentation in
51
+ `routes.rb`:
52
+
53
+ ```ruby
54
+ Rails.application.routes.draw do
55
+ namespace :api do
56
+ crud :projects
57
+ # Mount OpenAPI specification for API
58
+ mount_openapi_specification name: :default
59
+ end
60
+
61
+ # Mount Swagger UI documentation for API
62
+ mount_openapi_documentation
63
+ end
64
+ ```
65
+
66
+ Add `Api::ProjectsController` to `config/initializer/openapi.rb` controllers
67
+ arrays of the default configuration:
68
+
69
+ ```ruby
70
+ Openapi.configure do |config|
71
+ config.apis = {
72
+ default: {
73
+ title: 'Default',
74
+ description: '',
75
+ version: '1.0',
76
+ base_path: '/api',
77
+ controllers: [Api::ProjectsController]
78
+ }
79
+ }
80
+ end
81
+ ```
82
+
83
+ Restart develoment server and open [http://localhost:3000/openapi](http://localhost:3000/openapi) where API documentation is served.
84
+
85
+ ![OpenAPI Rails Demo](https://d3vv6lp55qjaqc.cloudfront.net/items/262y2S3Q3N0u14160a20/openapi-rails-demo.png)
86
+
87
+ Meta information about mapped actions and model fields is pulled automatically
88
+ on project initialization. Changes in `routes.rb` or models would require server
89
+ restart to be reflected in documentation.
27
90
 
28
- ## CSV
91
+ In documentation interface for `create` and `update` actions request `Example
92
+ Value` includes only required fields. Other model fields should be added
93
+ manually.
29
94
 
30
95
 
31
- ## Default Index
96
+ ## Supported Features
32
97
 
33
- - _id
98
+ Following features are supported out of the box:
99
+
100
+ - pagination via [kaminari](https://github.com/amatsuda/kaminari)
101
+ - has_scope via [has_scope](https://github.com/plataformatec/has_scope)
102
+ - search via [mongoid-search](https://github.com/mauriciozaffari/mongoid_search)
103
+ - version via [mongoid-history](https://github.com/aq1018/mongoid-history)
104
+ - `CSV` format for `index` action, requires `.csv` format to be added to the
105
+ request url, e.g. `/api/posts.csv`.
34
106
 
35
107
 
36
108
  ## Customization
37
109
 
38
- - json
39
- - has_scope
40
- - per_page
41
- - resource_class
110
+ In the controller there is a way override default behaviour with helpers:
111
+
112
+ - `per_page` — set page size (default `50`) for `index` action
113
+ - `resource_class` — set model class manually
114
+ - `resource_params` — override default method that allows everything
42
115
 
43
116
 
44
117
  ## Custom Actions
45
118
 
46
- - warning
47
- - building spec for custom actions
119
+ Mapped custom actions (not CRUD) will add a log message on server start that
120
+ controller misses specification. As a result they are not added to
121
+ documentation.
122
+
123
+ Specification for custom methods should be added manually. Check out
124
+ [Swagger Blocks](https://github.com/fotinakis/swagger-blocks) gem or
125
+ [specification builder](https://github.com/slate-studio/openapi-rails/blob/master/lib/openapi/mongoid/spec_builder.rb) code for the reference.
126
+
127
+ Here is an example of custom method specification:
128
+
129
+ ```ruby
130
+ module Api
131
+ class ProjectsController < BaseController
132
+ def custom_resource_action
133
+ # TODO: Method implemetation goes here.
134
+ end
135
+
136
+ swagger_path "/projects/{id}/custom_resource_action" do
137
+ operation :get do
138
+ key :tags, ["Projects"]
139
+ key :summary, 'Show extra details'
140
+ key :operationId, "showExtraProjectDetailsById"
141
+ key :produces, %w(application/json)
142
+
143
+ parameter do
144
+ key :name, :id
145
+ key :type, :string
146
+ key :in, :path
147
+ key :required, true
148
+ end
149
+
150
+ response 200 do
151
+ schema do
152
+ key :'$ref', "Project"
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
159
+ ```
48
160
 
49
161
 
50
162
  ## Multiple APIs
51
163
 
52
- - configuration options
164
+ There is a clean way to provide multiple APIs or API versions.
165
+
166
+ Here is an example of setting up two API versions:
167
+
168
+ `config/routes.rb`:
169
+
170
+ ```ruby
171
+ Rails.application.routes.draw do
172
+ namespace :api do
173
+ namespace :v1 do
174
+ crud :projects
175
+ mount_openapi_specification name: :v1
176
+ end
177
+
178
+ namespace :v2 do
179
+ crud :projects
180
+ mount_openapi_specification name: :v2
181
+ end
182
+ end
183
+
184
+ mount_openapi_documentation
185
+ end
186
+ ```
187
+
188
+ `config/initializer/openapi.rb`:
189
+
190
+ ```ruby
191
+ Openapi.configure do |config|
192
+ config.apis = {
193
+ v1: {
194
+ title: 'Version 1',
195
+ description: 'Legacy API version, please check out Version 2.',
196
+ version: '1.0',
197
+ base_path: '/api/v1',
198
+ controllers: [Api::V1::ProjectsController]
199
+ },
200
+ v2: {
201
+ title: 'Version 2',
202
+ description: 'Latest stable API version.',
203
+ version: '2.0',
204
+ base_path: '/api/v2',
205
+ controllers: [Api::V2::ProjectsController]
206
+ }
207
+ }
208
+ end
209
+ ```
210
+
211
+ Controllers with custom logic would be placed at `app/controllers/api/v1` and
212
+ `app/controllers/api/v2` modules.
213
+
214
+ ![OpenAPI Rails — Multiple versions demo](http://files.slatestudio.com/hJjg/openapi-rails-multiple-versions.png)
215
+
53
216
 
217
+ ## Contributors
54
218
 
55
- ## Authors
219
+ - [Alexander Kravets](http://www.kra.vc)
220
+ - [Denis Popov](https://github.com/DenisPopov15)
56
221
 
57
- - Alexander Kravets
58
- - Denis Popov
222
+ If you have any ideas or questions please feel free to reach out! PRs are
223
+ welcome, tests are on the roadmap.
59
224
 
60
225
 
61
- [Slate Studio](https://www.slatestudio.com)
226
+ `OpenAPI Rails` gem is maintained and funded by [Slate Studio LLC](https://www.slatestudio.com).
@@ -206,22 +206,6 @@ module Openapi
206
206
  end
207
207
 
208
208
  class_methods do
209
- def index_json_config(hash)
210
- self.index_json_config = hash
211
- end
212
-
213
- def create_json_config(hash)
214
- self.create_json_config = hash
215
- end
216
-
217
- def show_json_config(hash)
218
- self.show_json_config = hash
219
- end
220
-
221
- def update_json_config(hash)
222
- self.update_json_config = hash
223
- end
224
-
225
209
  def resource_class(name)
226
210
  self.resource_class = name
227
211
  end
@@ -1,3 +1,3 @@
1
1
  module Openapi
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.3.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Kravets