apipie-rails 0.0.20 → 0.0.21

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/CHANGELOG CHANGED
@@ -2,6 +2,13 @@
2
2
  Changelog
3
3
  ===========
4
4
 
5
+ v0.0.21
6
+ -------
7
+
8
+ * fix RDoc 4.0 compatibility issue
9
+ * ``validate_value`` and ``validate_presence`` options for better
10
+ validation granularity
11
+
5
12
  v0.0.20
6
13
  -------
7
14
 
data/README.rst CHANGED
@@ -478,6 +478,13 @@ default_version
478
478
  validate
479
479
  Parameters validation is turned off when set to false.
480
480
 
481
+ validate_value
482
+ Check the value of params against specified validators (true by
483
+ default)
484
+
485
+ validate_presence
486
+ Check the params presence against the documentation.
487
+
481
488
  app_info
482
489
  Application long description.
483
490
 
@@ -2,8 +2,10 @@ module Apipie
2
2
  class Configuration
3
3
 
4
4
  attr_accessor :app_name, :app_info, :copyright, :markup, :disqus_shortname,
5
- :validate, :api_base_url, :doc_base_url, :required_by_default, :layout,
6
- :default_version, :debug, :version_in_url, :namespaced_resources
5
+ :api_base_url, :doc_base_url, :required_by_default, :layout,
6
+ :default_version, :debug, :version_in_url, :namespaced_resources,
7
+ :validate, :validate_value, :validate_presence
8
+
7
9
 
8
10
  alias_method :validate?, :validate
9
11
  alias_method :required_by_default?, :required_by_default
@@ -24,6 +26,16 @@ module Apipie
24
26
  return @reload_controllers && @api_controllers_matcher
25
27
  end
26
28
 
29
+ def validate_value
30
+ return (validate? && @validate_value)
31
+ end
32
+ alias_method :validate_value?, :validate_value
33
+
34
+ def validate_presence
35
+ return (validate? && @validate_presence)
36
+ end
37
+ alias_method :validate_presence?, :validate_presence
38
+
27
39
  # set to true if you want to use pregenerated documentation cache and avoid
28
40
  # generating the documentation on runtime (usefull for production
29
41
  # environment).
@@ -100,6 +112,8 @@ module Apipie
100
112
  @app_info = HashWithIndifferentAccess.new
101
113
  @copyright = nil
102
114
  @validate = true
115
+ @validate_value = true
116
+ @validate_presence = true
103
117
  @required_by_default = false
104
118
  @api_base_url = HashWithIndifferentAccess.new
105
119
  @doc_base_url = "/apipie"
@@ -175,19 +175,17 @@ module Apipie
175
175
 
176
176
  define_method(description.method) do |*args|
177
177
 
178
- if Apipie.configuration.validate == true
178
+ if Apipie.configuration.validate_presence?
179
179
  description.params.each do |_, param|
180
-
181
180
  # check if required parameters are present
182
- if param.required && !params.has_key?(param.name)
183
- raise ParamMissing.new(param.name)
184
- end
181
+ raise ParamMissing.new(param.name) if param.required && !params.has_key?(param.name)
182
+ end
183
+ end
185
184
 
185
+ if Apipie.configuration.validate_value?
186
+ description.params.each do |_, param|
186
187
  # params validations
187
- if params.has_key?(param.name)
188
- param.validate(params[:"#{param.name}"])
189
- end
190
-
188
+ param.validate(params[:"#{param.name}"]) if params.has_key?(param.name)
191
189
  end
192
190
  end
193
191
 
data/lib/apipie/markup.rb CHANGED
@@ -7,7 +7,11 @@ module Apipie
7
7
  def initialize
8
8
  require 'rdoc'
9
9
  require 'rdoc/markup/to_html'
10
- @rdoc ||= ::RDoc::Markup::ToHtml.new
10
+ if Gem::Version.new(::RDoc::VERSION) < Gem::Version.new('4.0.0')
11
+ @rdoc ||= ::RDoc::Markup::ToHtml.new()
12
+ else
13
+ @rdoc ||= ::RDoc::Markup::ToHtml.new(::RDoc::Options.new)
14
+ end
11
15
  end
12
16
 
13
17
  def to_html(text)
@@ -205,7 +205,12 @@ module Apipie
205
205
  def validate(value)
206
206
  if @hash_params
207
207
  @hash_params.each do |k, p|
208
- p.validate(value[k]) if value.has_key?(k) || p.required
208
+ if Apipie.configuration.validate_presence?
209
+ raise ParamMissing.new(k) if p.required && !value.has_key?(k)
210
+ end
211
+ if Apipie.configuration.validate_value?
212
+ p.validate(value[k]) if value.has_key?(k)
213
+ end
209
214
  end
210
215
  end
211
216
  return true
@@ -1,3 +1,3 @@
1
1
  module Apipie
2
- VERSION = '0.0.20'
2
+ VERSION = '0.0.21'
3
3
  end
@@ -57,7 +57,11 @@ describe UsersController do
57
57
  describe "validators" do
58
58
 
59
59
  context "validations are disabled" do
60
- before { Apipie.configuration.validate = false }
60
+ before do
61
+ Apipie.configuration.validate = false
62
+ Apipie.configuration.validate_value = true
63
+ Apipie.configuration.validate_presence = true
64
+ end
61
65
 
62
66
  it "should reply to valid request" do
63
67
  get :show, :id => '5', :session => "secret_hash"
@@ -70,9 +74,36 @@ describe UsersController do
70
74
 
71
75
  end
72
76
 
77
+ context "only presence validations are enabled" do
78
+ before do
79
+ Apipie.configuration.validate = true
80
+ Apipie.configuration.validate_value = false
81
+ Apipie.configuration.validate_presence = true
82
+ end
83
+
84
+ it "should reply to valid request" do
85
+ lambda { get :show, :id => 5, :session => "secret_hash" }.should_not raise_error
86
+ assert_response :success
87
+ end
88
+
89
+ it "should fail if required parameter is missing" do
90
+ lambda { get :show, :id => 5 }.should raise_error(Apipie::ParamMissing, /\bsession\b/)
91
+ end
92
+
93
+ it "should pass if required parameter has wrong type" do
94
+ lambda { get :show, :id => 5, :session => "secret_hash" }.should_not raise_error
95
+ lambda { get :show, :id => "ten", :session => "secret_hash" }.should_not raise_error
96
+ end
97
+
98
+ end
99
+
73
100
 
74
101
  context "validations are enabled" do
75
- before { Apipie.configuration.validate = true }
102
+ before do
103
+ Apipie.configuration.validate = true
104
+ Apipie.configuration.validate_value = true
105
+ Apipie.configuration.validate_presence = true
106
+ end
76
107
 
77
108
  it "should reply to valid request" do
78
109
  get :show, :id => '5', :session => "secret_hash"
@@ -166,7 +197,7 @@ describe UsersController do
166
197
 
167
198
  lambda {
168
199
  post :create, :user => { :name => "root" }
169
- }.should raise_error(Apipie::ParamInvalid, /pass/)
200
+ }.should raise_error(Apipie::ParamMissing, /pass/)
170
201
 
171
202
  post :create, :user => { :name => "root", :pass => "pwd" }
172
203
  assert_response :success
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apipie-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.20
4
+ version: 0.0.21
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-19 00:00:00.000000000 Z
13
+ date: 2013-03-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails