weak_swagger_parameters 0.1.1 → 0.2.0

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: 589aa60bdf2a8aa4440760767a381550ad571bc8
4
- data.tar.gz: 51ba734c3937cd9f7638f1227c7fb52dc358c582
3
+ metadata.gz: 85e46ed943f82522b4affcca0fbe25da225527c8
4
+ data.tar.gz: e8f515e3aa857121ec296d75c7783cdb0758334c
5
5
  SHA512:
6
- metadata.gz: ff490d4fab86590a2d39655a3919c07c2f6034daf83fdc06d631147ebecc34bdeaa90123ac394fbde2cd070d39143e5a62ba66b5d1ffe76c14fc8a8ac11dbc6d
7
- data.tar.gz: 93f1d65d0aa7c5315498a7c7585aa9ca904cc75ee37d2abbfeb43d45abb1f208bd95130d802b8f9dfe846bd1a8edcfc699b783921f124713de7bebec103b604d
6
+ metadata.gz: db40e7a3e5b89864cc151dc2f516d0769a1134bed82a3d6308506de488b720f1eae1052286a058546695f78dcaaa64c3d0ba10409b32e5b46b5de1a79043524c
7
+ data.tar.gz: 5e261df19f41b3c7a99e0c381d21b695df5997ae306390b25fa3913918399effd8fc0c9d9b88a9746fb41fbe2786df500fbc15e081ce8f1b672874d35f5d21e4
data/README.md CHANGED
@@ -4,9 +4,7 @@
4
4
 
5
5
  # WeakSwaggerParameters
6
6
 
