swagger-blocks 2.0.2 → 3.0.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 +5 -5
 - data/.github/ISSUE_TEMPLATE.md +4 -0
 - data/lib/swagger/blocks.rb +14 -0
 - data/lib/swagger/blocks/class_methods.rb +16 -2
 - data/lib/swagger/blocks/internal_helpers.rb +25 -0
 - data/lib/swagger/blocks/node.rb +48 -10
 - data/lib/swagger/blocks/nodes/all_of_node.rb +6 -5
 - data/lib/swagger/blocks/nodes/callback_destination_node.rb +11 -0
 - data/lib/swagger/blocks/nodes/callback_method_node.rb +16 -0
 - data/lib/swagger/blocks/nodes/callback_node.rb +11 -0
 - data/lib/swagger/blocks/nodes/component_node.rb +50 -0
 - data/lib/swagger/blocks/nodes/content_node.rb +20 -0
 - data/lib/swagger/blocks/nodes/example_node.rb +3 -1
 - data/lib/swagger/blocks/nodes/flow_node.rb +11 -0
 - data/lib/swagger/blocks/nodes/header_node.rb +4 -0
 - data/lib/swagger/blocks/nodes/items_node.rb +1 -1
 - data/lib/swagger/blocks/nodes/link_node.rb +11 -0
 - data/lib/swagger/blocks/nodes/link_parameter_node.rb +8 -0
 - data/lib/swagger/blocks/nodes/one_of_node.rb +11 -0
 - data/lib/swagger/blocks/nodes/operation_node.rb +15 -0
 - data/lib/swagger/blocks/nodes/parameter_node.rb +5 -0
 - data/lib/swagger/blocks/nodes/path_node.rb +6 -0
 - data/lib/swagger/blocks/nodes/property_node.rb +5 -0
 - data/lib/swagger/blocks/nodes/request_body_node.rb +12 -0
 - data/lib/swagger/blocks/nodes/response_node.rb +17 -4
 - data/lib/swagger/blocks/nodes/root_node.rb +16 -2
 - data/lib/swagger/blocks/nodes/schema_node.rb +9 -0
 - data/lib/swagger/blocks/nodes/scopes_node.rb +0 -1
 - data/lib/swagger/blocks/nodes/security_scheme_node.rb +5 -1
 - data/lib/swagger/blocks/nodes/server_node.rb +12 -0
 - data/lib/swagger/blocks/nodes/value_node.rb +8 -0
 - data/lib/swagger/blocks/nodes/variable_node.rb +8 -0
 - data/lib/swagger/blocks/nodes/vendor_extension_node.rb +9 -0
 - data/lib/swagger/blocks/root.rb +8 -1
 - data/lib/swagger/blocks/version.rb +1 -1
 - data/spec/lib/swagger_v2_blocks_spec.rb +1 -1
 - data/spec/lib/swagger_v3_api_declaration.json +592 -0
 - data/spec/lib/swagger_v3_blocks_spec.rb +555 -0
 - metadata +22 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 32f19fd2faba19b9d8fd4111231781cc850037de8aa3042b7d0b7c35093370d4
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 5799cb21a1651e9845d833aae1ee3eb318a475f31d204147e332b0a7c7305251
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ed7faabe133513535df3165f36d090ef3a8fbc7171d04d0d820c0f673fe118117b5ddbd23790175099224a8c1a56c495ddb15ec7306d2cf038de331ef5b48cff
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2a8ea7db734e7093086f5e8a75d15af7f8208a37c89d172a4f0af7fd12aff91c1c23ca9eaa4a21089d4150092114ae8c21dde7ea004b0629b3497383a73141c3
         
     | 
    
        data/lib/swagger/blocks.rb
    CHANGED
    
    | 
         @@ -9,26 +9,40 @@ module Swagger 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                module Nodes
         
     | 
| 
       11 
11 
     | 
    
         
             
                  autoload :AllOfNode, 'swagger/blocks/nodes/all_of_node'
         
     | 
| 
      
 12 
     | 
    
         
            +
                  autoload :CallbackNode, 'swagger/blocks/nodes/callback_node'
         
     | 
| 
      
 13 
     | 
    
         
            +
                  autoload :CallbackDestinationNode, 'swagger/blocks/nodes/callback_destination_node'
         
     | 
| 
      
 14 
     | 
    
         
            +
                  autoload :CallbackMethodNode, 'swagger/blocks/nodes/callback_method_node'
         
     | 
| 
      
 15 
     | 
    
         
            +
                  autoload :ComponentNode, 'swagger/blocks/nodes/component_node'
         
     | 
| 
       12 
16 
     | 
    
         
             
                  autoload :ContactNode, 'swagger/blocks/nodes/contact_node'
         
     | 
| 
      
 17 
     | 
    
         
            +
                  autoload :ContentNode, 'swagger/blocks/nodes/content_node'
         
     | 
| 
       13 
18 
     | 
    
         
             
                  autoload :ExampleNode, 'swagger/blocks/nodes/example_node'
         
     | 
| 
       14 
19 
     | 
    
         
             
                  autoload :ExternalDocsNode, 'swagger/blocks/nodes/external_docs_node'
         
     | 
| 
      
 20 
     | 
    
         
            +
                  autoload :FlowNode, 'swagger/blocks/nodes/flow_node'
         
     | 
| 
       15 
21 
     | 
    
         
             
                  autoload :HeaderNode, 'swagger/blocks/nodes/header_node'
         
     | 
| 
       16 
22 
     | 
    
         
             
                  autoload :InfoNode, 'swagger/blocks/nodes/info_node'
         
     | 
| 
       17 
23 
     | 
    
         
             
                  autoload :ItemsNode, 'swagger/blocks/nodes/items_node'
         
     | 
| 
       18 
24 
     | 
    
         
             
                  autoload :LicenseNode, 'swagger/blocks/nodes/license_node'
         
     | 
| 
      
 25 
     | 
    
         
            +
                  autoload :LinkNode, 'swagger/blocks/nodes/link_node'
         
     | 
| 
      
 26 
     | 
    
         
            +
                  autoload :LinkParameterNode, 'swagger/blocks/nodes/link_parameter_node'
         
     | 
| 
      
 27 
     | 
    
         
            +
                  autoload :OneOfNode, 'swagger/blocks/nodes/one_of_node'
         
     | 
| 
       19 
28 
     | 
    
         
             
                  autoload :OperationNode, 'swagger/blocks/nodes/operation_node'
         
     | 
| 
       20 
29 
     | 
    
         
             
                  autoload :ParameterNode, 'swagger/blocks/nodes/parameter_node'
         
     | 
| 
       21 
30 
     | 
    
         
             
                  autoload :PathNode, 'swagger/blocks/nodes/path_node'
         
     | 
| 
       22 
31 
     | 
    
         
             
                  autoload :PropertiesNode, 'swagger/blocks/nodes/properties_node'
         
     | 
| 
       23 
32 
     | 
    
         
             
                  autoload :PropertyNode, 'swagger/blocks/nodes/property_node'
         
     | 
| 
      
 33 
     | 
    
         
            +
                  autoload :RequestBodyNode, 'swagger/blocks/nodes/request_body_node'
         
     | 
| 
       24 
34 
     | 
    
         
             
                  autoload :ResponseNode, 'swagger/blocks/nodes/response_node'
         
     | 
| 
       25 
35 
     | 
    
         
             
                  autoload :RootNode, 'swagger/blocks/nodes/root_node'
         
     | 
| 
       26 
36 
     | 
    
         
             
                  autoload :SchemaNode, 'swagger/blocks/nodes/schema_node'
         
     | 
| 
       27 
37 
     | 
    
         
             
                  autoload :ScopesNode, 'swagger/blocks/nodes/scopes_node'
         
     | 
| 
       28 
38 
     | 
    
         
             
                  autoload :SecurityRequirementNode, 'swagger/blocks/nodes/security_requirement_node'
         
     | 
| 
       29 
39 
     | 
    
         
             
                  autoload :SecuritySchemeNode, 'swagger/blocks/nodes/security_scheme_node'
         
     | 
| 
      
 40 
     | 
    
         
            +
                  autoload :ServerNode, 'swagger/blocks/nodes/server_node'
         
     | 
| 
       30 
41 
     | 
    
         
             
                  autoload :TagNode, 'swagger/blocks/nodes/tag_node'
         
     | 
| 
      
 42 
     | 
    
         
            +
                  autoload :ValueNode, 'swagger/blocks/nodes/value_node'
         
     | 
| 
      
 43 
     | 
    
         
            +
                  autoload :VariableNode, 'swagger/blocks/nodes/variable_node'
         
     | 
| 
       31 
44 
     | 
    
         
             
                  autoload :XmlNode, 'swagger/blocks/nodes/xml_node'
         
     | 
