grape-swagger 0.9.0 → 0.10.0
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 +4 -4
- data/.rubocop_todo.yml +13 -13
- data/.travis.yml +1 -0
- data/CHANGELOG.md +19 -0
- data/README.md +49 -2
- data/UPGRADING.md +20 -0
- data/lib/grape-swagger.rb +149 -23
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/api_global_models_spec.rb +0 -2
- data/spec/api_models_spec.rb +39 -3
- data/spec/api_paths_spec.rb +0 -3
- data/spec/api_root_spec.rb +0 -1
- data/spec/api_with_path_versioning_spec.rb +33 -0
- data/spec/api_with_standalone_namespace_spec.rb +215 -0
- data/spec/array_params_spec.rb +34 -0
- data/spec/float_api_spec.rb +30 -0
- data/spec/form_params_spec.rb +15 -0
- data/spec/grape-swagger_helper_spec.rb +18 -3
- data/spec/hide_api_spec.rb +15 -0
- data/spec/markdown/kramdown_adapter_spec.rb +0 -1
- data/spec/markdown/redcarpet_adapter_spec.rb +0 -1
- data/spec/mutually_exclusive_spec.rb +36 -0
- data/spec/non_default_api_spec.rb +0 -5
- data/spec/range_values_spec.rb +49 -0
- data/spec/response_model_spec.rb +10 -0
- metadata +14 -2
    
        data/spec/form_params_spec.rb
    CHANGED
    
    | @@ -30,6 +30,15 @@ describe 'Form Params' do | |
| 30 30 | 
             
                    {}
         | 
| 31 31 | 
             
                  end
         | 
| 32 32 |  | 
| 33 | 
            +
                  params do
         | 
| 34 | 
            +
                    requires :id, type: Integer, desc: 'id of item'
         | 
| 35 | 
            +
                    requires :name, type: String, desc: 'name of item'
         | 
| 36 | 
            +
                    optional :conditions, type: Symbol, desc: 'conditions of item', values: [:one, :two]
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                  post '/items/:id' do
         | 
| 39 | 
            +
                    {}
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 33 42 | 
             
                  add_swagger_documentation
         | 
| 34 43 | 
             
                end
         | 
| 35 44 | 
             
              end
         | 
| @@ -46,5 +55,11 @@ describe 'Form Params' do | |
| 46 55 | 
             
                expect(subject['apis'][1]['path']).to start_with '/items/{id}'
         | 
| 47 56 | 
             
                expect(subject['apis'][1]['operations'][0]['method']).to eq 'PUT'
         | 
| 48 57 | 
             
                expect(subject['apis'][1]['operations'][1]['method']).to eq 'PATCH'
         | 
| 58 | 
            +
                expect(subject['apis'][1]['operations'][2]['method']).to eq 'POST'
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              it 'treats Symbol parameter as form param' do
         | 
| 62 | 
            +
                expect(subject['apis'][1]['operations'][2]['parameters'][2]['paramType']).to eq 'form'
         | 
| 63 | 
            +
                expect(subject['apis'][1]['operations'][2]['parameters'][2]['type']).to eq 'string'
         | 
| 49 64 | 
             
              end
         | 
| 50 65 | 
             
            end
         | 
| @@ -1,7 +1,6 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe 'helpers' do
         | 
| 4 | 
            -
             | 
| 5 4 | 
             
              before :all do
         | 
| 6 5 | 
             
                class HelperTestAPI < Grape::API
         | 
| 7 6 | 
             
                end
         | 
| @@ -59,7 +58,25 @@ describe 'helpers' do | |
| 59 58 | 
             
                      allowMultiple: false
         | 
| 60 59 | 
             
                    }
         | 
| 61 60 | 
             
                  ]
         | 
| 61 | 
            +
                end
         | 
| 62 62 |  | 
| 63 | 
            +
                it 'parses symbol param as string' do
         | 
| 64 | 
            +
                  params = {
         | 
| 65 | 
            +
                    animal: { type: 'Symbol', desc: 'An animal you like', required: true, values: [:cat, :dog] }
         | 
| 66 | 
            +
                  }
         | 
