sinatra-rabbit 1.0.7 → 1.0.8

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.
@@ -356,15 +356,6 @@ module Sinatra
356
356
  @options[:with_capability]
357
357
  end
358
358
 
359
- def self.has_capability?
360
- @capability ||= Sinatra::Rabbit.configuration[:check_capability]
361
- if @capability and required_capability
362
- @capability.call(required_capability)
363
- else
364
- true
365
- end
366
- end
367
-
368
359
  def self.description(text=nil)
369
360
  @description ||= text
370
361
  end
@@ -29,12 +29,13 @@ Gem::Specification.new do |s|
29
29
  a simple REST API using easy to undestand DSL.
30
30
  EOF
31
31
 
32
- s.version = '1.0.7'
32
+ s.version = '1.0.8'
33
33
  s.date = Time.now
34
34
  s.summary = %q{Sinatra REST API DSL}
35
35
  s.files = FileList[
36
36
  'lib/sinatra/*.rb',
37
37
  'lib/sinatra/rabbit/*.rb',
38
+ 'tests/*.rb',
38
39
  'LICENSE',
39
40
  'README.md',
40
41
  'sinatra-rabbit.gemspec',
data/tests/app_test.rb ADDED
@@ -0,0 +1,71 @@
1
+ require 'rack/test'
2
+
3
+ include Rack::Test::Methods
4
+
5
+ def app
6
+ Sample
7
+ end
8
+
9
+ def status
10
+ last_response.status
11
+ end
12
+
13
+ describe Sample do
14
+
15
+ it "should respond with status OK for root" do
16
+ get '/'
17
+ status.must_equal 200
18
+ end
19
+
20
+ it "should respond 400 to index operation for sample collection without param" do
21
+ get '/sample'
22
+ status.must_equal 400
23
+ end
24
+
25
+ it "should respond 200 to index operation for sample collection with param" do
26
+ get '/sample', { :id => :sample }
27
+ status.must_equal 200
28
+ end
29
+
30
+ it "should respond 200 to HEAD request for index operation in sample collection" do
31
+ head '/sample/index'
32
+ status.must_equal 200
33
+ end
34
+
35
+ it "should respond to OPTIONS request for index operation in sample collection" do
36
+ options '/sample/index'
37
+ status.must_equal 200
38
+ allow_header = last_response.headers['Allow'].split(',')
39
+ allow_header.wont_be_empty
40
+ allow_header.must_include 'feature_data:string:optional'
41
+ allow_header.must_include 'id:string:required'
42
+ end
43
+
44
+ it "should respond 200 to show operation for sample collection" do
45
+ get '/sample/100'
46
+ status.must_equal 200
47
+ last_response.body.must_equal '100'
48
+ end
49
+
50
+ it "should respond 201 to delete operation on sample collection" do
51
+ delete '/sample/100'
52
+ status.must_equal 201
53
+ end
54
+
55
+ it "should respond 200 to stop operation with condition routes" do
56
+ get '/sample/100/stop'
57
+ status.must_equal 200
58
+ end
59
+
60
+ it "should respond 200 to sample subcollection index operation" do
61
+ get '/sample/10/subsample/20'
62
+ status.must_equal 200
63
+ end
64
+
65
+ it "should raise an exception when posting data with unknown values" do
66
+ post '/sample', { :id => '1', :arch => '3'}
67
+ last_response.status.must_equal 400
68
+ last_response.body.must_equal "Parameter 'arch' value '3' not found in list of allowed values [1,2]"
69
+ end
70
+
71
+ end
@@ -0,0 +1,73 @@
1
+ require 'rack/test'
2
+ require 'nokogiri'
3
+
4
+ include Rack::Test::Methods
5
+
6
+ def app
7
+ Sample
8
+ end
9
+
10
+ def status
11
+ last_response.status
12
+ end
13
+
14
+ def html
15
+ Nokogiri::HTML(last_response.body)
16
+ end
17
+
18
+ describe 'Documentation' do
19
+
20
+ it "should respond with status OK for root" do
21
+ get '/docs'
22
+ status.must_equal 200
23
+ end
24
+
25
+ it "should return list of collections in entrypoint" do
26
+ get '/docs'
27
+ html.css('html body > h1').text.must_equal 'Sample'
28
+ html.css('html body ul li').wont_be_empty
29
+ html.css('html body ul li a').wont_be_empty
30
+ end
31
+
32
+ it "should return valid collection name when query collection documentation" do
33
+ get '/docs/sample'
34
+ html.css('html body > h1').text.must_equal 'SampleCollection'
35
+ end
36
+
37
+ it "should return valid collection description when query collection documentation" do
38
+ get '/docs/sample'
39
+ html.css('html body > blockquote').text.must_equal 'Test'
40
+ end
41
+
42
+ it "should return valid collection url when query collection documentation" do
43
+ get '/docs/sample'
44
+ html.css('html body > .url').text.must_equal '/sample'
45
+ end
46
+
47
+ it "should return list of features when query collection documentation" do
48
+ get '/docs/sample'
49
+ html.css('html body .features .feature').map { |f| f.text}.must_include 'user_data', 'user_name'
50
+ end
51
+
52
+ it "should return complete list of operations when query collection documentation" do
53
+ get '/docs/sample'
54
+ html.css('html body .operations tr').size.must_equal 7
55
+ end
56
+
57
+ it "should provide valid links from entrypoint to collection" do
58
+ get '/docs'
59
+ html.css('html body ul li a').each do |a|
60
+ get a[:href]
61
+ last_response.status.must_equal 200
62
+ end
63
+ end
64
+
65
+ it "should provide valid links from collection to an operation" do
66
+ get '/docs/sample'
67
+ html.css('html body .operations tbody .name a').each do |a|
68
+ get a[:href]
69
+ last_response.status.must_equal 200
70
+ end
71
+ end
72
+
73
+ end
data/tests/dsl_test.rb ADDED
@@ -0,0 +1,260 @@
1
+ describe Sinatra::Rabbit::DSL do
2
+
3
+ it "should allow to set configuration" do
4
+ Sinatra::Rabbit.configure do
5
+ enable :documentation
6
+ enable :head_routes
7
+ enable :options_routes
8
+ disable :sample_setting
9
+ end
10
+ Sinatra::Rabbit.enabled?(:documentation).must_equal true
11
+ Sinatra::Rabbit.disabled?(:documentation).must_equal false
12
+ Sinatra::Rabbit.enabled?(:sample_setting).must_equal false
13
+ Sinatra::Rabbit.disabled?(:sample_setting).must_equal true
14
+ end
15
+
16
+ it "should allow to set any property" do
17
+ Sinatra::Rabbit.set(:test_property, '1')
18
+ Sinatra::Rabbit.configuration[:test_property].must_equal '1'
19
+ end
20
+
21
+ it "should have collection method" do
22
+ Sample.respond_to?(:collection).must_equal true
23
+ end
24
+
25
+ it "should be Sinatra::Base class" do
26
+ Sample.respond_to?(:configure).must_equal true
27
+ end
28
+
29
+ it "should return list of all collections" do
30
+ Sample.collections.wont_be_empty
31
+ Sample.collections.size.must_equal 3
32
+ end
33
+
34
+ end
35
+
36
+ describe Sinatra::Rabbit::Collection do
37
+
38
+ it "should include SampleCollection and SecondSampleCollection" do
39
+ Sample.collections.wont_be_empty
40
+ Sample.collections.must_include Sinatra::Rabbit::SampleCollection
41
+ Sample.collections.must_include Sinatra::Rabbit::SecondSampleCollection
42
+ end
43
+
44
+ it "should return SampleCollection using .collection method" do
45
+ Sample.collection(:sample).must_equal Sinatra::Rabbit::SampleCollection
46
+ Sample.collection(:non_existing_sample).must_be_nil
47
+ end
48
+
49
+ it 'should return SampleCollection using [] method' do
50
+ Sample[:sample].must_equal Sinatra::Rabbit::SampleCollection
51
+ Sample[:non_existing_sample].must_be_nil
52
+ end
53
+
54
+ it "should allow to register new collection dynamically" do
55
+ Sample.collection(:dynamic) do
56
+ description 'DynamicTest'
57
+ operation :index do
58
+ control do
59
+ status 200
60
+ end
61
+ end
62
+ end
63
+ Sample.collection(:dynamic).must_equal Sinatra::Rabbit::DynamicCollection
64
+ end
65
+
66
+ it "should raise exception when contain control block" do
67
+ lambda {
68
+ Sample.collection(:raise) do
69
+ description 'RaiseTest'
70
+ control do
71
+ status 200
72
+ end
73
+ end
74
+ }.must_raise RuntimeError
75
+ end
76
+
77
+ it "should allow to return base class" do
78
+ Sample.collection(:second_sample).base_class.must_equal Sample
79
+ Sample.collection(:sample).collection(:subsample).base_class.must_equal Sample
80
+ end
81
+
82
+ it "should return correct collection name" do
83
+ Sample.collection(:sample).collection_name.must_equal :sample
84
+ Sample.collection(:second_sample).collection_name.must_equal :second_sample
85
+ end
86
+
87
+ it "should have correct URI set" do
88
+ Sample.collection(:sample).full_path.must_equal '/sample'
89
+ end
90
+
91
+ it "should return correct collection description" do
92
+ Sample.collection(:sample).description.must_equal 'Test'
93
+ Sample.collection(:second_sample).description.must_equal 'SecondTest'
94
+ end
95
+
96
+ it "should return operations and find index operation" do
97
+ Sample.collection(:sample).operations.wont_be_empty
98
+ Sample.collection(:sample).operations.must_include Sinatra::Rabbit::SampleCollection::IndexOperation
99
+ end
100
+
101
+ it "should return operation using [] syntax" do
102
+ Sample[:sample][:index].must_equal Sinatra::Rabbit::SampleCollection::IndexOperation
103
+ end
104
+
105
+ it "should return subcollection using [] syntax" do
106
+ Sample[:sample][:subsample].must_equal Sinatra::Rabbit::SampleCollection::SubsampleCollection
107
+ end
108
+
109
+ it "should return operation from subcollection using the [] syntax" do
110
+ Sample[:sample][:subsample][:start].must_equal Sinatra::Rabbit::SampleCollection::SubsampleCollection::StartOperation
111
+ end
112
+
113
+ it "should allow to define subcollection" do
114
+ Sample.collection(:sample).collections.wont_be_empty
115
+ Sample.collection(:sample).collections.must_include Sinatra::Rabbit::SampleCollection::SubsampleCollection
116
+ end
117
+
118
+ it "should allow to retrieve subcollection from collection" do
119
+ Sample.collection(:sample).collection(:subsample).must_equal Sinatra::Rabbit::SampleCollection::SubsampleCollection
120
+ end
121
+
122
+ it "should allow to retrieve subcollection parent collection" do
123
+ Sample.collection(:sample).collection(:subsample).parent_collection.must_equal Sinatra::Rabbit::SampleCollection
124
+ end
125
+
126
+ it "should allow to get all operations defined for subcollection" do
127
+ Sample.collection(:sample).collection(:subsample).operations.must_include Sinatra::Rabbit::SampleCollection::SubsampleCollection::ShowOperation
128
+ Sample.collection(:sample).collection(:subsample).operations.must_include Sinatra::Rabbit::SampleCollection::SubsampleCollection::StartOperation
129
+ end
130
+
131
+ it "should have correct URI set for operations in subcollection" do
132
+ Sample.collection(:sample).collection(:subsample).operation(:show).full_path.must_equal '/sample/:id/subsample/:sub_id'
133
+ Sample.collection(:sample).collection(:subsample).operation(:start).full_path.must_equal '/sample/:id/subsample/:sub_id/start'
134
+ end
135
+
136
+ it "should have correct URI set for subcollection" do
137
+ Sample.collection(:sample).collection(:subsample).full_path.must_equal '/sample/:id/subsample'
138
+ end
139
+
140
+ it "should allow to have deeper subcollections" do
141
+ Sample.collection(:sample).collection(:subsample).collection(:secondsubsample).must_equal Sinatra::Rabbit::SampleCollection::SubsampleCollection::SecondsubsampleCollection
142
+ end
143
+
144
+ end
145
+
146
+ describe Sinatra::Rabbit::Collection::Operation do
147
+
148
+ it "should have the :restart action" do
149
+ Sample.collection(:second_sample).operation(:restart).must_equal Sinatra::Rabbit::SecondSampleCollection::RestartOperation
150
+ Sample.collection(:second_sample).operation(:restart).full_path.must_equal '/second_sample/:id/restart'
151
+ Sample.collection(:second_sample).operation(:restart).http_method.must_equal :post
152
+ end
153
+
154
+ it "should return :index operation" do
155
+ Sample.collection(:sample).operation(:index).must_equal Sinatra::Rabbit::SampleCollection::IndexOperation
156
+ end
157
+
158
+ it "should return correct name" do
159
+ Sample.collection(:sample).operation(:index).operation_name.must_equal :index
160
+ end
161
+
162
+ it "should return correct description" do
163
+ Sample.collection(:sample).operation(:index).description.must_equal 'TestIndex'
164
+ end
165
+
166
+ it "should have :id param defined" do
167
+ Sample.collection(:sample).operation(:index).param(:id).must_be_kind_of Sinatra::Rabbit::Param
168
+ Sample.collection(:sample).operation(:index).param(:id).name.must_equal :id
169
+ end
170
+
171
+ it "should not return non-existing param" do
172
+ Sample.collection(:sample).operation(:index).param(:non_existing).must_be_nil
173
+ end
174
+
175
+ it "should allow to add new param" do
176
+ Sample.collection(:sample).operation(:index).param(:next_id, :string)
177
+ Sample.collection(:sample).operation(:index).param(:next_id).must_be_kind_of Sinatra::Rabbit::Param
178
+ end
179
+
180
+ it "should return all params" do
181
+ Sample.collection(:sample).operation(:index).params.wont_be_empty
182
+ end
183
+
184
+ it "should have control block" do
185
+ Sample.collection(:sample).operation(:index).respond_to?(:control).must_equal true
186
+ end
187
+
188
+ it "should have correct path for index operation" do
189
+ Sample.collection(:sample).operation(:index).full_path.must_equal '/sample'
190
+ end
191
+
192
+ it "should have correct path for create operation" do
193
+ Sample.collection(:sample).operation(:create).full_path.must_equal '/sample'
194
+ end
195
+
196
+ it "should have correct path for show operation" do
197
+ Sample.collection(:sample).operation(:show).full_path.must_equal '/sample/:id'
198
+ end
199
+
200
+ it "should have correct path for destroy operation" do
201
+ Sample.collection(:sample).operation(:show).full_path.must_equal '/sample/:id'
202
+ end
203
+
204
+ it "should have correct path for stop operation" do
205
+ Sample.collection(:sample).operation(:stop).full_path.must_equal '/sample/:id/stop'
206
+ end
207
+
208
+ end
209
+
210
+ describe Sinatra::Rabbit::Features do
211
+
212
+ it "should allow to be defined for Sample collection" do
213
+ Sample.features.wont_be_empty
214
+ Sample.features.size.must_equal 3
215
+ end
216
+
217
+ it "should allow to be retrieved by name" do
218
+ Sample.feature(:user_data).wont_be_nil
219
+ Sample.feature(:user_data).name.must_equal :user_data
220
+ end
221
+
222
+ it "should allow to be defined more times" do
223
+ Sample.feature(:user_name).wont_be_nil
224
+ Sample.feature(:user_data).wont_be_nil
225
+ Sample.feature(:non_existing_one).must_be_nil
226
+ end
227
+
228
+ it "should contain reference to collection" do
229
+ Sample.feature(:user_data).collection.wont_be_nil
230
+ Sample.feature(:user_data).collection.must_equal :sample
231
+ end
232
+
233
+ it "should contain array of operations" do
234
+ Sample.feature(:user_data).operations.wont_be_empty
235
+ Sample.feature(:user_data).operations.map {|o| o.class }.must_include Sinatra::Rabbit::Feature::Operation
236
+ end
237
+
238
+ it "should allow to return single operation by name" do
239
+ Sample.feature(:user_data).operation(:index).wont_be_nil
240
+ Sample.feature(:user_data).operation(:non_existing_one).must_be_nil
241
+ Sample.feature(:user_data).operation(:index).name.must_equal :index
242
+ end
243
+
244
+ it "should be retrieved from collection" do
245
+ Sample.collection(:sample).features.wont_be_nil
246
+ Sample.collection(:sample).features.size.must_equal 2
247
+ Sample.collection(:second_sample).features.size.must_equal 1
248
+ end
249
+
250
+ it "should add additionals parameters to given operations" do
251
+ Sample.collection(:sample).operation(:index).params.map { |p| p.name }.must_include :feature_name
252
+ Sample.collection(:sample).operation(:index).params.map { |p| p.name }.must_include :feature_data
253
+ Sample.collection(:second_sample).operation(:index).params.map { |p| p.name }.must_include :feature_second
254
+ end
255
+
256
+ it "should not add additional parameters to other operations" do
257
+ Sample.collection(:sample).operation(:show).params.map { |p| p.name }.wont_include :feature_name
258
+ end
259
+
260
+ end
data/tests/fixtures.rb ADDED
@@ -0,0 +1,149 @@
1
+ require 'rubygems'
2
+ begin
3
+ require 'simplecov'
4
+ if ENV['COVERAGE']
5
+ SimpleCov.start
6
+ SimpleCov.command_name 'Minitest Tests'
7
+ end
8
+ rescue LoadError
9
+ end
10
+
11
+ require 'minitest/autorun'
12
+
13
+ require 'sinatra/base'
14
+ $:.unshift File.join(File::dirname(__FILE__), '..')
15
+ require 'lib/sinatra/rabbit'
16
+
17
+ class Sample < Sinatra::Base
18
+ include Sinatra::Rabbit
19
+ include Sinatra::Rabbit::Features
20
+
21
+ get '/' do
22
+ halt 200
23
+ end
24
+
25
+ features do
26
+ feature :user_data, :for => :sample do
27
+ operation :index do
28
+ param :feature_data, :string
29
+ end
30
+ end
31
+ feature :user_name, :for => :sample do
32
+ operation :index do
33
+ param :feature_name, :string
34
+ end
35
+ end
36
+ feature :profile_sample, :for => :second_sample do
37
+ operation :index do
38
+ param :feature_second, :string
39
+ end
40
+ end
41
+ end
42
+
43
+ collection :sample do
44
+
45
+ collection :subsample, :with_id => :sub_id do
46
+
47
+ collection :secondsubsample do
48
+ description "SecondSubCollection"
49
+ operation :index do
50
+ control do
51
+ status 200
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ description "Subcollection"
58
+
59
+ operation :start do
60
+ param :id, :required
61
+ control do
62
+ status 200
63
+ end
64
+ end
65
+ operation :show do
66
+ control do
67
+ params[:id]
68
+ end
69
+ end
70
+ end
71
+
72
+ description "Test"
73
+
74
+ operation :index do
75
+ description "TestIndex"
76
+ param :id, :string, :required, "TestParam"
77
+ control do
78
+ status 200
79
+ end
80
+ end
81
+
82
+ operation :rindex do
83
+ description "TestIndex"
84
+ param :r_string, :string, :required, "TestParam"
85
+ param :o_string, :string, :optional, "TestParam"
86
+ param :r_number, :number, :required, "TestParam"
87
+ param :o_number, :number, :optional, "TestParam"
88
+ param :free_param, :string
89
+ param :enum_param, :enum, [1,2,3]
90
+ param :r_enum_param, :enum, :required, [1,2,3]
91
+ control {}
92
+ end
93
+
94
+ operation :show do
95
+ description "TestIndex"
96
+ control do
97
+ [200, {}, params[:id]]
98
+ end
99
+ end
100
+
101
+ operation :create do
102
+ description "TestIndex"
103
+ param :id, :string, :required, "TestParam"
104
+ param :arch, :enum, [1, 2]
105
+ control do
106
+ status 200
107
+ end
108
+ end
109
+
110
+ operation :destroy do
111
+ description "TestIndex"
112
+ control do
113
+ status 201
114
+ end
115
+ end
116
+
117
+ operation :stop, :if => (1==1) do
118
+ description "TestIndex"
119
+ param :id, :string, :required, "TestParam"
120
+ control do
121
+ status 200
122
+ end
123
+ end
124
+
125
+ end
126
+
127
+ collection :second_sample do
128
+ description "SecondTest"
129
+
130
+ action :restart do
131
+ description "Action operation"
132
+ param :id, :string, :required, "Test"
133
+ control do
134
+ status 200
135
+ end
136
+ end
137
+
138
+ operation :index do
139
+ description "SecondTestIndex"
140
+ param :second_id, :string, :required, "TestSecondParam"
141
+ control do
142
+ status 200
143
+ end
144
+ end
145
+ end
146
+
147
+ end
148
+
149
+
@@ -0,0 +1,96 @@
1
+ describe Sinatra::Rabbit::Param do
2
+
3
+ def index_operation
4
+ Sample.collection(:sample).operation(:rindex)
5
+ end
6
+
7
+ it "should return string representation of param" do
8
+ "#{index_operation.param(:r_string)}".must_equal 'r_string:string:required'
9
+ end
10
+
11
+ it "should allow define required string param with description" do
12
+ index_operation.param(:r_string).wont_be_nil
13
+ index_operation.param(:r_string).description.must_equal 'TestParam'
14
+ index_operation.param(:r_string).klass.must_equal :string
15
+ index_operation.param(:r_string).values
16
+ index_operation.param(:r_string).required?.must_equal true
17
+ index_operation.param(:r_string).string?.must_equal true
18
+ index_operation.param(:r_string).optional?.must_equal false
19
+ index_operation.param(:r_string).enum?.must_equal false
20
+ index_operation.param(:r_string).number?.must_equal false
21
+ end
22
+
23
+ it "should allow define optional string param with description" do
24
+ index_operation.param(:o_string).wont_be_nil
25
+ index_operation.param(:o_string).description.must_equal 'TestParam'
26
+ index_operation.param(:o_string).klass.must_equal :string
27
+ index_operation.param(:o_string).values
28
+ index_operation.param(:o_string).required?.must_equal false
29
+ index_operation.param(:o_string).string?.must_equal true
30
+ index_operation.param(:o_string).optional?.must_equal true
31
+ index_operation.param(:o_string).enum?.must_equal false
32
+ index_operation.param(:o_string).number?.must_equal false
33
+ end
34
+
35
+ it "should allow define required number param with description" do
36
+ index_operation.param(:r_number).wont_be_nil
37
+ index_operation.param(:r_number).description.must_equal 'TestParam'
38
+ index_operation.param(:r_number).klass.must_equal :number
39
+ index_operation.param(:r_number).values
40
+ index_operation.param(:r_number).required?.must_equal true
41
+ index_operation.param(:r_number).string?.must_equal false
42
+ index_operation.param(:r_number).optional?.must_equal false
43
+ index_operation.param(:r_number).enum?.must_equal false
44
+ index_operation.param(:r_number).number?.must_equal true
45
+ end
46
+
47
+ it "should allow define optional number param with description" do
48
+ index_operation.param(:o_number).wont_be_nil
49
+ index_operation.param(:o_number).description.must_equal 'TestParam'
50
+ index_operation.param(:o_number).klass.must_equal :number
51
+ index_operation.param(:o_number).required?.must_equal false
52
+ index_operation.param(:o_number).string?.must_equal false
53
+ index_operation.param(:o_number).optional?.must_equal true
54
+ index_operation.param(:o_number).enum?.must_equal false
55
+ index_operation.param(:o_number).number?.must_equal true
56
+ end
57
+
58
+ it "should allow define param just by name and type" do
59
+ index_operation.param(:free_param).wont_be_nil
60
+ index_operation.param(:free_param).description.must_equal 'Description not available'
61
+ index_operation.param(:free_param).klass.must_equal :string
62
+ index_operation.param(:free_param).values.must_be_nil
63
+ index_operation.param(:free_param).required?.must_equal false
64
+ index_operation.param(:free_param).string?.must_equal true
65
+ index_operation.param(:free_param).optional?.must_equal true
66
+ index_operation.param(:free_param).enum?.must_equal false
67
+ index_operation.param(:free_param).number?.must_equal false
68
+ end
69
+
70
+ it "should allow to define optional enum param" do
71
+ index_operation.param(:enum_param).wont_be_nil
72
+ index_operation.param(:enum_param).description.must_equal 'Description not available'
73
+ index_operation.param(:enum_param).klass.must_equal :enum
74
+ index_operation.param(:enum_param).values.wont_be_empty
75
+ index_operation.param(:enum_param).values.must_include 2
76
+ index_operation.param(:enum_param).required?.must_equal false
77
+ index_operation.param(:enum_param).string?.must_equal false
78
+ index_operation.param(:enum_param).optional?.must_equal true
79
+ index_operation.param(:enum_param).enum?.must_equal true
80
+ index_operation.param(:enum_param).number?.must_equal false
81
+ end
82
+
83
+ it "should allow to define required enum param" do
84
+ index_operation.param(:r_enum_param).wont_be_nil
85
+ #index_operation.param(:r_enum_param).description.must_equal 'Description not available'
86
+ index_operation.param(:r_enum_param).klass.must_equal :enum
87
+ #index_operation.param(:r_enum_param).values.wont_be_empty
88
+ #index_operation.param(:r_enum_param).values.must_include 2
89
+ index_operation.param(:r_enum_param).required?.must_equal true
90
+ index_operation.param(:r_enum_param).string?.must_equal false
91
+ index_operation.param(:r_enum_param).optional?.must_equal false
92
+ #index_operation.param(:r_enum_param).enum?.must_equal true
93
+ index_operation.param(:r_enum_param).number?.must_equal false
94
+ end
95
+
96
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-rabbit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70133234245000 !ruby/object:Gem::Requirement
16
+ requirement: &70194484049480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 1.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70133234245000
24
+ version_requirements: *70194484049480
25
25
  description: ! " Rabbit is a Sinatra extension which can help you writing\n a
26
26
  simple REST API using easy to undestand DSL.\n"
27
27
  email: dev@deltacloud.apache.org
@@ -37,6 +37,11 @@ files:
37
37
  - lib/sinatra/rabbit/features.rb
38
38
  - lib/sinatra/rabbit/param.rb
39
39
  - lib/sinatra/rabbit/validator.rb
40
+ - tests/app_test.rb
41
+ - tests/docs_test.rb
42
+ - tests/dsl_test.rb
43
+ - tests/fixtures.rb
44
+ - tests/params_test.rb
40
45
  - LICENSE
41
46
  - README.md
42
47
  - sinatra-rabbit.gemspec