apipie-rails 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,10 +10,20 @@ module Api
10
10
  def show
11
11
  end
12
12
 
13
- api :POST, "/architectures/", "Create an architecture."
14
- param :architecture, Hash, :required => true do
15
- param :name, String, :required => true
13
+ def_param_group :timestamps do
14
+ param :created_at, String
15
+ param :updated_at, String
16
+ end
17
+
18
+ def_param_group :arch do
19
+ param :architecture, Hash, :required => true do
20
+ param :name, String, :required => true
21
+ param_group :timestamps
22
+ end
16
23
  end
24
+
25
+ api :POST, "/architectures/", "Create an architecture."
26
+ param_group :arch
17
27
  def create
18
28
  end
19
29
 
@@ -11,9 +11,7 @@ module Api
11
11
  end
12
12
 
13
13
  api :POST, "/architectures/", "Create an architecture."
14
- param :architecture, Hash, :required => true do
15
- param :name, String, :required => true
16
- end
14
+ param_group :arch, Api::V1::ArchitecturesController
17
15
  def create
18
16
  end
19
17
 
@@ -190,17 +190,40 @@ class UsersController < ApplicationController
190
190
  render :text => "OK"
191
191
  end
192
192
 
193
- api :POST, "/users", "Create user"
194
- param :user, Hash, :desc => "User info", :required => true do
193
+ def_param_group :credentials do
195
194
  param :name, String, :desc => "Username for login", :required => true
196
195
  param :pass, String, :desc => "Password for login", :required => true
197
- param :membership, ["standard","premium"], :desc => "User membership"
196
+ end
197
+
198
+ def_param_group :user do
199
+ param :user, Hash, :desc => "User info", :required => true, :action_aware => true do
200
+ param_group :credentials
201
+ param :membership, ["standard","premium"], :desc => "User membership", :allow_nil => false
202
+ end
203
+ end
204
+
205
+ api :POST, "/users", "Create user"
206
+ param_group :user
207
+ param :user, Hash do
208
+ param :permalink, String
198
209
  end
199
210
  param :facts, Hash, :desc => "Additional optional facts about the user", :allow_nil => true
200
211
  def create
201
212
  render :text => "OK #{params.inspect}"
202
213
  end
203
214
 
215
+ api :PUT, "/users/:id", "Create user"
216
+ param_group :user
217
+ def update
218
+ render :text => "OK #{params.inspect}"
219
+ end
220
+
221
+ api :POST, "/users/admin", "Create admin user"
222
+ param_group :user, :as => :create
223
+ def admin_create
224
+ render :text => "OK #{params.inspect}"
225
+ end
226
+
204
227
  api :GET, "/users", "List users"
205
228
  error :code => 401, :desc => "Unauthorized"
206
229
  error :code => 404, :desc => "Not Found"
@@ -2,15 +2,16 @@ require "spec_helper"
2
2
 
3
3
  describe Apipie::MethodDescription do
4
4
 
5
+ let(:dsl_data) { ActionController::Base.send(:_apipie_dsl_data_init) }
6
+
5
7
  describe "params descriptions" do
6
8
 
7
9
  before(:each) do
8
- Apipie.clear_last
9
10
  @resource = Apipie::ResourceDescription.new(ApplicationController, "dummy")
10
- Apipie.last_dsl_data[:params] << Apipie::ParamDescription.new(:a, String)
11
- Apipie.last_dsl_data[:params] << Apipie::ParamDescription.new(:b, String)
12
- Apipie.last_dsl_data[:params] << Apipie::ParamDescription.new(:c, String)
13
- @method = Apipie::MethodDescription.new(:a, @resource, Apipie.app)
11
+ dsl_data[:params] = [[:a, String, nil, {}, nil],
12
+ [:b, String, nil, {}, nil],
13
+ [:c, String, nil, {}, nil]]
14
+ @method = Apipie::MethodDescription.new(:a, @resource, dsl_data)
14
15
  @resource.add_method_description @method
15
16
  end
16
17
 
@@ -2,19 +2,29 @@ require "spec_helper"
2
2
 
3
3
  describe Apipie::ParamDescription do
4
4
 
5
- describe "required_by_default config option" do
5
+ let(:dsl_data) { ActionController::Base.send(:_apipie_dsl_data_init) }
6
+
7
+ let(:resource_desc) do
8
+ Apipie::ResourceDescription.new(UsersController, "users")
9
+ end
10
+
11
+ let(:method_desc) do
12
+ Apipie::MethodDescription.new(:show, resource_desc, dsl_data)
13
+ end
6
14
 
15
+
16
+ describe "required_by_default config option" do
7
17
  context "parameters required by default" do