| 67 | 
            +
                  path = '/coolness'
         | 
| 68 | 
            +
                  method = 'POST'
         | 
| 69 | 
            +
                  expect(subject.parse_params(params, path, method)).to eq [
         | 
| 70 | 
            +
                    {
         | 
| 71 | 
            +
                      paramType: 'form',
         | 
| 72 | 
            +
                      name: :animal,
         | 
| 73 | 
            +
                      description: 'An animal you like',
         | 
| 74 | 
            +
                      type: 'string',
         | 
| 75 | 
            +
                      required: true,
         | 
| 76 | 
            +
                      allowMultiple: false,
         | 
| 77 | 
            +
                      enum: [:cat, :dog]
         | 
| 78 | 
            +
                    }
         | 
| 79 | 
            +
                  ]
         | 
| 63 80 | 
             
                end
         | 
| 64 81 |  | 
| 65 82 | 
             
                context 'custom type' do
         | 
| @@ -78,7 +95,6 @@ describe 'helpers' do | |
| 78 95 | 
             
                    ]
         | 
| 79 96 | 
             
                  end
         | 
| 80 97 | 
             
                end
         | 
| 81 | 
            -
             | 
| 82 98 | 
             
              end
         | 
| 83 99 |  | 
| 84 100 | 
             
              context 'parsing the path' do
         | 
| @@ -120,5 +136,4 @@ describe 'helpers' do | |
| 120 136 | 
             
                  ]
         | 
| 121 137 | 
             
                end
         | 
| 122 138 | 
             
              end
         | 
| 123 | 
            -
             | 
| 124 139 | 
             
            end
         | 
    
        data/spec/hide_api_spec.rb
    CHANGED
    
    | @@ -14,6 +14,13 @@ describe 'a hide mounted api' do | |
| 14 14 | 
             
                  get '/hide' do
         | 
| 15 15 | 
             
                    { foo: 'bar' }
         | 
| 16 16 | 
             
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  desc 'Lazily show endpoint',
         | 
| 19 | 
            +
                       hidden: -> { false }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  get '/lazy' do
         | 
| 22 | 
            +
                    { foo: 'bar' }
         | 
| 23 | 
            +
                  end
         | 
| 17 24 | 
             
                end
         | 
| 18 25 |  | 
| 19 26 | 
             
                class HideApi < Grape::API
         | 
| @@ -39,6 +46,7 @@ describe 'a hide mounted api' do | |
| 39 46 | 
             
                  'produces' => Grape::ContentTypes::CONTENT_TYPES.values.uniq,
         | 
| 40 47 | 
             
                  'apis' => [
         | 
| 41 48 | 
             
                    { 'path' => '/simple.{format}', 'description' => 'Operations about simples' },
         | 
| 49 | 
            +
                    { 'path' => '/lazy.{format}', 'description' => 'Operations about lazies' },
         | 
| 42 50 | 
             
                    { 'path' => '/swagger_doc.{format}', 'description' => 'Operations about swagger_docs' }
         | 
| 43 51 | 
             
                  ]
         | 
| 44 52 | 
             
                )
         | 
| @@ -59,6 +67,13 @@ describe 'a hide mounted api with same namespace' do | |
| 59 67 | 
             
                  get '/simple/hide' do
         | 
| 60 68 | 
             
                    { foo: 'bar' }
         | 
| 61 69 | 
             
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  desc 'Lazily hide endpoint',
         | 
| 72 | 
            +
                       hidden: -> { true }
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  get '/simple/lazy' do
         | 
| 75 | 
            +
                    { foo: 'bar' }
         | 
| 76 | 
            +
                  end
         | 
| 62 77 | 
             
                end
         | 
| 63 78 |  | 
| 64 79 | 
             
                class HideNamespaceApi < Grape::API
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe 'Mutually exclusive group params' do
         | 
| 4 | 
            +
              def app
         | 
| 5 | 
            +
                Class.new(Grape::API) do
         | 
| 6 | 
            +
                  format :json
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  params do
         | 
| 9 | 
            +
                    requires :required_group, type: Hash do
         | 
| 10 | 
            +
                      group :param_group_1, type: Hash do
         | 
