swagalicious 0.3.1 → 0.4.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/Gemfile.lock +28 -2
- data/lib/swagalicious.rb +8 -8
- data/lib/swagalicious/example_helpers.rb +12 -2
- data/lib/swagalicious/response_validator.rb +1 -1
- data/lib/swagalicious/swagger_formatter.rb +18 -1
- data/lib/swagalicious/version.rb +1 -1
- data/swagalicious.gemspec +4 -1
- metadata +37 -9
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5b54b885038cd908b12fb7779ba5dad6700c25844d436aae339cffbf909b8b60
         | 
| 4 | 
            +
              data.tar.gz: 6247d5ba551693f405b2139fcfeee3b679a821c0fe9db091e076f5ab4ef88c01
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 24117c44ed8d2b1632ddce6cf817bfb13fe308897535da97c0f1bc5daca7649b41c81dd8558269f11f6454f5e21c7b7504a1a3d5f6ad6d891ec856d880da0550
         | 
| 7 | 
            +
              data.tar.gz: 42d867c31ca4d7ee5f5d5f0023b30330cb971abed696cf989cacc0dbc788dd05464d81586122e2b9d06f3636cb65bc666b124995e05bfd35b955824abd0c617f
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,28 +1,48 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                swagalicious (0. | 
| 4 | 
            +
                swagalicious (0.3.1)
         | 
| 5 5 | 
             
                  faraday (~> 1.3.0)
         | 
| 6 6 | 
             
                  json-schema (~> 2.8.1)
         | 
| 7 7 | 
             
                  oj (~> 3.11.0)
         | 
| 8 | 
            -
                  rack-test (~> 1.1.0)
         | 
| 9 8 | 
             
                  rspec (~> 3.10.0)
         | 
| 10 9 |  | 
| 11 10 | 
             
            GEM
         | 
| 12 11 | 
             
              remote: https://rubygems.org/
         | 
| 13 12 | 
             
              specs:
         | 
| 13 | 
            +
                activesupport (6.1.1)
         | 
| 14 | 
            +
                  concurrent-ruby (~> 1.0, >= 1.0.2)
         | 
| 15 | 
            +
                  i18n (>= 1.6, < 2)
         | 
| 16 | 
            +
                  minitest (>= 5.1)
         | 
| 17 | 
            +
                  tzinfo (~> 2.0)
         | 
| 18 | 
            +
                  zeitwerk (~> 2.3)
         | 
| 14 19 | 
             
                addressable (2.7.0)
         | 
| 15 20 | 
             
                  public_suffix (>= 2.0.2, < 5.0)
         | 
| 21 | 
            +
                byebug (11.1.3)
         | 
| 22 | 
            +
                coderay (1.1.3)
         | 
| 23 | 
            +
                concurrent-ruby (1.1.8)
         | 
| 16 24 | 
             
                diff-lcs (1.4.4)
         | 
| 25 | 
            +
                factory_bot (6.1.0)
         | 
| 26 | 
            +
                  activesupport (>= 5.0.0)
         | 
| 17 27 | 
             
                faraday (1.3.0)
         | 
| 18 28 | 
             
                  faraday-net_http (~> 1.0)
         | 
| 19 29 | 
             
                  multipart-post (>= 1.2, < 3)
         | 
| 20 30 | 
             
                  ruby2_keywords
         | 
| 21 31 | 
             
                faraday-net_http (1.0.1)
         | 
| 32 | 
            +
                i18n (1.8.7)
         | 
| 33 | 
            +
                  concurrent-ruby (~> 1.0)
         | 
| 22 34 | 
             
                json-schema (2.8.1)
         | 
| 23 35 | 
             
                  addressable (>= 2.4)
         | 
| 36 | 
            +
                method_source (1.0.0)
         | 
| 37 | 
            +
                minitest (5.14.3)
         | 
| 24 38 | 
             
                multipart-post (2.1.1)
         | 
| 25 39 | 
             
                oj (3.11.0)
         | 
| 40 | 
            +
                pry (0.13.1)
         | 
| 41 | 
            +
                  coderay (~> 1.1)
         | 
| 42 | 
            +
                  method_source (~> 1.0)
         | 
| 43 | 
            +
                pry-byebug (3.9.0)
         | 
| 44 | 
            +
                  byebug (~> 11.0)
         | 
| 45 | 
            +
                  pry (~> 0.13.0)
         | 
| 26 46 | 
             
                public_suffix (4.0.6)
         | 
| 27 47 | 
             
                rack (2.2.3)
         | 
| 28 48 | 
             
                rack-test (1.1.0)
         | 
| @@ -42,11 +62,17 @@ GEM | |
| 42 62 | 
             
                  rspec-support (~> 3.10.0)
         | 
| 43 63 | 
             
                rspec-support (3.10.1)
         | 
| 44 64 | 
             
                ruby2_keywords (0.0.4)
         | 
| 65 | 
            +
                tzinfo (2.0.4)
         | 
| 66 | 
            +
                  concurrent-ruby (~> 1.0)
         | 
| 67 | 
            +
                zeitwerk (2.4.2)
         | 
| 45 68 |  | 
| 46 69 | 
             
            PLATFORMS
         | 
| 47 70 | 
             
              ruby
         | 
| 48 71 |  | 
| 49 72 | 
             
            DEPENDENCIES
         | 
| 73 | 
            +
              factory_bot (~> 6.1.0)
         | 
| 74 | 
            +
              pry-byebug (~> 3.9.0)
         | 
| 75 | 
            +
              rack-test (~> 1.1.0)
         | 
| 50 76 | 
             
              rake (~> 12.0)
         | 
| 51 77 | 
             
              rspec (~> 3.0)
         | 
| 52 78 | 
             
              swagalicious!
         | 
    
        data/lib/swagalicious.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            require "rspec/core"
         | 
| 2 2 |  | 
| 3 | 
            -
            require_relative "swagalicious/version"
         | 
| 3 | 
            +
            require_relative "./swagalicious/version"
         | 
| 4 4 |  | 
| 5 5 | 
             
            class Swagalicious
         | 
| 6 6 | 
             
              class Error < StandardError; end
         | 
| @@ -9,13 +9,13 @@ class Swagalicious | |
| 9 9 | 
             
                @config ||= Swagalicious::Configuration.new(RSpec.configuration)
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 | 
            -
              require_relative "swagalicious/configuration"
         | 
| 13 | 
            -
              require_relative "swagalicious/example_group_helpers"
         | 
| 14 | 
            -
              require_relative "swagalicious/example_helpers"
         | 
| 15 | 
            -
              require_relative "swagalicious/extended_schema"
         | 
| 16 | 
            -
              require_relative "swagalicious/request_factory"
         | 
| 17 | 
            -
              require_relative "swagalicious/response_validator"
         | 
| 18 | 
            -
              require_relative "swagalicious/swagger_formatter"
         | 
| 12 | 
            +
              require_relative "./swagalicious/configuration"
         | 
| 13 | 
            +
              require_relative "./swagalicious/example_group_helpers"
         | 
| 14 | 
            +
              require_relative "./swagalicious/example_helpers"
         | 
| 15 | 
            +
              require_relative "./swagalicious/extended_schema"
         | 
| 16 | 
            +
              require_relative "./swagalicious/request_factory"
         | 
| 17 | 
            +
              require_relative "./swagalicious/response_validator"
         | 
| 18 | 
            +
              require_relative "./swagalicious/swagger_formatter"
         | 
| 19 19 |  | 
| 20 20 | 
             
              ::RSpec::Core::ExampleGroup.define_example_group_method :path
         | 
| 21 21 |  | 
| @@ -49,12 +49,22 @@ class Swagalicious | |
| 49 49 |  | 
| 50 50 | 
             
                  @body = Oj.load(body, symbol_keys: true)
         | 
| 51 51 |  | 
| 52 | 
            +
                  metadata[:paths] ||= []
         | 
| 53 | 
            +
                  metadata[:paths] << request[:path]
         | 
| 54 | 
            +
             | 
| 52 55 | 
             
                  if request[:payload]
         | 
| 53 56 | 
             
                    metadata[:response][:request] = Oj.load(request[:payload])
         | 
| 54 57 | 
             
                  end
         | 
| 55 58 |  | 
| 56 | 
            -
                  metadata[:response][:examples] | 
| 57 | 
            -
             | 
| 59 | 
            +
                  metadata[:response][:examples] ||= {}
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  mime_types = metadata[:response][:produces] || ["application/json"]
         | 
| 62 | 
            +
                  full_title = "#{metadata[:operation][:summary]}: #{metadata[:description]}"
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  mime_types.each do |mime_type|
         | 
| 65 | 
            +
                    metadata[:response][:examples][mime_type] ||= {}
         | 
| 66 | 
            +
                    metadata[:response][:examples][mime_type][full_title] = @body
         | 
| 67 | 
            +
                  end
         | 
| 58 68 |  | 
| 59 69 | 
             
                  # Validates response matches the proper schema
         | 
| 60 70 | 
             
                  Swagalicious::ResponseValidator.new.validate!(metadata, response)
         | 
| @@ -44,7 +44,7 @@ class Swagalicious | |
| 44 44 | 
             
                    .merge(schemas)
         | 
| 45 45 |  | 
| 46 46 | 
             
                  errors = JSON::Validator.fully_validate(validation_schema, body)
         | 
| 47 | 
            -
                  raise UnexpectedResponse, "Expected response body to match schema: #{errors | 
| 47 | 
            +
                  raise UnexpectedResponse, "Expected response body to match schema: #{errors.join(", ")}" unless errors.empty?
         | 
| 48 48 | 
             
                end
         | 
| 49 49 |  | 
| 50 50 | 
             
                def definitions_or_component_schemas(swagger_doc, version)
         | 
| @@ -92,6 +92,19 @@ class Swagalicious | |
| 92 92 | 
             
                def metadata_to_swagger(metadata)
         | 
| 93 93 | 
             
                  response_code = metadata[:response][:code]
         | 
| 94 94 | 
             
                  response      = metadata[:response].reject { |k, _v| k == :code }
         | 
| 95 | 
            +
                  examples      = response.delete(:examples) || []
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                  examples.each do |mime_type, titles|
         | 
| 98 | 
            +
                    titles.each do |title, example|
         | 
| 99 | 
            +
                      next unless response[:content][mime_type]
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                      response[:content][mime_type][:examples] ||= {}
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                      response[:content][mime_type][:examples][title] ||= {}
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                      response[:content][mime_type][:examples][title][:value] = example
         | 
| 106 | 
            +
                    end
         | 
| 107 | 
            +
                  end
         | 
| 95 108 |  | 
| 96 109 | 
             
                  verb      = metadata[:operation][:verb]
         | 
| 97 110 | 
             
                  operation = metadata[:operation]
         | 
| @@ -125,7 +138,11 @@ class Swagalicious | |
| 125 138 |  | 
| 126 139 | 
             
                  mime_list.each do |mime_type|
         | 
| 127 140 | 
             
                    # TODO upgrade to have content-type specific schema
         | 
| 128 | 
            -
                     | 
| 141 | 
            +
                    body = target_node
         | 
| 142 | 
            +
                      .fetch(:body, {})
         | 
| 143 | 
            +
                      .fetch(mime_type, {})
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                    target_node[:content][mime_type] = { schema: schema }.merge(body)
         | 
| 129 146 | 
             
                  end
         | 
| 130 147 | 
             
                end
         | 
| 131 148 |  | 
    
        data/lib/swagalicious/version.rb
    CHANGED
    
    
    
        data/swagalicious.gemspec
    CHANGED
    
    | @@ -27,6 +27,9 @@ Gem::Specification.new do |spec| | |
| 27 27 | 
             
              spec.add_dependency "faraday",     "~> 1.3.0"
         | 
| 28 28 | 
             
              spec.add_dependency "json-schema", "~> 2.8.1"
         | 
| 29 29 | 
             
              spec.add_dependency "oj",          "~> 3.11.0"
         | 
| 30 | 
            -
              spec.add_dependency "rack-test",   "~> 1.1.0"
         | 
| 31 30 | 
             
              spec.add_dependency "rspec",       "~> 3.10.0"
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              spec.add_development_dependency "factory_bot", "~> 6.1.0"
         | 
| 33 | 
            +
              spec.add_development_dependency "pry-byebug",  "~> 3.9.0"
         | 
| 34 | 
            +
              spec.add_development_dependency "rack-test",   "~> 1.1.0"
         | 
| 32 35 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: swagalicious
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Eugene Howe
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021-01- | 
| 11 | 
            +
            date: 2021-01-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faraday
         | 
| @@ -53,33 +53,61 @@ dependencies: | |
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: 3.11.0
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name:  | 
| 56 | 
            +
              name: rspec
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - "~>"
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version:  | 
| 61 | 
            +
                    version: 3.10.0
         | 
| 62 62 | 
             
              type: :runtime
         | 
| 63 63 | 
             
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version:  | 
| 68 | 
            +
                    version: 3.10.0
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            -
              name:  | 
| 70 | 
            +
              name: factory_bot
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                requirements:
         | 
| 73 73 | 
             
                - - "~>"
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version:  | 
| 76 | 
            -
              type: : | 
| 75 | 
            +
                    version: 6.1.0
         | 
| 76 | 
            +
              type: :development
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 80 | 
             
                - - "~>"
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version:  | 
| 82 | 
            +
                    version: 6.1.0
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: pry-byebug
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - "~>"
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: 3.9.0
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - "~>"
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: 3.9.0
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: rack-test
         | 
| 99 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
                requirements:
         | 
| 101 | 
            +
                - - "~>"
         | 
| 102 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                    version: 1.1.0
         | 
| 104 | 
            +
              type: :development
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - "~>"
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: 1.1.0
         | 
| 83 111 | 
             
            description: This gem is almost a straight copy and paste of https://github.com/rswag/rswag/tree/master/rswag-specs
         | 
| 84 112 | 
             
              with the Rails specific code stripped out so it can be used in Rack applications
         | 
| 85 113 | 
             
              that don't use Rails.
         |