8
18
 
9
19
  before { Apipie.configuration.required_by_default = true }
10
20
 
11
21
  it "should set param as required by default" do
12
- param = Apipie::ParamDescription.new(:required_by_default, String)
22
+ param = Apipie::ParamDescription.new(method_desc, :required_by_default, String)
13
23
  param.required.should be_true
14
24
  end
15
25
 
16
26
  it "should be possible to set param as optional" do
17
- param = Apipie::ParamDescription.new(:optional, String, :required => false)
27
+ param = Apipie::ParamDescription.new(method_desc, :optional, String, :required => false)
18
28
  param.required.should be_false
19
29
  end
20
30
 
@@ -25,12 +35,12 @@ describe Apipie::ParamDescription do
25
35
  before { Apipie.configuration.required_by_default = false }
26
36
 
27
37
  it "should set param as optional by default" do
28
- param = Apipie::ParamDescription.new(:optional_by_default, String)
38
+ param = Apipie::ParamDescription.new(method_desc, :optional_by_default, String)
29
39
  param.required.should be_false
30
40
  end
31
41
 
32
42
  it "should be possible to set param as required" do
33
- param = Apipie::ParamDescription.new(:required, String, 'description','required' => true)
43
+ param = Apipie::ParamDescription.new(method_desc, :required, String, 'description','required' => true)
34
44
  param.required.should be_true
35
45
  end
36
46
 
@@ -38,4 +48,70 @@ describe Apipie::ParamDescription do
38
48
 
39
49
  end
40
50
 
41
- end
51
+ describe "required params in action aware validator" do
52
+
53
+ subject { method_description.params[:user].validator.hash_params_ordered }
54
+
55
+ let(:required) do
56
+ subject.find_all(&:required).map(&:name)
57
+ end
58
+
59
+ let(:allowed_nil) do
60
+ subject.find_all(&:allow_nil).map(&:name)
61
+ end
62
+
63
+ context "with resource creation" do
64
+
65
+ let(:method_description) do
66
+ Apipie.get_method_description(UsersController, :create)
67
+ end
68
+
69
+ it "makes the param required" do
70
+ required.should include :name
71
+ required.should include :pass
72
+ end
73
+
74
+ it "doesn't allow nil" do
75
+ allowed_nil.should_not include :name
76
+ allowed_nil.should_not include :pass
77
+ end
78
+ end
79
+
80
+ context "with resource update" do
81
+
82
+ let(:method_description) do
83
+ Apipie.get_method_description(UsersController, :update)
84
+ end
85
+
86
+ it "doesn't make the param required" do
87
+ required.should_not include :name
88
+ required.should_not include :pass
89
+ end
90
+
91
+ it "doesn't allow nil" do
92
+ allowed_nil.should_not include :name
93
+ allowed_nil.should_not include :pass
94
+ end
95
+
96
+ it "doesn't touch params with explicitly set allow_nil" do
97
+ allowed_nil.should_not include :membership
98
+ end
99
+ end
100
+
101
+ context "with explicitly setting action type in param group" do
102
+ let(:method_description) do
103
+ Apipie.get_method_description(UsersController, :admin_create)
104
+ end
105
+
106
+ it "makes the param required" do
107
+ required.should include :name
108
+ required.should include :pass
109
+ end
110
+
111
+ it "doesn't allow nil" do
112
+ allowed_nil.should_not include :name
113
+ allowed_nil.should_not include :pass
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,45 @@
1
+ require "spec_helper"
2
+
3
+ describe "param groups" do
4
+
5
+ it "lets reuse the params description in more actions" do
6
+ user_create_desc = Apipie["users#create"].params[:user]
7
+ user_create_params = user_create_desc.validator.hash_params_ordered.map(&:name)
8
+
9
+ user_update_desc = Apipie["users#update"].params[:user]
10
+ user_update_params = user_update_desc.validator.hash_params_ordered.map(&:name)
11
+
12
+ common = user_update_params & user_create_params
13
+ common.sort_by(&:to_s).should == user_update_params.sort_by(&:to_s)
14
+ end
15
+
16
+ it "allows using groups is nested param descriptions" do
17
+ user_create_desc = Apipie["users#update"].params[:user]
18
+ user_create_params = user_create_desc.validator.hash_params_ordered.map(&:name)
19
+ user_create_params.map(&:to_s).sort.should == %w[membership name pass]
20
+ end
21
+
22
+ it "should allow adding additional params to group" do
23
+ user_create_desc = Apipie["users#create"].params[:user]
24
+ user_create_params = user_create_desc.validator.hash_params_ordered.map(&:name)
25
+ user_create_params.map(&:to_s).sort.should == %w[membership name pass permalink]
26
+ end
27
+
28
+ context "hash param" do
29
+ it "influences only its childs" do
30
+ Apipie["users#create"].params[:user].required.should be true
31
+ Apipie["users#update"].params[:user].required.should be true
32
+ end
33
+ end
34
+
35
+ it "lets you reuse a group definition from different controller" do
36
+ arch_v1_desc = Apipie["1.0#architectures#create"].params[:architecture]
37
+ arch_v1_params = arch_v1_desc.validator.hash_params_ordered.map(&:name)
38
+
39
+ arch_v2_desc = Apipie["2.0#architectures#create"].params[:architecture]
40
+ arch_v2_params = arch_v2_desc.validator.hash_params_ordered.map(&:name)
41
+
42
+ arch_v1_params.sort_by(&:to_s).should == arch_v2_params.sort_by(&:to_s)
43
+ end
44
+ end
45
+
@@ -2,16 +2,18 @@ require "spec_helper"
2
2
 