| 
      
 45 
     | 
    
         
            +
                  autoload :VendorExtensionNode, 'swagger/blocks/nodes/vendor_extension_node'
         
     | 
| 
       32 
46 
     | 
    
         
             
                end
         
     | 
| 
       33 
47 
     | 
    
         
             
              end
         
     | 
| 
       34 
48 
     | 
    
         
             
            end
         
     | 
| 
         @@ -9,6 +9,14 @@ module Swagger 
     | 
|
| 
       9 
9 
     | 
    
         
             
                    @swagger_root_node ||= Swagger::Blocks::Nodes::RootNode.call(inline_keys: inline_keys, &block)
         
     | 
| 
       10 
10 
     | 
    
         
             
                  end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
                  def version
         
     | 
| 
      
 13 
     | 
    
         
            +
                    if defined?(@swagger_root_node) && @swagger_root_node.data[:info] && @swagger_root_node.data[:info].version == '3.0.0'
         
     | 
| 
      
 14 
     | 
    
         
            +
                      '3.0.0'
         
     | 
| 
      
 15 
     | 
    
         
            +
                    else
         
     | 
| 
      
 16 
     | 
    
         
            +
                      '2.0'
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       12 
20 
     | 
    
         
             
                  # v2.0: Defines a Swagger Path Item object
         
     | 
| 
       13 
21 
     | 
    
         
             
                  # https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#path-item-object
         
     | 
| 
       14 
22 
     | 
    
         
             
                  def swagger_path(path, &block)
         
     | 
| 
         @@ -25,7 +33,7 @@ module Swagger 
     | 
|
| 
       25 
33 
     | 
    
         
             
                      path_node.instance_eval(&block)
         
     | 
| 
       26 
34 
     | 
    
         
             
                    else
         
     | 
| 
       27 
35 
     | 
    
         
             
                      # First time we've seen this path
         
     | 
| 
       28 
     | 
    
         
            -
                      @swagger_path_node_map[path] = Swagger::Blocks::Nodes::PathNode.call(version:  
     | 
| 
      
 36 
     | 
    
         
            +
                      @swagger_path_node_map[path] = Swagger::Blocks::Nodes::PathNode.call(version: version, &block)
         
     | 
| 
       29 
37 
     | 
    
         
             
                    end
         
     | 
| 
       30 
38 
     | 
    
         
             
                  end
         
     | 
| 
       31 
39 
     | 
    
         | 
| 
         @@ -41,10 +49,14 @@ module Swagger 
     | 
|
| 
       41 
49 
     | 
    
         
             
                      schema_node.instance_eval(&block)
         
     | 
| 
       42 
50 
     | 
    
         
             
                    else
         
     | 
| 
       43 
51 
     | 
    
         
             
                      # First time we've seen this schema_node
         
     | 
| 
       44 
     | 
    
         
            -
                      @swagger_schema_node_map[name] = Swagger::Blocks::Nodes::SchemaNode.call(version:  
     | 
| 
      
 52 
     | 
    
         
            +
                      @swagger_schema_node_map[name] = Swagger::Blocks::Nodes::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
       45 
53 
     | 
    
         
             
                    end
         
     | 
| 
       46 
54 
     | 
    
         
             
                  end
         
     | 
| 
       47 
55 
     | 
    
         | 
| 
      
 56 
     | 
    
         
            +
                  def swagger_component(inline_keys = nil, &block)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    @swagger_components_node ||= Swagger::Blocks::Nodes::ComponentNode.call(version: '3.0.0', inline_keys: inline_keys, &block)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       48 
60 
     | 
    
         
             
                  def _swagger_nodes
         
     | 
| 
       49 
61 
     | 
    
         
             
                    # Avoid initialization warnings.
         
     | 
| 
       50 
62 
     | 
    
         
             
                    @swagger_root_node ||= nil
         
     | 
| 
         @@ -52,12 +64,14 @@ module Swagger 
     | 
|
| 
       52 
64 
     | 
    
         
             
                    @swagger_schema_node_map ||= nil
         
     | 
| 
       53 
65 
     | 
    
         
             
                    @swagger_api_root_node_map ||= {}
         
     | 
| 
       54 
66 
     | 
    
         
             
                    @swagger_models_node ||= nil
         
     | 
| 
      
 67 
     | 
    
         
            +
                    @swagger_components_node ||= nil
         
     | 
| 
       55 
68 
     | 
    
         | 
| 
       56 
69 
     | 
    
         
             
                    data = {root_node: @swagger_root_node}
         
     | 
| 
       57 
70 
     | 
    
         
             
                    data[:path_node_map] = @swagger_path_node_map
         
     | 
| 
       58 
71 
     | 
    
         
             
                    data[:schema_node_map] = @swagger_schema_node_map
         
     | 
| 
       59 
72 
     | 
    
         
             
                    data[:api_node_map] = @swagger_api_root_node_map
         
     | 
| 
       60 
73 
     | 
    
         
             
                    data[:models_node] = @swagger_models_node
         
     | 
| 
      
 74 
     | 
    
         
            +
                    data[:component_node] = @swagger_components_node
         
     | 
| 
       61 
75 
     | 
    
         
             
                    data
         
     | 
| 
       62 
76 
     | 
    
         
             
                  end
         
     | 
| 
       63 
77 
     | 
    
         
             
                end
         
     | 
| 
         @@ -10,6 +10,8 @@ module Swagger 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                    path_node_map = {}
         
     | 
| 
       12 
12 
     | 
    
         
             
                    schema_node_map = {}
         
     | 
| 
      
 13 
     | 
    
         
            +
                    component_node = nil
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       13 
15 
     | 
    
         
             
                    swaggered_classes.each do |swaggered_class|
         
     | 
| 
       14 
16 
     | 
    
         
             
                      next unless swaggered_class.respond_to?(:_swagger_nodes, true)
         
     | 
| 
       15 
17 
     | 
    
         
             
                      swagger_nodes = swaggered_class.send(:_swagger_nodes)
         
     | 
| 
         @@ -23,11 +25,29 @@ module Swagger 
     | 
|
| 
       23 
25 
     | 
    
         
             
                      if swagger_nodes[:schema_node_map]
         
     | 
| 
       24 
26 
     | 
    
         
             
                        schema_node_map.merge!(swagger_nodes[:schema_node_map])
         
     | 
| 
       25 
27 
     | 
    
         
             
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                      if swagger_nodes[:component_node]
         
     | 
| 
      
 29 
     | 
    
         
            +
                        if component_node
         
     | 
| 
      
 30 
     | 
    
         
            +
                          merge_components(component_node, swagger_nodes, :examples)
         
     | 
| 
      
 31 
     | 
    
         
            +
                          merge_components(component_node, swagger_nodes, :links)
         
     | 
| 
      
 32 
     | 
    
         
            +
                          merge_components(component_node, swagger_nodes, :parameters)
         
     | 
| 
      
 33 
     | 
    
         
            +
                          merge_components(component_node, swagger_nodes, :requestBodies)
         
     | 
| 
      
 34 
     | 
    
         
            +
                          merge_components(component_node, swagger_nodes, :responses)
         
     | 
| 
      
 35 
     | 
    
         
            +
                          merge_components(component_node, swagger_nodes, :schemas)
         
     | 
| 
      
 36 
     | 
    
         
            +
                          merge_components(component_node, swagger_nodes, :securitySchemes)
         
     | 
| 
      
 37 
     | 
    
         
            +
                        else
         
     | 
| 
      
 38 
     | 
    
         
            +
                          component_node = swagger_nodes[:component_node]
         
     | 
| 
      
 39 
     | 
    
         
            +
                        end
         
     | 
| 
      
 40 
     | 
    
         
            +
                      end
         
     | 
| 
       26 
41 
     | 
    
         
             
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
       27 
43 
     | 
    
         
             
                    data = {root_node: self.limit_root_node(root_nodes)}
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       28 
45 
     | 
    
         
             
                    if data[:root_node].is_swagger_2_0?
         
     | 
| 
       29 
46 
     | 
    
         
             
                      data[:path_nodes] = path_node_map
         
     | 
| 
       30 
47 
     | 
    
         
             
                      data[:schema_nodes] = schema_node_map
         
     | 
| 
      
 48 
     | 
    
         
            +
                    elsif data[:root_node].is_openapi_3_0?
         
     | 
| 
      
 49 
     | 
    
         
            +
                      data[:path_nodes] = path_node_map
         
     | 
| 
      
 50 
     | 
    
         
            +
                      data[:component_node] = component_node
         
     | 
| 
       31 
51 
     | 
    
         
             
                    else
         
     | 
| 
       32 
52 
     | 
    
         
             
                      data[:api_node_map] = api_node_map
         
     | 
| 
       33 
53 
     | 
    
         
             
                      data[:models_nodes] = models_nodes
         
     | 
| 
         @@ -35,6 +55,11 @@ module Swagger 
     | 
|
| 
       35 
55 
     | 
    
         
             
                    data
         
     | 
| 
       36 
56 
     | 
    
         
             
                  end
         
     | 
| 
       37 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
                  def self.merge_components(component_node, swagger_nodes, key)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    component_node.data[key] ||= {}
         
     | 
| 
      
 60 
     | 
    
         
            +
                    component_node.data[key].merge!(swagger_nodes[:component_node].data[key]) if swagger_nodes[:component_node].data[key]
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       38 
63 
     | 
    
         
             
                  # Make sure there is exactly one root_node and return it.
         
     | 
| 
       39 
64 
     | 
    
         
             
                  # TODO should this merge the contents of the root nodes instead?
         
     | 
| 
       40 
65 
     | 
    
         
             
                  def self.limit_root_node(root_nodes)
         
     | 
    
        data/lib/swagger/blocks/node.rb
    CHANGED
    
    | 
         @@ -4,6 +4,8 @@ module Swagger 
     | 
|
| 
       4 
4 
     | 
    
         
             
                class Node
         
     | 
| 
       5 
5 
     | 
    
         
             
                  attr_accessor :name
         
     | 
| 
       6 
6 
     | 
    
         
             
                  attr_writer :version
         
     | 
| 
      
 7 
     | 
    
         
            +
                  VERSION_2 = '2.0'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  VERSION_3 = '3.0.0'
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
                  def self.call(options = {}, &block)
         
     | 
| 
       9 
11 
     | 
    
         
             
                    # Create a new instance and evaluate the block into it.
         
     | 
| 
         @@ -15,20 +17,35 @@ module Swagger 
     | 
|
| 
       15 
17 
     | 
    
         
             
                    instance
         
     | 
| 
       16 
18 
     | 
    
         
             
                  end
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
                  def as_json
         
     | 
| 
       19 
     | 
    
         
            -
                     
     | 
| 
      
 20 
     | 
    
         
            +
                  def as_json(options = {})
         
     | 
| 
      
 21 
     | 
    
         
            +
                    version = options.fetch(:version, VERSION_2)
         
     | 
| 
       20 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
                    result = {}
         
     | 
| 
       21 
24 
     | 
    
         
             
                    self.data.each do |key, value|
         
     | 
| 
       22 
25 
     | 
    
         
             
                      if value.is_a?(Node)
         
     | 
| 
       23 
     | 
    
         
            -
                        result[key] = value.as_json
         
     | 
| 
      
 26 
     | 
    
         
            +
                        result[key] = value.as_json(version: version)
         
     | 
| 
       24 
27 
     | 
    
         
             
                      elsif value.is_a?(Array)
         
     | 
| 
       25 
28 
     | 
    
         
             
                        result[key] = []
         
     | 
| 
       26 
     | 
    
         
            -
                        value.each  
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 29 
     | 
    
         
            +
                        value.each do |v|
         
     | 
| 
      
 30 
     | 
    
         
            +
                          result[key] << value_as_json(v, version)
         
     | 
| 
      
 31 
     | 
    
         
            +
                        end
         
     | 
| 
      
 32 
     | 
    
         
            +
                      elsif value.is_a?(Hash)
         
     | 
| 
       28 
33 
     | 
    
         
             
                        result[key] = {}
         
     | 
| 
       29 
     | 
    
         
            -
                        value.each_pair {|k, v| result[key][k] = (v 
     | 
| 
       30 
     | 
    
         
            -
                      elsif  
     | 
| 
      
 34 
     | 
    
         
            +
                        value.each_pair {|k, v| result[key][k] = value_as_json(v, version) }
         
     | 
| 
      
 35 
     | 
    
         
            +
                      elsif version == VERSION_2 && ref?(key) && !static_ref?(value)
         
     | 
| 
       31 
36 
     | 
    
         
             
                        result[key] = "#/definitions/#{value}"
         
     | 
| 
      
 37 
     | 
    
         
            +
                      elsif version == VERSION_3 && ref?(key) && self.is_a?(Swagger::Blocks::Nodes::LinkNode) && !static_ref?(value)
         
     | 
| 
      
 38 
     | 
    
         
            +
                        result[key] = "#/components/links/#{value}"
         
     | 
| 
      
 39 
     | 
    
         
            +
                      elsif version == VERSION_3 && ref?(key) && self.is_a?(Swagger::Blocks::Nodes::ExampleNode) && !static_ref?(value)
         
     | 
| 
      
 40 
     | 
    
         
            +
                        result[key] = "#/components/examples/#{value}"
         
     | 
| 
      
 41 
     | 
    
         
            +
                      elsif version == VERSION_3 && ref?(key) && self.is_a?(Swagger::Blocks::Nodes::ParameterNode) && !static_ref?(value)
         
     | 
| 
      
 42 
     | 
    
         
            +
                        result[key] = "#/components/parameters/#{value}"
         
     | 
| 
      
 43 
     | 
    
         
            +
                      elsif version == VERSION_3 && ref?(key) && self.is_a?(Swagger::Blocks::Nodes::RequestBodyNode) && !static_ref?(value)
         
     | 
| 
      
 44 
     | 
    
         
            +
                        result[key] = "#/components/requestBodies/#{value}"
         
     | 
| 
      
 45 
     | 
    
         
            +
                      elsif version == VERSION_3 && ref?(key) && self.is_a?(Swagger::Blocks::Nodes::ResponseNode) && !static_ref?(value)
         
     | 
| 
      
 46 
     | 
    
         
            +
                        result[key] = "#/components/responses/#{value}"
         
     | 
| 
      
 47 
     | 
    
         
            +
                      elsif version == VERSION_3 && ref?(key) && !static_ref?(value)
         
     | 
| 
      
 48 
     | 
    
         
            +
                        result[key] = "#/components/schemas/#{value}"
         
     | 
| 
       32 
49 
     | 
    
         
             
                      else
         
     | 
| 
       33 
50 
     | 
    
         
             
                        result[key] = value
         
     | 
| 
       34 
51 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -38,6 +55,22 @@ module Swagger 
     | 
|
| 
       38 
55 
     | 
    
         
             
                    {name => result}
         
     | 
| 
       39 
56 
     | 
    
         
             
                  end
         
     | 
| 
       40 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
                  def ref?(key)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    key.to_s.eql?('$ref')
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                  def static_ref?(value)
         
     | 
| 
      
 63 
     | 
    
         
            +
                    value.to_s =~ %r{^#/|https?://}
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  def value_as_json(value, version)
         
     | 
| 
      
 67 
     | 
    
         
            +
                    if value.respond_to?(:as_json)
         
     | 
| 
      
 68 
     | 
    
         
            +
                       value.as_json(version: version)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    else
         
     | 
| 
      
 70 
     | 
    
         
            +
                       value
         
     | 
| 
      
 71 
     | 
    
         
            +
                    end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
       41 
74 
     | 
    
         
             
                  def data
         
     | 
| 
       42 
75 
     | 
    
         
             
                    @data ||= {}
         
     | 
| 
       43 
76 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -52,12 +85,17 @@ module Swagger 
     | 
|
| 
       52 
85 
     | 
    
         | 
| 
       53 
86 
     | 
    
         
             
                  def version
         
     | 
| 
       54 
87 
     | 
    
         
             
                    return @version if instance_variable_defined?('@version') && @version
         
     | 
| 
       55 
     | 
    
         
            -
                    return  
     | 
| 
       56 
     | 
    
         
            -
                     
     | 
| 
      
 88 
     | 
    
         
            +
                    return VERSION_2 if data.has_key?(:swagger) && data[:swagger] == VERSION_2
         
     | 
| 
      
 89 
     | 
    
         
            +
                    return VERSION_3 if data.has_key?(:openapi) && data[:openapi] == VERSION_3
         
     | 
| 
      
 90 
     | 
    
         
            +
                    raise DeclarationError, "You must specify swagger '#{VERSION_2}' or openapi '#{VERSION_3}'"
         
     | 
| 
       57 
91 
     | 
    
         
             
                  end
         
     | 
| 
       58 
92 
     | 
    
         | 
| 
       59 
93 
     | 
    
         
             
                  def is_swagger_2_0?
         
     | 
| 
       60 
     | 
    
         
            -
                    version ==  
     | 
| 
      
 94 
     | 
    
         
            +
                    version == VERSION_2
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                  def is_openapi_3_0?
         
     | 
| 
      
 98 
     | 
    
         
            +
                    version == VERSION_3
         
     | 
| 
       61 
99 
     | 
    
         
             
                  end
         
     | 
| 
       62 
100 
     | 
    
         
             
                end
         
     | 
| 
       63 
101 
     | 
    
         
             
              end
         
     | 
| 
         @@ -2,19 +2,20 @@ module Swagger 
     | 
|
| 
       2 
2 
     | 
    
         
             
              module Blocks
         
     | 
| 
       3 
3 
     | 
    
         
             
                module Nodes
         
     | 
| 
       4 
4 
     | 
    
         
             
                  class AllOfNode < Node
         
     | 
| 
       5 
     | 
    
         
            -
                    def as_json
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def as_json(options = {})
         
     | 
| 
      
 6 
     | 
    
         
            +
                      version = options.fetch(:version, '2.0')
         
     | 
| 
       6 
7 
     | 
    
         
             
                      result = []
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
                      self.data.each do |value|
         
     | 
| 
       9 
10 
     | 
    
         
             
                        if value.is_a?(Node)
         
     | 
| 
       10 
     | 
    
         
            -
                          result << value.as_json
         
     | 
| 
      
 11 
     | 
    
         
            +
                          result << value.as_json(version: version)
         
     | 
| 
       11 
12 
     | 
    
         
             
                        elsif value.is_a?(Array)
         
     | 
| 
       12 
13 
     | 
    
         
             
                          r = []
         
     | 
| 
       13 
     | 
    
         
            -
                          value.each { |v| r << (v 
     | 
| 
      
 14 
     | 
    
         
            +
                          value.each { |v| r << value_as_json(v, version) }
         
     | 
| 
       14 
15 
     | 
    
         
             
                          result << r
         
     | 
| 
       15 
     | 
    
         
            -
                        elsif is_swagger_2_0? && value.is_a?(Hash)
         
     | 
| 
      
 16 
     | 
    
         
            +
                        elsif (is_swagger_2_0? || is_openapi_3_0?) && value.is_a?(Hash)
         
     | 
| 
       16 
17 
     | 
    
         
             
                          r = {}
         
     | 
| 
       17 
     | 
    
         
            -
                          value.each_pair {|k, v| r[k] = (v 
     | 
| 
      
 18 
     | 
    
         
            +
                          value.each_pair {|k, v| r[k] = value_as_json(v, version) }
         
     | 
| 
       18 
19 
     | 
    
         
             
                          result << r
         
     | 
| 
       19 
20 
     | 
    
         
             
                        else
         
     | 
| 
       20 
21 
     | 
    
         
             
                          result = value
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Swagger
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Blocks
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class CallbackDestinationNode < Node
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def method(method_name, inline_keys = nil, &block)
         
     | 
| 
      
 6 
     | 
    
         
            +
                      self.data[method_name] = Swagger::Blocks::Nodes::CallbackMethodNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    end
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Swagger
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Blocks
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class CallbackMethodNode < Node
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def request_body(inline_keys = nil, &block)
         
     | 
| 
      
 6 
     | 
    
         
            +
                      self.data[:requestBody] = Swagger::Blocks::Nodes::RequestBodyNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def response(resp, inline_keys = nil, &block)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      self.data[:responses] ||= {}
         
     | 
| 
      
 11 
     | 
    
         
            +
                      self.data[:responses][resp] = Swagger::Blocks::Nodes::ResponseNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Swagger
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Blocks
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class CallbackNode < Node
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def destination(address, inline_keys = nil, &block)
         
     | 
| 
      
 6 
     | 
    
         
            +
                      self.data[address] = Swagger::Blocks::Nodes::CallbackDestinationNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    end
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Swagger
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Blocks
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class ComponentNode < Node
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def schema(name, inline_keys = nil, &block)
         
     | 
| 
      
 6 
     | 
    
         
            +
                      self.data[:schemas] ||= {}
         
     | 
| 
      
 7 
     | 
    
         
            +
                      schema_node = self.data[:schemas][name]
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                      if schema_node
         
     | 
| 
      
 10 
     | 
    
         
            +
                        # Merge this schema_node declaration into the previous one
         
     | 
| 
      
 11 
     | 
    
         
            +
                        schema_node.instance_eval(&block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      else
         
     | 
| 
      
 13 
     | 
    
         
            +
                        # First time we've seen this schema_node
         
     | 
| 
      
 14 
     | 
    
         
            +
                        self.data[:schemas][name] = Swagger::Blocks::Nodes::SchemaNode.call(version: '3.0.0', inline_keys: inline_keys, &block)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    def link(name, inline_keys = nil, &block)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      self.data[:links] ||= {}
         
     | 
| 
      
 20 
     | 
    
         
            +
                      self.data[:links][name] = Swagger::Blocks::Nodes::LinkNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                    def example(name, inline_keys = nil, &block)
         
     | 
| 
      
 24 
     | 
    
         
            +
                      self.data[:examples] ||= {}
         
     | 
| 
      
 25 
     | 
    
         
            +
                      self.data[:examples][name] = Swagger::Blocks::Nodes::ExampleNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    def security_scheme(name, inline_keys = nil, &block)
         
     | 
| 
      
 29 
     | 
    
         
            +
                      self.data[:securitySchemes] ||= {}
         
     | 
| 
      
 30 
     | 
    
         
            +
                      self.data[:securitySchemes][name] = Swagger::Blocks::Nodes::SecuritySchemeNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    def parameter(name, inline_keys = nil, &block)
         
     | 
| 
      
 34 
     | 
    
         
            +
                      self.data[:parameters] ||= {}
         
     | 
| 
      
 35 
     | 
    
         
            +
                      self.data[:parameters][name] = Swagger::Blocks::Nodes::ParameterNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    def request_body(name, inline_keys = nil, &block)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      self.data[:requestBodies] ||= {}
         
     | 
| 
      
 40 
     | 
    
         
            +
                      self.data[:requestBodies][name] = Swagger::Blocks::Nodes::RequestBodyNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    def response(name, inline_keys = nil, &block)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      self.data[:responses] ||= {}
         
     | 
| 
      
 45 
     | 
    
         
            +
                      self.data[:responses][name] = Swagger::Blocks::Nodes::ResponseNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Swagger
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Blocks
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class ContentNode < Node
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def schema(inline_keys = nil, &block)
         
     | 
| 
      
 6 
     | 
    
         
            +
                      self.data[:schema] = Swagger::Blocks::Nodes::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def example(name = nil, inline_keys = nil, &block)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      if name.nil?
         
     | 
| 
      
 11 
     | 
    
         
            +
                        self.data[:example] = Swagger::Blocks::Nodes::ExampleNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      else
         
     | 
| 
      
 13 
     | 
    
         
            +
                        self.data[:examples] ||= {}
         
     | 
| 
      
 14 
     | 
    
         
            +
                        self.data[:examples][name] = Swagger::Blocks::Nodes::ExampleNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Swagger
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Blocks
         
     | 
| 
       3 
3 
     | 
    
         
             
                module Nodes
         
     | 
| 
       4 
     | 
    
         
            -
                  # v2.0:
         
     | 
| 
       5 
4 
     | 
    
         
             
                  class ExampleNode < Node
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def value(inline_keys = nil, &block)
         
     | 
| 
      
 6 
     | 
    
         
            +
                      self.data[:value] = Swagger::Blocks::Nodes::ValueNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    end
         
     | 
| 
       6 
8 
     | 
    
         
             
                  end
         
     | 
| 
       7 
9 
     | 
    
         
             
                end
         
     | 
| 
       8 
10 
     | 
    
         
             
              end
         
     | 
| 
         @@ -6,6 +6,10 @@ module Swagger 
     | 
|
| 
       6 
6 
     | 
    
         
             
                    def items(inline_keys = nil, &block)
         
     | 
| 
       7 
7 
     | 
    
         
             
                      self.data[:items] = Swagger::Blocks::Nodes::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
       8 
8 
     | 
    
         
             
                    end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    def schema(inline_keys = nil, &block)
         
     | 
| 
      
 11 
     | 
    
         
            +
                      self.data[:schema] = Swagger::Blocks::Nodes::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
       9 
13 
     | 
    
         
             
                  end
         
     | 
| 
       10 
14 
     | 
    
         
             
                end
         
     | 
| 
       11 
15 
     | 
    
         
             
              end
         
     | 
| 
         @@ -8,7 +8,7 @@ module Swagger 
     | 
|
| 
       8 
8 
     | 
    
         
             
                      self.data[:properties].version = version
         
     | 
| 
       9 
9 
     | 
    
         
             
                      self.data[:properties].property(name, inline_keys, &block)
         
     | 
| 
       10 
10 
     | 
    
         
             
                    end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       12 
12 
     | 
    
         
             
                    def items(inline_keys = nil, &block)
         
     | 
| 
       13 
13 
     | 
    
         
             
                      self.data[:items] = Swagger::Blocks::Nodes::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
         
     | 
| 
       14 
14 
     | 
    
         
             
                    end
         
     |