useless-doc 0.1.3 → 0.2.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.
- data/lib/useless/doc/core/body.rb +60 -0
- data/lib/useless/doc/core/header.rb +26 -0
- data/lib/useless/doc/core/request.rb +106 -0
- data/lib/useless/doc/core/resource.rb +32 -0
- data/lib/useless/doc/{response/status.rb → core/response.rb} +13 -5
- data/lib/useless/doc/dsl.rb +41 -53
- data/lib/useless/doc/rack/proxy.rb +1 -2
- data/lib/useless/doc/rack/retriever.rb +2 -0
- data/lib/useless/doc/serialization/dump.rb +8 -15
- data/lib/useless/doc/serialization/load.rb +30 -57
- data/lib/useless/doc/ui/godel/template.mustache +84 -111
- data/lib/useless/doc/ui/godel.rb +12 -30
- data/lib/useless/doc/ui.rb +1 -1
- data/lib/useless/doc/version.rb +1 -1
- data/spec/documents/twonk.json +76 -85
- data/spec/useless/doc/dsl_spec.rb +19 -30
- data/spec/useless/doc/serialization/dump_spec.rb +40 -42
- data/spec/useless/doc/serialization/load_spec.rb +50 -52
- data/spec/useless/doc/sinatra_spec.rb +11 -15
- metadata +7 -10
- data/lib/useless/doc/action.rb +0 -50
- data/lib/useless/doc/body.rb +0 -58
- data/lib/useless/doc/header.rb +0 -24
- data/lib/useless/doc/request/parameter.rb +0 -47
- data/lib/useless/doc/request.rb +0 -29
- data/lib/useless/doc/resource.rb +0 -29
- data/lib/useless/doc/response.rb +0 -29
| @@ -10,7 +10,7 @@ | |
| 10 10 |  | 
| 11 11 | 
             
              <p>{{description}}</p>
         | 
