apipie-rails 0.0.17 → 0.0.18

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.
@@ -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