3
3
  describe Apipie::ResourceDescription do
4
4
 
5
+ let(:dsl_data) { ActionController::Base.send(:_apipie_dsl_data_init) }
6
+
5
7
  describe "methods descriptions" do
6
8
 
7
9
  before(:each) do
8
10
  @resource = Apipie::ResourceDescription.new(ApplicationController, "dummy")
9
- a = Apipie::MethodDescription.new(:a, @resource, Apipie.app)
10
- b = Apipie::MethodDescription.new(:b, @resource, Apipie.app)
11
- c = Apipie::MethodDescription.new(:c, @resource, Apipie.app)
12
- @resource.add_method_description a
13
- @resource.add_method_description b
14
- @resource.add_method_description c
11
+ a = Apipie::MethodDescription.new(:a, @resource, dsl_data)
12
+ b = Apipie::MethodDescription.new(:b, @resource, dsl_data)
13
+ c = Apipie::MethodDescription.new(:c, @resource, dsl_data)
14
+ @resource.add_method_description(a)
15
+ @resource.add_method_description(b)
16
+ @resource.add_method_description(c)
15
17
  end
16
18
 
17
19
  it "should be ordered" do
@@ -25,4 +27,4 @@ describe Apipie::ResourceDescription do
25
27
  end
26
28
 
27
29
  end
28
- end
30
+ end
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.17
4
+ version: 0.0.18
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-02-13 00:00:00.000000000Z
13
+ date: 2013-02-22 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &21190160 !ruby/object:Gem::Requirement
17
+ requirement: &10023700 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 3.0.10
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *21190160
25
+ version_requirements: *10023700
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rspec-rails
28
- requirement: &21189740 !ruby/object:Gem::Requirement
28
+ requirement: &10023280 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *21189740
36
+ version_requirements: *10023280
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: sqlite3
39
- requirement: &21189280 !ruby/object:Gem::Requirement
39
+ requirement: &10022820 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *21189280
47
+ version_requirements: *10022820
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: minitest
50
- requirement: &21188860 !ruby/object:Gem::Requirement
50
+ requirement: &10022400 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *21188860
58
+ version_requirements: *10022400
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: maruku
61
- requirement: &21215040 !ruby/object:Gem::Requirement
61
+ requirement: &10021980 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *21215040
69
+ version_requirements: *10021980
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: RedCloth
72
- requirement: &21214620 !ruby/object:Gem::Requirement
72
+ requirement: &10021560 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *21214620
80
+ version_requirements: *10021560
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rake
83
- requirement: &21214200 !ruby/object:Gem::Requirement
83
+ requirement: &10047700 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,7 +88,7 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *21214200
91
+ version_requirements: *10047700
92
92
  description: Maintain your API documentation up to date!
93
93
  email:
94
94
  - pajkycz@gmail.com
@@ -99,12 +99,10 @@ extra_rdoc_files: []
99
99
  files:
100
100
  - .gitignore
101
101
  - .rspec
102
- - .rvmrc
103
102
  - .travis.yml
104
103
  - APACHE-LICENSE-2.0
105
104
  - CHANGELOG
106
105
  - Gemfile
107
- - Gemfile.lock
108
106
  - MIT-LICENSE
109
107
  - NOTICE
110
108
  - README.rst
@@ -207,6 +205,7 @@ files:
207
205
  - spec/dummy/script/rails
208
206
  - spec/lib/method_description_spec.rb
209
207
  - spec/lib/param_description_spec.rb
208
+ - spec/lib/param_group_spec.rb
210
209
  - spec/lib/resource_description_spec.rb