| 12 12 |  | 
| 13 | 
            -
              {{# | 
| 13 | 
            +
              {{#requests}}
         | 
| 14 14 | 
             
                <section>
         | 
| 15 15 | 
             
                  <h2>{{method}}</h2>
         | 
| 16 16 |  | 
| @@ -20,121 +20,94 @@ | |
| 20 20 | 
             
                    <li>{{authentication_requirement}}</li>
         | 
| 21 21 | 
             
                  </ul>
         | 
| 22 22 |  | 
| 23 | 
            -
                  {{# | 
| 23 | 
            +
                  {{#parameters?}}
         | 
| 24 24 | 
             
                    <section>
         | 
| 25 | 
            -
                      < | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
                            < | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
                              {{ | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
                            </tbody>
         | 
| 51 | 
            -
                          </table>
         | 
| 52 | 
            -
                        </section>
         | 
| 53 | 
            -
                      {{/parameters?}}
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                      {{#headers?}}
         | 
| 56 | 
            -
                        <section>
         | 
| 57 | 
            -
                          <h4>Headers</h4>
         | 
| 58 | 
            -
                          <table>
         | 
| 59 | 
            -
                            <th>
         | 
| 60 | 
            -
                              <tr>
         | 
| 61 | 
            -
                                <td>Name</td>
         | 
| 62 | 
            -
                                <td>Description</td>
         | 
| 63 | 
            -
                              <tr>
         | 
| 64 | 
            -
                            </th>
         | 
| 65 | 
            -
                            <tbody>
         | 
| 66 | 
            -
                              {{#headers}}
         | 
| 67 | 
            -
                                <tr>
         | 
| 68 | 
            -
                                  <td>{{key}}</td>
         | 
| 69 | 
            -
                                  <td>{{description}}</td>
         | 
| 70 | 
            -
                                </tr>
         | 
| 71 | 
            -
                              {{/headers}}
         | 
| 72 | 
            -
                            </tbody>
         | 
| 73 | 
            -
                          </table>
         | 
| 74 | 
            -
                        </section>
         | 
| 75 | 
            -
                      {{/headers?}}
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                      {{#body}}
         | 
| 78 | 
            -
                        <section>
         | 
| 79 | 
            -
                          <h4>Body</h4>
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                          <ul>
         | 
| 82 | 
            -
                            <li>{{content_type}}</li>
         | 
| 83 | 
            -
                          </ul>
         | 
| 25 | 
            +
                      <h4>Parameters</h4>
         | 
| 26 | 
            +
                      <table>
         | 
| 27 | 
            +
                        <th>
         | 
| 28 | 
            +
                          <tr>
         | 
| 29 | 
            +
                            <td>Name</td>
         | 
| 30 | 
            +
                            <td>Type</td>
         | 
| 31 | 
            +
                            <td>Required</td>
         | 
| 32 | 
            +
                            <td>Default</td>
         | 
| 33 | 
            +
                            <td>Description</td>
         | 
| 34 | 
            +
                          <tr>
         | 
| 35 | 
            +
                        </th>
         | 
| 36 | 
            +
                        <tbody>
         | 
| 37 | 
            +
                          {{#parameters}}
         | 
| 38 | 
            +
                            <tr>
         | 
| 39 | 
            +
                              <td>{{key}}</td>
         | 
| 40 | 
            +
                              <td>{{type}}</td>
         | 
| 41 | 
            +
                              <td>{{required}}</td>
         | 
| 42 | 
            +
                              <td>{{default}}</td>
         | 
| 43 | 
            +
                              <td>{{description}}</td>
         | 
| 44 | 
            +
                            </tr>
         | 
| 45 | 
            +
                          {{/parameters}}
         | 
| 46 | 
            +
                        </tbody>
         | 
| 47 | 
            +
                      </table>
         | 
| 48 | 
            +
                    </section>
         | 
| 49 | 
            +
                  {{/parameters?}}
         | 
| 84 50 |  | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
                          </table>
         | 
| 107 | 
            -
                        </section>
         | 
| 108 | 
            -
                      {{/body}}
         | 
| 51 | 
            +
                  {{#headers?}}
         | 
| 52 | 
            +
                    <section>
         | 
| 53 | 
            +
                      <h4>Headers</h4>
         | 
| 54 | 
            +
                      <table>
         | 
| 55 | 
            +
                        <th>
         | 
| 56 | 
            +
                          <tr>
         | 
| 57 | 
            +
                            <td>Name</td>
         | 
| 58 | 
            +
                            <td>Description</td>
         | 
| 59 | 
            +
                          <tr>
         | 
| 60 | 
            +
                        </th>
         | 
| 61 | 
            +
                        <tbody>
         | 
| 62 | 
            +
                          {{#headers}}
         | 
| 63 | 
            +
                            <tr>
         | 
| 64 | 
            +
                              <td>{{key}}</td>
         | 
| 65 | 
            +
                              <td>{{description}}</td>
         | 
| 66 | 
            +
                            </tr>
         | 
| 67 | 
            +
                          {{/headers}}
         | 
| 68 | 
            +
                        </tbody>
         | 
| 69 | 
            +
                      </table>
         | 
| 70 | 
            +
                    </section>
         | 
| 71 | 
            +
                  {{/headers?}}
         | 
| 109 72 |  | 
| 73 | 
            +
                  {{#body}}
         | 
| 74 | 
            +
                    <section>
         | 
| 75 | 
            +
                      <h4>Body</h4>
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                      <ul>
         | 
| 78 | 
            +
                        <li>{{content_type}}</li>
         | 
| 79 | 
            +
                      </ul>
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                      <table>
         | 
| 82 | 
            +
                        <th>
         | 
| 83 | 
            +
                          <tr>
         | 
| 84 | 
            +
                            <td>Name</td>
         | 
| 85 | 
            +
                            <td>Type</td>
         | 
| 86 | 
            +
                            <td>Required</td>
         | 
| 87 | 
            +
                            <td>Default</td>
         | 
| 88 | 
            +
                            <td>Description</td>
         | 
| 89 | 
            +
                          <tr>
         | 
| 90 | 
            +
                        </th>
         | 
| 91 | 
            +
                        <tbody>
         | 
| 92 | 
            +
                          {{#attributes}}
         | 
| 93 | 
            +
                            <tr>
         | 
| 94 | 
            +
                              <td>{{key}}</td>
         | 
| 95 | 
            +
                              <td>{{type}}</td>
         | 
| 96 | 
            +
                              <td>{{required}}</td>
         | 
| 97 | 
            +
                              <td>{{default}}</td>
         | 
| 98 | 
            +
                              <td>{{description}}</td>
         | 
| 99 | 
            +
                            </tr>
         | 
| 100 | 
            +
                          {{/attributes}}
         | 
| 101 | 
            +
                        </tbody>
         | 
| 102 | 
            +
                      </table>
         | 
| 110 103 | 
             
                    </section>
         | 
| 111 | 
            -
                  {{/ | 
| 104 | 
            +
                  {{/body}}
         | 
| 112 105 |  | 
| 113 | 
            -
                  {{# | 
| 106 | 
            +
                  {{#responses}}
         | 
| 114 107 | 
             
                    <section>
         | 
| 115 | 
            -
                      <h3> | 
| 108 | 
            +
                      <h3>{{code}}</h3>
         | 
| 116 109 |  | 
| 117 | 
            -
                      {{ | 
| 118 | 
            -
                        <section>
         | 
| 119 | 
            -
                          <h4>Statuses</h4>
         | 
| 120 | 
            -
                          <table>
         | 
| 121 | 
            -
                            <th>
         | 
| 122 | 
            -
                              <tr>
         | 
| 123 | 
            -
                                <td>Code</td>
         | 
| 124 | 
            -
                                <td>Description</td>
         | 
| 125 | 
            -
                              <tr>
         | 
| 126 | 
            -
                            </th>
         | 
| 127 | 
            -
                            <tbody>
         | 
| 128 | 
            -
                              {{#statuses}}
         | 
| 129 | 
            -
                                <tr>
         | 
| 130 | 
            -
                                  <td>{{code}}</td>
         | 
| 131 | 
            -
                                  <td>{{description}}</td>
         | 
| 132 | 
            -
                                </tr>
         | 
| 133 | 
            -
                              {{/statuses}}
         | 
| 134 | 
            -
                            </tbody>
         | 
| 135 | 
            -
                          </table>
         | 
| 136 | 
            -
                        </section>
         | 
| 137 | 
            -
                      {{/statuses?}}
         | 
| 110 | 
            +
                      <p>{{description}}</p>
         | 
| 138 111 |  | 
| 139 112 | 
             
                      {{#headers?}}
         | 
| 140 113 | 
             
                        <section>
         | 
| @@ -192,8 +165,8 @@ | |
| 192 165 | 
             
                      {{/body}}
         | 
| 193 166 |  | 
| 194 167 | 
             
                    </section>
         | 
| 195 | 
            -
                  {{/ | 
| 168 | 
            +
                  {{/responses}}
         | 
| 196 169 | 
             
                </section>
         | 
| 197 | 
            -
              {{/ | 
| 170 | 
            +
              {{/requests}}
         | 
| 198 171 |  | 
| 199 172 | 
             
            </body>
         | 
    
        data/lib/useless/doc/ui/godel.rb
    CHANGED
    
    | @@ -22,44 +22,26 @@ module Useless | |
| 22 22 | 
             
                        @resource = resource
         | 
| 23 23 | 
             
                      end
         | 
| 24 24 |  | 
| 25 | 
            -
                      def  | 
| 26 | 
            -
                        @resource. | 
| 25 | 
            +
                      def requests
         | 
| 26 | 
            +
                        @resource.requests.map{ |request| Godel::Request.new(request) }
         | 
| 27 27 | 
             
                      end
         | 
| 28 28 | 
             
                    end
         | 
| 29 29 |  | 
| 30 | 
            -
                    class  | 
| 30 | 
            +
                    class Request
         | 
| 31 31 | 
             
                      extend Forwardable
         | 
| 32 32 |  | 
| 33 | 
            -
                      def_delegators :@ | 
| 33 | 
            +
                      def_delegators :@request, :method, :description, :parameters, :headers, :body
         | 
| 34 34 |  | 
| 35 | 
            -
                      def initialize( | 
| 36 | 
            -
                        @ | 
| 35 | 
            +
                      def initialize(request)
         | 
| 36 | 
            +
                        @request = request
         | 
| 37 37 | 
             
                      end
         | 
| 38 38 |  | 
| 39 39 | 
             
                      def authentication_requirement
         | 
| 40 | 
            -
                        @ | 
| 40 | 
            +
                        @request.authentication_required ?
         | 
| 41 41 | 
             
                          'Authentication Required' :
         | 
| 42 42 | 
             
                          'Authenication Not Required'
         | 
| 43 43 | 
             
                      end
         | 
| 44 44 |  | 
| 45 | 
            -
                      def request
         | 
| 46 | 
            -
                        Godel::Request.new(@action.request)
         | 
| 47 | 
            -
                      end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                      def response
         | 
| 50 | 
            -
                        Godel::Response.new(@action.response)
         | 
| 51 | 
            -
                      end
         | 
| 52 | 
            -
                    end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                    class Request
         | 
| 55 | 
            -
                      extend Forwardable
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                      def_delegators :@request, :parameters, :headers, :body
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                      def initialize(request)
         | 
| 60 | 
            -
                        @request = request
         | 
| 61 | 
            -
                      end
         | 
| 62 | 
            -
             | 
| 63 45 | 
             
                      def parameters?
         | 
| 64 46 | 
             
                        parameters.any?
         | 
| 65 47 | 
             
                      end
         | 
| @@ -67,21 +49,21 @@ module Useless | |
| 67 49 | 
             
                      def headers?
         | 
| 68 50 | 
             
                        headers.any?
         | 
| 69 51 | 
             
                      end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                      def responses
         | 
| 54 | 
            +
                        @request.responses.map { |response| Godel::Response.new(response) }
         | 
| 55 | 
            +
                      end
         | 
| 70 56 | 
             
                    end
         | 
| 71 57 |  | 
| 72 58 | 
             
                    class Response
         | 
| 73 59 | 
             
                      extend Forwardable
         | 
| 74 60 |  | 
| 75 | 
            -
                      def_delegators :@response, : | 
| 61 | 
            +
                      def_delegators :@response, :code, :description, :headers, :body
         | 
| 76 62 |  | 
| 77 63 | 
             
                      def initialize(response)
         | 
| 78 64 | 
             
                        @response = response
         | 
| 79 65 | 
             
                      end
         | 
| 80 66 |  | 
| 81 | 
            -
                      def statuses?
         | 
| 82 | 
            -
                        statuses.any?
         | 
| 83 | 
            -
                      end
         | 
| 84 | 
            -
             | 
| 85 67 | 
             
                      def headers?
         | 
| 86 68 | 
             
                        headers.any?
         | 
| 87 69 | 
             
                      end
         | 
    
        data/lib/useless/doc/ui.rb
    CHANGED
    
    
    
        data/lib/useless/doc/version.rb
    CHANGED
    
    
    
        data/spec/documents/twonk.json
    CHANGED
    
    | @@ -1,106 +1,97 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
              "path": "/twonks/:id",
         | 
| 3 3 | 
             
              "description": "The most critical aspect.",
         | 
| 4 | 
            -
              " | 
| 4 | 
            +
              "requests": [
         | 
| 5 5 | 
             
                {
         | 
| 6 | 
            -
                  "description": "Retrieve a representation of an individual twonk.",
         | 
| 7 6 | 
             
                  "method": "GET",
         | 
| 7 | 
            +
                  "description": "Retrieve a representation of an individual twonk.",
         | 
| 8 8 | 
             
                  "authentication_required": false,
         | 
| 9 | 
            -
                  " | 
| 10 | 
            -
                     | 
| 11 | 
            -
                       | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                       | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
                     | 
| 26 | 
            -
                       | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
                       | 
| 38 | 
            -
                      {
         | 
| 39 | 
            -
                        " | 
| 40 | 
            -
                        " | 
| 9 | 
            +
                  "parameters": [
         | 
| 10 | 
            +
                    {
         | 
| 11 | 
            +
                      "type": "path",
         | 
| 12 | 
            +
                      "key": "id",
         | 
| 13 | 
            +
                      "required": true,
         | 
| 14 | 
            +
                      "description": "The ID of the desired twonk."
         | 
| 15 | 
            +
                    },
         | 
| 16 | 
            +
                    {
         | 
| 17 | 
            +
                      "type": "query",
         | 
| 18 | 
            +
                      "key": "werp",
         | 
| 19 | 
            +
                      "required": false,
         | 
| 20 | 
            +
                      "default": 12,
         | 
| 21 | 
            +
                      "description": "Self-explanatory."
         | 
| 22 | 
            +
                    }
         | 
| 23 | 
            +
                  ],
         | 
| 24 | 
            +
                  "headers": [
         | 
| 25 | 
            +
                    {
         | 
| 26 | 
            +
                      "key": "User-Agent",
         | 
| 27 | 
            +
                      "description": "The thingy you're using."
         | 
| 28 | 
            +
                    }
         | 
| 29 | 
            +
                  ],
         | 
| 30 | 
            +
                  "responses": [
         | 
| 31 | 
            +
                    {
         | 
| 32 | 
            +
                      "code": 404,
         | 
| 33 | 
            +
                      "description": "A twonk with the specified ID could not be found."
         | 
| 34 | 
            +
                    },
         | 
| 35 | 
            +
                    {
         | 
| 36 | 
            +
                      "code": 200,
         | 
| 37 | 
            +
                      "description": "The specified twonk was retrieved successfully.",
         | 
| 38 | 
            +
                      "body": {
         | 
| 39 | 
            +
                        "content_type": "application/json",
         | 
| 40 | 
            +
                        "attributes": [
         | 
| 41 | 
            +
                          {
         | 
| 42 | 
            +
                            "key": "name",
         | 
| 43 | 
            +
                            "type": "string",
         | 
| 44 | 
            +
                            "required": true,
         | 
| 45 | 
            +
                            "description": "The name of the twonk."
         | 
| 46 | 
            +
                          },
         | 
| 47 | 
            +
                          {
         | 
| 48 | 
            +
                            "key": "created_by",
         | 
| 49 | 
            +
                            "type": "object",
         | 
| 50 | 
            +
                            "required": true,
         | 
| 51 | 
            +
                            "description": "The short name of the user who created the twonk."
         | 
| 52 | 
            +
                          }
         | 
| 53 | 
            +
                        ]
         | 
| 41 54 | 
             
                      }
         | 
| 42 | 
            -
                    ],
         | 
| 43 | 
            -
                    "body": {
         | 
| 44 | 
            -
                      "content_type": "application/json",
         | 
| 45 | 
            -
                      "attributes": [
         | 
| 46 | 
            -
                        {
         | 
| 47 | 
            -
                          "key": "name",
         | 
| 48 | 
            -
                          "type": "string",
         | 
| 49 | 
            -
                          "required": true,
         | 
| 50 | 
            -
                          "description": "The name of the twonk."
         | 
| 51 | 
            -
                        },
         | 
| 52 | 
            -
                        {
         | 
| 53 | 
            -
                          "key": "created_by",
         | 
| 54 | 
            -
                          "type": "object",
         | 
| 55 | 
            -
                          "required": true,
         | 
| 56 | 
            -
                          "description": "The short name of the user who created the twonk."
         | 
| 57 | 
            -
                        }
         | 
| 58 | 
            -
                      ]
         | 
| 59 55 | 
             
                    }
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                  }
         | 
| 56 | 
            +
                  ]
         | 
| 62 57 | 
             
                },
         | 
| 63 58 |  | 
| 64 59 | 
             
                {
         | 
| 65 | 
            -
                  "description": "Update a twonk.",
         | 
| 66 60 | 
             
                  "method": "PUT",
         | 
| 61 | 
            +
                  "description": "Update a twonk.",
         | 
| 67 62 | 
             
                  "authentication_required": true,
         | 
| 68 | 
            -
                  " | 
| 69 | 
            -
                     | 
| 63 | 
            +
                  "parameters": [
         | 
| 64 | 
            +
                    {
         | 
| 65 | 
            +
                      "type": "path",
         | 
| 66 | 
            +
                      "key": "id",
         | 
| 67 | 
            +
                      "required": true,
         | 
| 68 | 
            +
                      "description": "The ID of the twonk to be updated."
         | 
| 69 | 
            +
                    }
         | 
| 70 | 
            +
                  ],
         | 
| 71 | 
            +
                  "body": {
         | 
| 72 | 
            +
                    "content_type": "application/x-www-form-urlencoded",
         | 
| 73 | 
            +
                    "attributes": [
         | 
| 70 74 | 
             
                      {
         | 
| 71 | 
            -
                        " | 
| 72 | 
            -
                        " | 
| 75 | 
            +
                        "key": "name",
         | 
| 76 | 
            +
                        "type": "string",
         | 
| 73 77 | 
             
                        "required": true,
         | 
| 74 | 
            -
                        "description": "The  | 
| 75 | 
            -
                      }
         | 
| 76 | 
            -
                    ],
         | 
| 77 | 
            -
                    "body": {
         | 
| 78 | 
            -
                      "content_type": "application/x-www-form-urlencoded",
         | 
| 79 | 
            -
                      "attributes": [
         | 
| 80 | 
            -
                        {
         | 
| 81 | 
            -
                          "key": "name",
         | 
| 82 | 
            -
                          "type": "string",
         | 
| 83 | 
            -
                          "required": true,
         | 
| 84 | 
            -
                          "description": "The name of the twonk."
         | 
| 85 | 
            -
                        },
         | 
| 86 | 
            -
                        {
         | 
| 87 | 
            -
                          "key": "hoinked_by",
         | 
| 88 | 
            -
                          "type": "number",
         | 
| 89 | 
            -
                          "required": false,
         | 
| 90 | 
            -
                          "default": 3,
         | 
| 91 | 
            -
                          "description": "The ID of the person who hoinked this twonk."
         | 
| 92 | 
            -
                        }
         | 
| 93 | 
            -
                      ]
         | 
| 94 | 
            -
                    }
         | 
| 95 | 
            -
                  },
         | 
| 96 | 
            -
                  "response": {
         | 
| 97 | 
            -
                    "statuses": [
         | 
| 78 | 
            +
                        "description": "The name of the twonk."
         | 
| 79 | 
            +
                      },
         | 
| 98 80 | 
             
                      {
         | 
| 99 | 
            -
                        " | 
| 100 | 
            -
                        " | 
| 81 | 
            +
                        "key": "hoinked_by",
         | 
| 82 | 
            +
                        "type": "number",
         | 
| 83 | 
            +
                        "required": false,
         | 
| 84 | 
            +
                        "default": 3,
         | 
| 85 | 
            +
                        "description": "The ID of the person who hoinked this twonk."
         | 
| 101 86 | 
             
                      }
         | 
| 102 87 | 
             
                    ]
         | 
| 103 | 
            -
                  }
         | 
| 88 | 
            +
                  },
         | 
| 89 | 
            +
                  "responses": [
         | 
| 90 | 
            +
                    {
         | 
| 91 | 
            +
                      "code": 201,
         | 
| 92 | 
            +
                      "description": "The specified twonk was updated successfully."
         | 
| 93 | 
            +
                    }
         | 
| 94 | 
            +
                  ]
         | 
| 104 95 | 
             
                }
         | 
| 105 96 | 
             
              ]
         | 
| 106 97 | 
             
            }
         | 
| @@ -12,18 +12,12 @@ describe Useless::Doc::DSL do | |
| 12 12 |  | 
| 13 13 | 
             
                    get 'Returns a full listing of the collection' do
         | 
| 14 14 | 
             
                      authentication_required false
         | 
| 15 | 
            +
                      parameter 'page', 'The page of widgets that you\'d like', 
         | 
| 16 | 
            +
                        type: :query, required: false, default: 1
         | 
| 17 | 
            +
                      header 'X-Twiddle', 'The twiddle threshold.'
         | 
| 15 18 |  | 
| 16 | 
            -
                       | 
| 17 | 
            -
             | 
| 18 | 
            -
                          type: :query, required: false, default: 1
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                        header 'X-Twiddle', 'The twiddle threshold.'
         | 
| 21 | 
            -
                      end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                      response do
         | 
| 24 | 
            -
                        status 200, 'The widgets were appropriately returned'
         | 
| 25 | 
            -
                        status 404, 'All the widgets are gone!!!!!'
         | 
| 26 | 
            -
             | 
| 19 | 
            +
                      response 404, 'All the widgets are gone!!!!!'
         | 
| 20 | 
            +
                      response 200, 'The widgets were appropriately returned' do
         | 
| 27 21 | 
             
                        header 'X-Twonk', 'The twonk coefficient.'
         | 
| 28 22 |  | 
| 29 23 | 
             
                        body do
         | 
| @@ -38,34 +32,29 @@ describe Useless::Doc::DSL do | |
| 38 32 |  | 
| 39 33 | 
             
                    post do
         | 
| 40 34 | 
             
                      authentication_required true
         | 
| 41 | 
            -
             | 
| 42 35 | 
             
                      description 'Creates a new widget'
         | 
| 43 36 |  | 
| 44 | 
            -
                       | 
| 45 | 
            -
                         | 
| 46 | 
            -
                          content_type 'application/json'
         | 
| 37 | 
            +
                      body do
         | 
| 38 | 
            +
                        content_type 'application/json'
         | 
| 47 39 |  | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
                        end
         | 
| 40 | 
            +
                        attribute 'name', 'The name of the widget', required: true
         | 
| 41 | 
            +
                        attribute 'age', 'The age of the widget', type: :number, required: false, default: 42
         | 
| 51 42 | 
             
                      end
         | 
| 52 43 |  | 
| 53 | 
            -
                      response  | 
| 54 | 
            -
             | 
| 55 | 
            -
                        status 422, 'The widget couldn\'t be created because name was missing'
         | 
| 56 | 
            -
                      end
         | 
| 44 | 
            +
                      response 201, 'The widget was successfully created'
         | 
| 45 | 
            +
                      response 422, 'The widget couldn\'t be created because name was missing'
         | 
| 57 46 | 
             
                    end
         | 
| 58 47 | 
             
                  end
         | 
| 59 48 |  | 
| 60 49 | 
             
                  resource.description.should == 'The entire collection of widgets'
         | 
| 61 | 
            -
                  resource. | 
| 62 | 
            -
                  resource. | 
| 63 | 
            -
                  resource. | 
| 64 | 
            -
                  resource. | 
| 65 | 
            -
                  resource. | 
| 66 | 
            -
                  resource. | 
| 67 | 
            -
                  resource. | 
| 68 | 
            -
                  resource. | 
| 50 | 
            +
                  resource.requests[0].method.should == 'GET'
         | 
| 51 | 
            +
                  resource.requests[0].headers[0].description.should == 'The twiddle threshold.'
         | 
| 52 | 
            +
                  resource.requests[0].responses[1].code.should == 200
         | 
| 53 | 
            +
                  resource.requests[1].method.should == 'POST'
         | 
| 54 | 
            +
                  resource.requests[1].description.should == 'Creates a new widget'
         | 
| 55 | 
            +
                  resource.requests[1].body.content_type.should == 'application/json'
         | 
| 56 | 
            +
                  resource.requests[1].body.attributes[0].key.should == 'name'
         | 
| 57 | 
            +
                  resource.requests[1].responses[1].description.should == 'The widget couldn\'t be created because name was missing'
         | 
| 69 58 | 
             
                end
         | 
| 70 59 | 
             
              end
         | 
| 71 60 | 
             
            end
         |