| 11 | 
            +
                        requires :param_1, type: String
         | 
| 12 | 
            +
                      end
         | 
| 13 | 
            +
                      optional :param_group_2, type: Array do
         | 
| 14 | 
            +
                        requires :param_2, type: String
         | 
| 15 | 
            +
                      end
         | 
| 16 | 
            +
                      mutually_exclusive :param_group_1, :param_group_2
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                  post '/groups' do
         | 
| 20 | 
            +
                    {}
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  add_swagger_documentation
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              it 'marks the nested required params in a group as optional if the group is in a mutually_exclusive set' do
         | 
| 28 | 
            +
                get '/swagger_doc/groups'
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                body = JSON.parse last_response.body
         | 
| 31 | 
            +
                parameters = body['apis'].first['operations'].first['parameters']
         | 
| 32 | 
            +
                expect(parameters).to eq [
         | 
| 33 | 
            +
                  { 'paramType' => 'form', 'name' => 'required_group[param_group_1][param_1]', 'description' => nil, 'type' => 'string', 'required' => false, 'allowMultiple' => false },
         | 
| 34 | 
            +
                  { 'paramType' => 'form', 'name' => 'required_group[param_group_2][][param_2]', 'description' => nil, 'type' => 'string', 'required' => true, 'allowMultiple' => false }]
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
| @@ -3,7 +3,6 @@ require 'spec_helper' | |
| 3 3 | 
             
            describe 'options: ' do
         | 
| 4 4 | 
             
              context 'overriding the basepath' do
         | 
| 5 5 | 
             
                before :all do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  class BasePathMountedApi < Grape::API
         | 
| 8 7 | 
             
                    desc 'This gets something.'
         | 
| 9 8 | 
             
                    get '/something' do
         | 
| @@ -17,7 +16,6 @@ describe 'options: ' do | |
| 17 16 | 
             
                    mount BasePathMountedApi
         | 
| 18 17 | 
             
                    add_swagger_documentation base_path: NON_DEFAULT_BASE_PATH
         | 
| 19 18 | 
             
                  end
         | 
| 20 | 
            -
             | 
| 21 19 | 
             
                end
         | 
| 22 20 |  | 
| 23 21 | 
             
                def app
         | 
| @@ -254,7 +252,6 @@ describe 'options: ' do | |
| 254 252 | 
             
                    mount HideDocumentationPathPrefixedMountedApi
         | 
| 255 253 | 
             
                    add_swagger_documentation hide_documentation_path: true
         | 
| 256 254 | 
             
                  end
         | 
| 257 | 
            -
             | 
| 258 255 | 
             
                end
         | 
| 259 256 |  | 
| 260 257 | 
             
                def app
         | 
| @@ -286,7 +283,6 @@ describe 'options: ' do | |
| 286 283 | 
             
                    }]
         | 
| 287 284 | 
             
                  )
         | 
| 288 285 | 
             
                end
         | 
| 289 | 
            -
             | 
| 290 286 | 
             
              end
         | 
| 291 287 |  | 
| 292 288 | 
             
              context 'overriding hiding the documentation paths in prefixed and versioned API' do
         | 
| @@ -338,7 +334,6 @@ describe 'options: ' do | |
| 338 334 | 
             
                    }]
         | 
| 339 335 | 
             
                  )
         | 
| 340 336 | 
             
                end
         | 
| 341 | 
            -
             | 
| 342 337 | 
             
              end
         | 
| 343 338 |  | 
| 344 339 | 
             
              context 'overriding the mount-path' do
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe 'Range Params' do
         | 
| 4 | 
            +
              def app
         | 
| 5 | 
            +
                Class.new(Grape::API) do
         | 
| 6 | 
            +
                  format :json
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  params do
         | 
| 9 | 
            +
                    requires :letter, type: String, values: 'a'..'z'
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                  post :letter do
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  params do
         | 
| 15 | 
            +
                    requires :number, type: Integer, values: -5..5
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                  post :integer do
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  add_swagger_documentation
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              subject(:letter) do
         | 
| 25 | 
            +
                get '/swagger_doc/letter'
         | 
| 26 | 
            +
                expect(last_response.status).to eq 200
         | 
| 27 | 
            +
                body = JSON.parse last_response.body
         | 
| 28 | 
            +
                body['apis'].first['operations'].first['parameters']
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              it 'has letter range values' do
         | 
| 32 | 
            +
                expect(letter).to eq [
         | 
| 33 | 
            +
                  { 'paramType' => 'form', 'name' => 'letter', 'description' => nil, 'type' => 'string', 'required' => true, 'allowMultiple' => false, 'enum' => ('a'..'z').to_a }
         | 
| 34 | 
            +
                ]
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              subject(:number) do
         | 
| 38 | 
            +
                get '/swagger_doc/integer'
         | 
| 39 | 
            +
                expect(last_response.status).to eq 200
         | 
| 40 | 
            +
                body = JSON.parse last_response.body
         | 
| 41 | 
            +
                body['apis'].first['operations'].first['parameters']
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              it 'has number range values' do
         | 
| 45 | 
            +
                expect(number).to eq [
         | 
| 46 | 
            +
                  { 'paramType' => 'form', 'name' => 'number', 'description' => nil, 'type' => 'integer', 'required' => true, 'allowMultiple' => false, 'format' => 'int32', 'enum' => (-5..5).to_a }
         | 
| 47 | 
            +
                ]
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
    
        data/spec/response_model_spec.rb
    CHANGED
    
    | @@ -11,6 +11,9 @@ describe 'responseModel' do | |
| 11 11 | 
             
                    class Something < Grape::Entity
         | 
| 12 12 | 
             
                      expose :text, documentation: { type: 'string', desc: 'Content of something.' }
         | 
| 13 13 | 
             
                      expose :kind, using: Kind, documentation: { type: 'MyAPI::Kind', desc: 'The kind of this something.' }
         | 
| 14 | 
            +
                      expose :kind2, using: Kind, documentation: { desc: 'Secondary kind.' }
         | 
| 15 | 
            +
                      expose :kind3, using: 'MyAPI::Entities::Kind', documentation: { desc: 'Tertiary kind.' }
         | 
| 16 | 
            +
                      expose :tags, using: 'MyAPI::Entities::Tag', documentation: { desc: 'Tags.', is_array: true }
         | 
| 14 17 | 
             
                      expose :relation, using: 'MyAPI::Entities::Relation', documentation: { type: 'MyAPI::Relation', desc: 'A related model.' }
         | 
| 15 18 | 
             
                    end
         | 
| 16 19 |  | 
| @@ -18,6 +21,10 @@ describe 'responseModel' do | |
| 18 21 | 
             
                      expose :name, documentation: { type: 'string', desc: 'Name' }
         | 
| 19 22 | 
             
                    end
         | 
| 20 23 |  | 
| 24 | 
            +
                    class Tag < Grape::Entity
         | 
| 25 | 
            +
                      expose :name, documentation: { type: 'string', desc: 'Name' }
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
             | 
| 21 28 | 
             
                    class Error < Grape::Entity
         | 
| 22 29 | 
             
                      expose :code, documentation: { type: 'string', desc: 'Error code' }
         | 
| 23 30 | 
             
                      expose :message, documentation: { type: 'string', desc: 'Error message' }
         | 
| @@ -88,6 +95,9 @@ describe 'responseModel' do | |
| 88 95 | 
             
                  'properties' => {
         | 
| 89 96 | 
             
                    'text' => { 'type' => 'string', 'description' => 'Content of something.' },
         | 
| 90 97 | 
             
                    'kind' => { '$ref' => 'MyAPI::Kind', 'description' => 'The kind of this something.' },
         | 
| 98 | 
            +
                    'kind2' => { '$ref' => 'MyAPI::Kind', 'description' => 'Secondary kind.' },
         | 
| 99 | 
            +
                    'kind3' => { '$ref' => 'MyAPI::Kind', 'description' => 'Tertiary kind.' },
         | 
| 100 | 
            +
                    'tags' => { 'items' => { '$ref' => 'MyAPI::Tag' }, 'type' => 'array', 'description' => 'Tags.' },
         | 
| 91 101 | 
             
                    'relation' => { '$ref' => 'MyAPI::Relation', 'description' => 'A related model.' }
         | 
| 92 102 | 
             
                  }
         | 
