grape-swagger 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,28 +1,38 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "a simple mounted api" do
4
- before(:all) do
4
+ before :all do
5
+ class CustomType; end
6
+
5
7
  class SimpleMountedApi < Grape::API
6
8
  desc "Document root"
7
9
  get do
8
10
  end
9
11
 
10
- desc 'this gets something', {
12
+ desc 'This gets something.', {
11
13
  :notes => '_test_'
12
14
  }
13
15
 
14
16
  get '/simple' do
15
- {:bla => 'something'}
17
+ { bla: 'something' }
18
+ end
19
+
20
+ desc 'This gets something for URL using - separator.', {
21
+ :notes => '_test_'
22
+ }
23
+
24
+ get '/simple-test' do
25
+ { bla: 'something' }
16
26
  end
17
27
 
18
28
  desc 'this gets something else', {
19
29
  :headers => {
20
- "XAuthToken" => {description: "A required header.", required: true},
21
- "XOtherHeader" => {description: "An optional header.", required: false}
30
+ "XAuthToken" => { description: "A required header.", required: true },
31
+ "XOtherHeader" => { description: "An optional header.", required: false }
22
32
  },
23
33
  :http_codes => {
24
- 403 => "invalid pony",
25
- 405 => "no ponies left!"
34
+ 403 => "invalid pony",
35
+ 405 => "no ponies left!"
26
36
  }
27
37
  }
28
38
  get '/simple_with_headers' do
@@ -31,12 +41,21 @@ describe "a simple mounted api" do
31
41
 
32
42
  desc 'this takes an array of parameters', {
33
43
  :params => {
34
- "items[]" => { :description => "array of items" }
44
+ "items[]" => { description: "array of items" }
35
45
  }
36
46
  }
37
47
  post '/items' do
38
48
  {}
39
49
  end
50
+
51
+ desc 'this uses a custom parameter', {
52
+ :params => {
53
+ "custom" => { type: CustomType, description: "array of items" }
54
+ }
55
+ }
56
+ get '/custom' do
57
+ {}
58
+ end
40
59
  end
41
60
 
42
61
  class SimpleApi < Grape::API
@@ -48,22 +67,123 @@ describe "a simple mounted api" do
48
67
  def app; SimpleApi end
49
68
 
50
69
  it "retrieves swagger-documentation on /swagger_doc" do
51
- get '/swagger_doc'
52
- last_response.body.should == "{:apiVersion=>\"0.1\", :swaggerVersion=>\"1.1\", :basePath=>\"http://example.org\", :operations=>[], :apis=>[{:path=>\"/swagger_doc/simple.{format}\"}, {:path=>\"/swagger_doc/simple_with_headers.{format}\"}, {:path=>\"/swagger_doc/items.{format}\"}, {:path=>\"/swagger_doc/swagger_doc.{format}\"}]}"
70
+ get '/swagger_doc.json'
71
+ JSON.parse(last_response.body).should == {
72
+ "apiVersion" => "0.1",
73
+ "swaggerVersion" => "1.2",
74
+ "basePath" => "http://example.org",
75
+ "info" => {},
76
+ "produces" => ["application/xml", "application/json", "text/plain"],
77
+ "operations" => [],
78
+ "apis" => [
79
+ { "path" => "/simple.{format}" },
80
+ { "path" => "/simple-test.{format}" },
81
+ { "path" => "/simple_with_headers.{format}" },
82
+ { "path" => "/items.{format}" },
83
+ { "path" => "/custom.{format}" },
84
+ { "path" => "/swagger_doc.{format}" }
85
+ ]
86
+ }
53
87
  end
54
88
 
55
89
  it "retrieves the documentation for mounted-api" do
56
- get '/swagger_doc/simple'
57
- last_response.body.should == "{:apiVersion=>\"0.1\", :swaggerVersion=>\"1.1\", :basePath=>\"http://example.org\", :resourcePath=>\"\", :apis=>[{:path=>\"/simple.{format}\", :operations=>[{:notes=>\"_test_\", :summary=>\"this gets something\", :nickname=>\"GET-simple---format-\", :httpMethod=>\"GET\", :parameters=>[]}]}]}"
90
+ get '/swagger_doc/simple.json'
91
+ JSON.parse(last_response.body).should == {
92
+ "apiVersion" => "0.1",
93
+ "swaggerVersion" => "1.2",
94
+ "basePath" => "http://example.org",
95
+ "resourcePath" => "",
96
+ "apis" => [{
97
+ "path" => "/simple.{format}",
98
+ "operations" => [{
99
+ "produces" => ["application/xml", "application/json", "text/plain"],
100
+ "notes" => "_test_",
101
+ "summary" => "This gets something.",
102
+ "nickname" => "GET-simple---format-",
103
+ "httpMethod" => "GET",
104
+ "parameters" => []
105
+ }]
106
+ }]
107
+ }
58
108
  end
59
109
 
60
- it "retrieves the documentation for mounted-api that includes headers" do
61
- get '/swagger_doc/simple_with_headers'
62
- last_response.body.should == "{:apiVersion=>\"0.1\", :swaggerVersion=>\"1.1\", :basePath=>\"http://example.org\", :resourcePath=>\"\", :apis=>[{:path=>\"/simple_with_headers.{format}\", :operations=>[{:notes=>nil, :summary=>\"this gets something else\", :nickname=>\"GET-simple_with_headers---format-\", :httpMethod=>\"GET\", :parameters=>[{:paramType=>\"header\", :name=>\"XAuthToken\", :description=>\"A required header.\", :dataType=>\"String\", :required=>true}, {:paramType=>\"header\", :name=>\"XOtherHeader\", :description=>\"An optional header.\", :dataType=>\"String\", :required=>false}], :errorResponses=>[{:code=>403, :reason=>\"invalid pony\"}, {:code=>405, :reason=>\"no ponies left!\"}]}]}]}"
63
- end
110
+ context "retrieves the documentation for mounted-api that" do
111
+ it "contains '-' in URL" do
112
+ get '/swagger_doc/simple-test.json'
113
+ JSON.parse(last_response.body).should == {
114
+ "apiVersion" => "0.1",
115
+ "swaggerVersion" => "1.2",
116
+ "basePath" => "http://example.org",
117
+ "resourcePath" => "",
118
+ "apis" => [{
119
+ "path" => "/simple-test.{format}",
120
+ "operations" => [{
121
+ "produces" => ["application/xml", "application/json", "text/plain"],
122
+ "notes" => "_test_",
123
+ "summary" => "This gets something for URL using - separator.",
124
+ "nickname" => "GET-simple-test---format-",
125
+ "httpMethod" => "GET",
126
+ "parameters" => []
127
+ }]
128
+ }]
129
+ }
130
+ end
131
+
132
+ it "includes headers" do
133
+ get '/swagger_doc/simple_with_headers.json'
134
+ JSON.parse(last_response.body)["apis"].should == [{
135
+ "path" => "/simple_with_headers.{format}",
136
+ "operations" => [{
137
+ "produces" => ["application/xml", "application/json", "text/plain"],
138
+ "notes" => nil,
139
+ "notes" => "",
140
+ "summary" => "this gets something else",
141
+ "nickname" => "GET-simple_with_headers---format-",
142
+ "httpMethod" => "GET",
143
+ "parameters" => [
144
+ { "paramType" => "header", "name" => "XAuthToken", "description" => "A required header.", "type" => "String", "dataType" => "String", "required" => true },
145
+ { "paramType" => "header", "name" => "XOtherHeader", "description" => "An optional header.", "type" => "String", "dataType" => "String", "required" => false }
146
+ ],
147
+ "responseMessages" => [
148
+ { "code" => 403, "message" => "invalid pony" },
149
+ { "code" => 405, "message" => "no ponies left!" }
150
+ ]
151
+ }]
152
+ }]
153
+ end
154
+
155
+ it "supports multiple parameters" do
156
+ get '/swagger_doc/items.json'
157
+ JSON.parse(last_response.body)["apis"].should == [{
158
+ "path" => "/items.{format}",
159
+ "operations" => [{
160
+ "produces" => ["application/xml", "application/json", "text/plain"],
161
+ "notes" => nil,
162
+ "notes" => "",
163
+ "summary" => "this takes an array of parameters",
164
+ "nickname" => "POST-items---format-",
165
+ "httpMethod" => "POST",
166
+ "parameters" => [ { "paramType" => "form", "name" => "items[]", "description" => "array of items", "type" => "String", "dataType" => "String", "required" => false } ]
167
+ }]
168
+ }]
169
+ end
170
+
171
+ it "supports custom types" do
172
+ get '/swagger_doc/custom.json'
173
+ JSON.parse(last_response.body)["apis"].should == [{
174
+ "path" => "/custom.{format}",
175
+ "operations" => [{
176
+ "produces" => ["application/xml", "application/json", "text/plain"],
177
+ "notes" => nil,
178
+ "notes" => "",
179
+ "summary" => "this uses a custom parameter",
180
+ "nickname" => "GET-custom---format-",
181
+ "httpMethod" => "GET",
182
+ "parameters" => [ { "paramType" => "query", "name" => "custom", "description" => "array of items", "type" => "CustomType", "dataType" => "CustomType", "required" => false } ]
183
+ }]
184
+ }]
185
+ end
64
186
 
65
- it "retrieves the documentation for mounted-api that supports multiple parameters" do
66
- get '/swagger_doc/items'
67
- last_response.body.should == "{:apiVersion=>\"0.1\", :swaggerVersion=>\"1.1\", :basePath=>\"http://example.org\", :resourcePath=>\"\", :apis=>[{:path=>\"/items.{format}\", :operations=>[{:notes=>nil, :summary=>\"this takes an array of parameters\", :nickname=>\"POST-items---format-\", :httpMethod=>\"POST\", :parameters=>[{:paramType=>\"form\", :name=>\"items[]\", :description=>\"array of items\", :dataType=>\"String\", :required=>false}]}]}]}"
68
187
  end
188
+
69
189
  end
data/spec/spec_helper.rb CHANGED
@@ -4,29 +4,21 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
4
4
 
5
5
  require 'grape'
6
6
  require 'grape-swagger'
7
+ require 'grape-entity'
7
8
 
8
9
  require 'rubygems'
9
10
  require 'bundler'
10
11
 
11
12
  require 'pry'
13
+ require 'json'
12
14
 
13
15
  Bundler.setup :default, :test
14
16
 
15
-
16
17
  require 'rack/test'
17
18
 
18
- # Load support files
19
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
20
-
21
19
  RSpec.configure do |config|
22
- # Remove this line if you don't want RSpec's should and should_not
23
- # methods or matchers
24
20
  require 'rspec/expectations'
25
21
  config.include RSpec::Matchers
26
-
27
- # == Mock Framework
28
22
  config.mock_with :rspec
29
-
30
23
  config.include Rack::Test::Methods
31
- #config.include Rack::Test::Methods::Patch
32
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-swagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-19 00:00:00.000000000 Z
12
+ date: 2014-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: grape
@@ -28,7 +28,23 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: 0.2.0
30
30
  - !ruby/object:Gem::Dependency
31
- name: kramdown
31
+ name: grape-entity
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.3.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.3.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: github-markdown
32
48
  requirement: !ruby/object:Gem::Requirement
33
49
  none: false
34
50
  requirements:
@@ -165,6 +181,7 @@ extra_rdoc_files:
165
181
  - README.markdown
166
182
  files:
167
183
  - .document
184
+ - .rspec
168
185
  - .rvmrc
169
186
  - .travis.yml
170
187
  - CHANGELOG.markdown
@@ -176,9 +193,12 @@ files:
176
193
  - VERSION
177
194
  - grape-swagger.gemspec
178
195
  - lib/grape-swagger.rb
196
+ - spec/api_models_spec.rb
179
197
  - spec/default_api_spec.rb
180
- - spec/grape-swagger-helper_spec.rb
198
+ - spec/form_params_spec.rb
199
+ - spec/grape-swagger_helper_spec.rb
181
200
  - spec/grape-swagger_spec.rb
201
+ - spec/hide_api_spec.rb
182
202
  - spec/non_default_api_spec.rb
183
203
  - spec/simple_mounted_api_spec.rb
184
204
  - spec/spec_helper.rb
@@ -197,7 +217,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
217
  version: '0'
198
218
  segments:
199
219
  - 0
200
- hash: 4271109151284297924
220
+ hash: 1382622318618846643
201
221
  required_rubygems_version: !ruby/object:Gem::Requirement
202
222
  none: false
203
223
  requirements:
@@ -206,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
226
  version: '0'
207
227
  requirements: []
208
228
  rubyforge_project:
209
- rubygems_version: 1.8.24
229
+ rubygems_version: 1.8.23
210
230
  signing_key:
211
231
  specification_version: 3
212
232
  summary: Add swagger compliant documentation to your grape API
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "helpers" do
4
-
5
- before(:all) do
6
- class HelperTestAPI < Grape::API
7
- add_swagger_documentation
8
- end
9
-
10
- @api = Object.new
11
- # after injecting grape-swagger into the Test API we get the helper methods
12
- # back from the first endpoint's class (the API mounted by grape-swagger
13
- # to serve the swagger_doc
14
- @api.extend HelperTestAPI.endpoints.first.options[:app].helpers
15
-
16
- end
17
-
18
- context "parsing parameters" do
19
- it "should parse params as query strings for a GET" do
20
- params = {
21
- name: {type: 'String', :desc => "A name", required: true },
22
- level: 'max'
23
- }
24
- path = "/coolness"
25
- method = "GET"
26
- @api.parse_params(params, path, method).should ==
27
- [
28
- {paramType: "query", name: :name, description:"A name", dataType: "String", required: true},
29
- {paramType: "query", name: :level, description:"", dataType: "String", required: false}
30
- ]
31
- end
32
-
33
- it "should parse params as form for a POST" do
34
- params = {
35
- name: {type: 'String', :desc =>"A name", required: true },
36
- level: 'max'
37
- }
38
- path = "/coolness"
39
- method = "POST"
40
- @api.parse_params(params, path, method).should ==
41
- [
42
- {paramType: "form", name: :name, description:"A name", dataType: "String", required: true},
43
- {paramType: "form", name: :level, description:"", dataType: "String", required: false}
44
- ]
45
- end
46
- end
47
-
48
- context "parsing the path" do
49
- it "should parse the path" do
50
- path = ":abc/def(.:format)"
51
- @api.parse_path(path, nil).should == "{abc}/def.{format}"
52
- end
53
-
54
- it "should parse a path that has vars with underscores in the name" do
55
- path = "abc/:def_g(.:format)"
56
- @api.parse_path(path, nil).should == "abc/{def_g}.{format}"
57
-
58
- end
59
-
60
- it "should parse a path that has vars with numbers in the name" do
61
- path = "abc/:sha1(.:format)"
62
- @api.parse_path(path, nil).should == "abc/{sha1}.{format}"
63
- end
64
-
65
- it "should parse a path that has multiple variables" do
66
- path1 = "abc/:def/:geh(.:format)"
67
- path2 = "abc/:def:geh(.:format)"
68
- @api.parse_path(path1, nil).should == "abc/{def}/{geh}.{format}"
69
- @api.parse_path(path2, nil).should == "abc/{def}{geh}.{format}"
70
- end
71
-
72
- it "should parse the path with a specified version" do
73
- path = ":abc/{version}/def(.:format)"
74
- @api.parse_path(path, 'v1').should == "{abc}/v1/def.{format}"
75
- end
76
- end
77
-
78
- context "parsing header parameters" do
79
- it "should parse params for the header" do
80
- params = {"XAuthToken" => { description: "A required header.", required: true}}
81
- @api.parse_header_params(params).should ==
82
- [
83
- {paramType: "header", name: "XAuthToken", description:"A required header.", dataType: "String", required: true}
84
- ]
85
- end
86
- end
87
-
88
- end