211
210
  - spec/spec_helper.rb
212
211
  homepage: http://github.com/Pajk/apipie-rails
@@ -280,5 +279,6 @@ test_files:
280
279
  - spec/dummy/script/rails
281
280
  - spec/lib/method_description_spec.rb
282
281
  - spec/lib/param_description_spec.rb
282
+ - spec/lib/param_group_spec.rb
283
283
  - spec/lib/resource_description_spec.rb
284
284
  - spec/spec_helper.rb
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.8.7@apipie --create
@@ -1,117 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- apipie-rails (0.0.16)
5
- rails (>= 3.0.10)
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- RedCloth (4.2.9)
11
- actionmailer (3.2.6)
12
- actionpack (= 3.2.6)
13
- mail (~> 2.4.4)
14
- actionpack (3.2.6)
15
- activemodel (= 3.2.6)
16
- activesupport (= 3.2.6)
17
- builder (~> 3.0.0)
18
- erubis (~> 2.7.0)
19
- journey (~> 1.0.1)
20
- rack (~> 1.4.0)
21
- rack-cache (~> 1.2)
22
- rack-test (~> 0.6.1)
23
- sprockets (~> 2.1.3)
24
- activemodel (3.2.6)
25
- activesupport (= 3.2.6)
26
- builder (~> 3.0.0)
27
- activerecord (3.2.6)
28
- activemodel (= 3.2.6)
29
- activesupport (= 3.2.6)
30
- arel (~> 3.0.2)
31
- tzinfo (~> 0.3.29)
32
- activeresource (3.2.6)
33
- activemodel (= 3.2.6)
34
- activesupport (= 3.2.6)
35
- activesupport (3.2.6)
36
- i18n (~> 0.6)
37
- multi_json (~> 1.0)
38
- arel (3.0.2)
39
- builder (3.0.0)
40
- diff-lcs (1.1.3)
41
- erubis (2.7.0)
42
- hike (1.2.1)
43
- i18n (0.6.0)
44
- journey (1.0.4)
45
- json (1.7.3)
46
- mail (2.4.4)
47
- i18n (>= 0.4.0)
48
- mime-types (~> 1.16)
49
- treetop (~> 1.4.8)
50
- maruku (0.6.1)
51
- syntax (>= 1.0.0)
52
- mime-types (1.19)
53
- minitest (3.2.0)
54
- multi_json (1.3.6)
55
- polyglot (0.3.3)
56
- rack (1.4.1)
57
- rack-cache (1.2)
58
- rack (>= 0.4)
59
- rack-ssl (1.3.2)
60
- rack
61
- rack-test (0.6.1)
62
- rack (>= 1.0)
63
- rails (3.2.6)
64
- actionmailer (= 3.2.6)
65
- actionpack (= 3.2.6)
66
- activerecord (= 3.2.6)
67
- activeresource (= 3.2.6)
68
- activesupport (= 3.2.6)
69
- bundler (~> 1.0)
70
- railties (= 3.2.6)
71
- railties (3.2.6)
72
- actionpack (= 3.2.6)
73
- activesupport (= 3.2.6)
74
- rack-ssl (~> 1.3.2)
75
- rake (>= 0.8.7)
76
- rdoc (~> 3.4)
77
- thor (>= 0.14.6, < 2.0)
78
- rake (0.9.2.2)
79
- rdoc (3.12)
80
- json (~> 1.4)
81
- rspec (2.11.0)
82
- rspec-core (~> 2.11.0)
83
- rspec-expectations (~> 2.11.0)
84
- rspec-mocks (~> 2.11.0)
85
- rspec-core (2.11.1)
86
- rspec-expectations (2.11.1)
87
- diff-lcs (~> 1.1.3)
88
- rspec-mocks (2.11.1)
89
- rspec-rails (2.11.0)
90
- actionpack (>= 3.0)
91
- activesupport (>= 3.0)
92
- railties (>= 3.0)
93
- rspec (~> 2.11.0)
94
- sprockets (2.1.3)
95
- hike (~> 1.2)
96
- rack (~> 1.0)
97
- tilt (~> 1.1, != 1.3.0)
98
- sqlite3 (1.3.6)
99
- syntax (1.0.0)
100
- thor (0.15.4)
101
- tilt (1.3.3)
102
- treetop (1.4.12)
103
- polyglot
104
- polyglot (>= 0.3.1)
105
- tzinfo (0.3.35)
106
-
107
- PLATFORMS
108
- ruby
109
-
110
- DEPENDENCIES
111
- RedCloth
112
- apipie-rails!
113
- maruku
114
- minitest
115
- rake
116
- rspec-rails
117
- sqlite3