| 93 103 | 
             
                )
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: grape-swagger
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.10.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Tim Vandecasteele
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2015-03-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: grape
         | 
| @@ -230,8 +230,12 @@ files: | |
| 230 230 | 
             
            - spec/api_models_spec.rb
         | 
| 231 231 | 
             
            - spec/api_paths_spec.rb
         | 
| 232 232 | 
             
            - spec/api_root_spec.rb
         | 
| 233 | 
            +
            - spec/api_with_path_versioning_spec.rb
         | 
| 234 | 
            +
            - spec/api_with_standalone_namespace_spec.rb
         | 
| 235 | 
            +
            - spec/array_params_spec.rb
         | 
| 233 236 | 
             
            - spec/boolean_params_spec.rb
         | 
| 234 237 | 
             
            - spec/default_api_spec.rb
         | 
| 238 | 
            +
            - spec/float_api_spec.rb
         | 
| 235 239 | 
             
            - spec/form_params_spec.rb
         | 
| 236 240 | 
             
            - spec/grape-swagger_helper_spec.rb
         | 
| 237 241 | 
             
            - spec/grape-swagger_spec.rb
         | 
| @@ -241,8 +245,10 @@ files: | |
| 241 245 | 
             
            - spec/markdown/kramdown_adapter_spec.rb
         | 
| 242 246 | 
             
            - spec/markdown/markdown_spec.rb
         | 
| 243 247 | 
             
            - spec/markdown/redcarpet_adapter_spec.rb
         | 
| 248 | 
            +
            - spec/mutually_exclusive_spec.rb
         | 
| 244 249 | 
             
            - spec/namespaced_api_spec.rb
         | 
| 245 250 | 
             
            - spec/non_default_api_spec.rb
         | 
| 251 | 
            +
            - spec/range_values_spec.rb
         | 
| 246 252 | 
             
            - spec/response_model_spec.rb
         | 
| 247 253 | 
             
            - spec/simple_mounted_api_spec.rb
         | 
| 248 254 | 
             
            - spec/spec_helper.rb
         | 
| @@ -278,8 +284,12 @@ test_files: | |
| 278 284 | 
             
            - spec/api_models_spec.rb
         | 
| 279 285 | 
             
            - spec/api_paths_spec.rb
         | 
| 280 286 | 
             
            - spec/api_root_spec.rb
         | 
| 287 | 
            +
            - spec/api_with_path_versioning_spec.rb
         | 
| 288 | 
            +
            - spec/api_with_standalone_namespace_spec.rb
         | 
| 289 | 
            +
            - spec/array_params_spec.rb
         | 
| 281 290 | 
             
            - spec/boolean_params_spec.rb
         | 
| 282 291 | 
             
            - spec/default_api_spec.rb
         | 
| 292 | 
            +
            - spec/float_api_spec.rb
         | 
| 283 293 | 
             
            - spec/form_params_spec.rb
         | 
| 284 294 | 
             
            - spec/grape-swagger_helper_spec.rb
         | 
| 285 295 | 
             
            - spec/grape-swagger_spec.rb
         | 
| @@ -289,8 +299,10 @@ test_files: | |
| 289 299 | 
             
            - spec/markdown/kramdown_adapter_spec.rb
         | 
| 290 300 | 
             
            - spec/markdown/markdown_spec.rb
         | 
| 291 301 | 
             
            - spec/markdown/redcarpet_adapter_spec.rb
         | 
| 302 | 
            +
            - spec/mutually_exclusive_spec.rb
         | 
| 292 303 | 
             
            - spec/namespaced_api_spec.rb
         | 
| 293 304 | 
             
            - spec/non_default_api_spec.rb
         | 
| 305 | 
            +
            - spec/range_values_spec.rb
         | 
| 294 306 | 
             
            - spec/response_model_spec.rb
         | 
| 295 307 | 
             
            - spec/simple_mounted_api_spec.rb
         | 
| 296 308 | 
             
            - spec/spec_helper.rb
         |