7
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/weak_swagger_parameters`. To experiment with that code, run `bin/console` for an interactive prompt.
8
-
9
- TODO: Delete this and the text above, and describe your gem
7
+ This is an integration gem between `weak_parameters` and `swagger-blocks` to allow creating interactive swagger documentation and input parameter validation without duplicating the definitions using both DSLs.
10
8
 
11
9
  ## Installation
12
10
 
@@ -18,25 +16,103 @@ gem 'weak_swagger_parameters'
18
16
 
19
17
  And then execute:
20
18
 
21
- $ bundle
22
-
23
- Or install it yourself as:
24
-
25
- $ gem install weak_swagger_parameters
19
+ $ bundle install
26
20
 
27
21
  ## Usage
28
22
 
29
- TODO: Write usage instructions here
23
+ (1) Add route to a docs controller to serve Swagger v2.0 json
24
+ ````ruby
25
+ # routes.rb
26
+
27
+ namespace :v1 do
28
+ resources :docs, only: [:index]
29
+ end
30
+ ````
31
+
32
+ (2) Create a controller for serving the Swagger v2.0 json
33
+ ````ruby
34
+ module V1
35
+ class DocsController < ActionController::Base
36
+ include WeakSwaggerParameters::Controller
37
+
38
+ add_to_doc_section('V1')
39
+
40
+ swagger_root swagger: '2.0' do
41
+ info version: '1.0', title: 'The best api', description: 'Api that does everything'
42
+ key :host, 'example.com'
43
+ key :consumes, ['application/json']
44
+ key :produces, ['application/json']
45
+ end
46
+ def index
47
+ render_docs('V1')
48
+ end
49
+ end
50
+ end
51
+ ````
52
+
53
+ (3) Add metadata to existing controllers for them to show up in the documentation
54
+
55
+ ````ruby
56
+ class ItemsController < ActionController::Base
57
+ include WeakSwaggerParameters::Controller
58
+
59
+ add_to_doc_section('V1')
60
+
61
+ api :create, '/tests', 'Create test' do
62
+ params do
63
+ path do
64
+ string :short_name, 'Short test name'
65
+ integer :count, 'Count of tests'
66
+ end
67
+ query do
68
+ string :token, 'The token'
69
+ end
70
+ body do
71
+ string :subject, 'The unit under test'
72
+ string :context, 'The context of the test'
73
+ integer :runs, 'Run times'
74
+ boolean :passed, 'Passed'
75
+ boolean :boolean_required, 'Boolean required', required: true
76
+ string :string_required, 'String required', required: true
77
+ integer :integer_required, 'Integer required', required: true
78
+ string :string_enum, 'String enum', enum: %w(a b c)
79
+ string :string_default, 'String default', default: 'origin'
80
+ end
81
+ end
82
+ response 201, 'Created the test'
83
+ response 400, 'Bad Request'
84
+ end
85
+ def create
86
+ # ...
87
+ end
88
+ end
89
+ ````
90
+
91
+ For complete examples, see the specs.
30
92
 
31
93
  ## Development
32
94
 
33
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
95
+ Install dependencies
96
+
97
+ ```
98
+ bundle install
99
+ ```
100
+
101
+ Run Specs
102
+
103
+ ```
104
+ bundle exec rake rspec
105
+ ```
34
106
 
35
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
107
+ Run Rubocop
108
+
109
+ ```
110
+ bundle exec rake rubocop
111
+ ```
36
112
 
37
113
  ## Contributing
38
114
 
39
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/weak_swagger_parameters. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
115
+ Bug reports and pull requests are welcome on GitHub at https://github.com/AgileFreaks/weak_swagger_parameters. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
40
116
 
41
117
 
42
118
  ## License
@@ -13,8 +13,30 @@ module WeakSwaggerParameters
13
13
  (@doc_sections || []).include?(doc_section)
14
14
  end
15
15
 
16
- def api(method, path, description, &block)
17
- api_docs = WeakSwaggerParameters::Definitions::Api.new(method, path, description, &block)
16
+ def get(action, path, description, &block)
17
+ api(:get, action, path, description, &block)
18
+ end
19
+
20
+ def post(action, path, description, &block)
21
+ api(:post, action, path, description, &block)
22
+ end
23
+
24
+ def put(action, path, description, &block)
25
+ api(:put, action, path, description, &block)
26
+ end
27
+
28
+ def patch(action, path, description, &block)
29
+ api(:patch, action, path, description, &block)
30
+ end
31
+
32
+ def delete(action, path, description, &block)
33
+ api(:delete, action, path, description, &block)
34
+ end
35
+
36
+ private
37
+
38
+ def api(http_method, action, path, description, &block)
39
+ api_docs = WeakSwaggerParameters::Definitions::Api.new(http_method, action, path, description, &block)
18
40
  api_docs.apply_validations(self)
19
41
  api_docs.apply_docs(self)
20
42
  end
@@ -2,25 +2,18 @@
2
2
  module WeakSwaggerParameters
3
3
  module Definitions
4
4
  class Api
5
- KNOWN_METHODS = {
6
- create: :post,
7
- index: :get,
8
- show: :get,
9
- destroy: :delete,
10
- update: :put
11
- }.freeze
12
-
13
5
  attr_reader :path
14
6
 
15
- def initialize(method, path, summary, &block)
16
- @method = method
7
+ def initialize(http_method, action, path, summary, &block)
8
+ @http_method = http_method
9
+ @action = action
17
10
  @path = path
18
11
  @summary = summary
19
12
  @param_definition = nil
20
13
  @response_definitions = []
21
14
  @description = nil
22
15
 
23
- instance_eval(&block)
16
+ instance_eval(&block) if block.present?
24
17
  end
25
18
 
26
19
  def description(description)
@@ -31,16 +24,16 @@ module WeakSwaggerParameters
31
24
  @param_definition = WeakSwaggerParameters::Definitions::Params.new(&block)
32
25
  end
33
26
 
34
- def response(status_code, description)
27
+ def response(status_code, description = '')
35
28
  @response_definitions << WeakSwaggerParameters::Definitions::Response.new(status_code, description)
36
29
  end
37
30
 
38
31
  def apply_validations(controller_class)
39
32
  child_definitions = validation_definitions
40
- method = @method
33
+ action = @action
41
34
 
42
35
  controller_class.instance_eval do
43
- validates method do
36
+ validates action do
44
37
  child_definitions.each { |definition| definition.apply_validations(self) }
45
38
  end
46
39
  end
@@ -48,11 +41,12 @@ module WeakSwaggerParameters
48
41
 
49
42
  def apply_docs(controller_class)
50
43
  this = self
44
+ http_method = @http_method
51
45
  operation_params = operation_params(http_method, controller_class)
52
46
 
53
47
  controller_class.instance_eval do
54
48
  swagger_path this.path do
55
- operation this.http_method, operation_params do
49
+ operation http_method, operation_params do
56
50
  this.child_definitions.each { |definition| definition.apply_docs(self) }
57
51
  end
58
52
  end
@@ -60,24 +54,20 @@ module WeakSwaggerParameters
60
54
  end
61
55
 
62
56
  def child_definitions
63
- validation_definitions + @response_definitions
64
- end
65
-
66
- def http_method
67
- KNOWN_METHODS[@method]
57
+ (validation_definitions + @response_definitions).compact
68
58
  end
69
59
 
70
60
  private
71
61
 
72
62
  def validation_definitions
73
- [@param_definition]
63
+ [@param_definition].compact
74
64
  end
75
65
 
76
66
  def operation_params(method, controller_class)
77
67
  name = resource_name(controller_class)
78
68
  {
79
69
  summary: @summary,
80
- operationId: operation_id(method, name),
70
+ operationId: operation_id(method, controller_class),
81
71
  tags: [name]
82
72
  }.tap do |h|
83
73
  h[:description] = @description unless @description.blank?
@@ -88,8 +78,8 @@ module WeakSwaggerParameters
88
78
  controller_class.controller_name.humanize
89
79
  end
90
80
 
91
- def operation_id(method, name)
92
- "#{method}#{name}"
81
+ def operation_id(method, controller_class)
82
+ "#{method}_#{controller_class.controller_name}".camelize(:lower)
93
83
  end
94
84
  end
95
85
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module WeakSwaggerParameters
3
- VERSION = '0.1.1'
3
+ VERSION = '0.2.0'
4
4
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_dependency 'rails', '>= 4', '< 5'
23
+ spec.add_dependency 'rails', '>= 4'
24
24
  spec.add_dependency 'weak_parameters', '~> 0.4'
25
25
  spec.add_dependency 'swagger-blocks', '~> 1.3'
26
26
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weak_swagger_parameters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AgileFreaks
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-28 00:00:00.000000000 Z
11
+ date: 2016-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '5'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +24,6 @@ dependencies:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '4'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '5'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: weak_parameters
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -209,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
203
  version: '0'
210
204
  requirements: []
211
205
  rubyforge_project:
212
- rubygems_version: 2.5.1
206
+ rubygems_version: 2.4.5.1
213
207
  signing_key:
214
208
  specification_version: 4
215
209
  summary: Generate docs and Validate request parameters