weasel_diesel 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  class WeaselDiesel
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
data/lib/weasel_diesel.rb CHANGED
@@ -351,6 +351,31 @@ class WeaselDiesel
351
351
  route_loading_point <=> other.route_loading_point
352
352
  end
353
353
 
354
+ # Takes input param documentation and copy it over to the document object.
355
+ # We need to do that so the params can be both documented when a param is defined
356
+ # and in the documentation block.
357
+ # @api private
358
+ def sync_input_param_doc
359
+ defined_params.namespaced_params.each do |prms|
360
+ doc.namespace(prms.space_name) do |ns|
361
+ prms.list_optional.each do |rule|
362
+ ns.param(rule.name, rule.options[:doc]) if rule.options[:doc]
363
+ end
364
+ prms.list_required.each do |rule|
365
+ ns.param(rule.name, rule.options[:doc]) if rule.options[:doc]
366
+ end
367
+ end
368
+ end
369
+
370
+ defined_params.list_optional.each do |rule|
371
+ doc.param(rule.name, rule.options[:doc]) if rule.options[:doc]
372
+ end
373
+
374
+ defined_params.list_required.each do |rule|
375
+ doc.param(rule.name, rule.options[:doc]) if rule.options[:doc]
376
+ end
377
+ end
378
+
354
379
  SERVICE_ROOT_REGEXP = /(.*?)[\/\(\.]/
355
380
  SERVICE_ACTION_REGEXP = /[\/\(\.]([a-z0-9_]+)[\/\(\.\?]/i
356
381
  SERVICE_RESTFUL_SHOW_REGEXP = /\/:[a-z0-9_]+\.\w{3}$/
@@ -387,6 +412,8 @@ class WeaselDiesel
387
412
  end
388
413
  end
389
414
 
415
+
416
+
390
417
  end
391
418
 
392
419
  # Extending the top level module to add some helpers
@@ -409,14 +436,7 @@ module Kernel
409
436
  service = WeaselDiesel.new(url)
410
437
  yield service
411
438
 
412
- service.defined_params.list_optional.each do |rule|
413
- service.doc.param(rule.name, rule.options[:doc]) if rule.options[:doc]
414
- end
415
-
416
- service.defined_params.list_required.each do |rule|
417
- service.doc.param(rule.name, rule.options[:doc]) if rule.options[:doc]
418
- end
419
-
439
+ service.sync_input_param_doc
420
440
  WSList.add(service)
421
441
 
422
442
  service
data/lib/ws_list.rb CHANGED
@@ -53,6 +53,18 @@ module WSList
53
53
  @list.find{|service| service.url == url}
54
54
  end
55
55
 
56
+ # Returns a service based on its verb and url
57
+ #
58
+ # @param [String] verb The request method (GET, POST, PUT, DELETE)
59
+ # @param [String] url The url of the service you are looking for.
60
+ # @return [Nil, WeaselDiesel] The found service.
61
+ #
62
+ # @api public
63
+ def find(verb, url)
64
+ verb = verb.to_s.downcase.to_sym
65
+ @list.find{|service| service.verb == verb && service.url == url}
66
+ end
67
+
56
68
 
57
69
  end
58
70
 
@@ -1,4 +1,6 @@
1
- WeaselDieselSpecOptions = ['RSpec', 'Bacon'] # usually pulled from a model
1
+ unless Object.const_defined?("WeaselDieselSpecOptions")
2
+ WeaselDieselSpecOptions = ['RSpec', 'Bacon'] # usually pulled from a model
3
+ end
2
4
 
3
5
  describe_service "services/test.xml" do |service|
4
6
  service.formats :xml, :json
@@ -25,7 +27,7 @@ describe_service "services/test.xml" do |service|
25
27
  service.params.namespace :user do |user|
26
28
  user.integer :id, :required => :true
27
29
  user.string :sex, :in => %Q{female, male}
28
- user.boolean :mailing_list, :default => true
30
+ user.boolean :mailing_list, :default => true, :doc => "is the user subscribed to the ML?"
29
31
  end
30
32
 
31
33
  # the response contains a list of player creation ratings each object in the list
@@ -78,6 +80,30 @@ The most common way to use this service looks like that:
78
80
  end
79
81
  end
80
82
 
83
+ describe_service "services/test.xml" do |service|
84
+ service.formats :xml, :json
85
+ service.http_verb :delete
86
+
87
+ service.params do |p|
88
+ p.integer :id, :doc => "id of item to be deleted"
89
+ end
90
+
91
+ service.response do |response|
92
+ response.element(:name => "player_creation_ratings") do |e|
93
+ e.integer :id, :doc => "id doc"
94
+ end
95
+ end
96
+
97
+
98
+ service.documentation do |doc|
99
+ # doc.overall <markdown description text>
100
+ doc.overall <<-DOC
101
+ This deletes a test service.
102
+ DOC
103
+ end
104
+ end
105
+
106
+
81
107
 
82
108
  describe_service "services/test_no_params.xml" do |service|
83
109
  service.formats :xml
@@ -20,6 +20,16 @@ describe WeaselDiesel::Documentation do
20
20
  @doc.params_doc[:num].should == 'The number to test'
21
21
  end
22
22
 
23
+ it "shouldn't list the namespaced documentation at the root of the object" do
24
+ @doc.params_doc[:mailing_list].should be_nil
25
+ end
26
+
27
+ it "should have info on the documented namespaced params" do
28
+ @doc.namespaced_params.should_not be_empty
29
+ expected_documentation = @doc.namespaced_params.find{|ns| ns.name == :user}.params[:mailing_list]
30
+ expected_documentation.should_not be_nil
31
+ end
32
+
23
33
  it "should allow to define namespaced params doc" do
24
34
  service = WSList.all.find{|s| s.url == "services.xml"}
25
35
  service.documentation do |doc|
@@ -0,0 +1,16 @@
1
+ require File.expand_path("spec_helper", File.dirname(__FILE__))
2
+
3
+ describe WSList do
4
+
5
+ it "find service by verb/route" do
6
+ service = WSList.find(:get, 'services/test.xml')
7
+ service.should_not be_nil
8
+
9
+ service.url.should == 'services/test.xml'
10
+ service.verb.should == :get
11
+
12
+ service = WSList.find(:delete, 'services/test.xml')
13
+ service.url.should == 'services/test.xml'
14
+ service.verb.should == :delete
15
+ end
16
+ end
metadata CHANGED
@@ -1,103 +1,131 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: weasel_diesel
3
- version: !ruby/object:Gem::Version
4
- version: 1.0.3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
5
  prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 4
10
+ version: 1.0.4
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Matt Aimonetti
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-05-14 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-05-24 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
15
22
  name: rspec
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: rack-test
32
- requirement: !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
33
25
  none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
38
33
  type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rack-test
39
37
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: yard
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &id002 !ruby/object:Gem::Requirement
49
39
  none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
54
47
  type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: yard
55
51
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
52
+ requirement: &id003 !ruby/object:Gem::Requirement
57
53
  none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: sinatra
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
70
61
  type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: sinatra
71
65
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
66
+ requirement: &id004 !ruby/object:Gem::Requirement
73
67
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :development
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
79
78
  name: rake
80
- requirement: !ruby/object:Gem::Requirement
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
81
  none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
86
89
  type: :development
90
+ version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: backports
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :runtime
104
+ version_requirements: *id006
105
+ - !ruby/object:Gem::Dependency
106
+ name: json
87
107
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
108
+ requirement: &id007 !ruby/object:Gem::Requirement
89
109
  none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ type: :runtime
118
+ version_requirements: *id007
94
119
  description: Ruby DSL describing Web Services without implementation details.
95
- email:
120
+ email:
96
121
  - mattaimonetti@gmail.com
97
122
  executables: []
123
+
98
124
  extensions: []
125
+
99
126
  extra_rdoc_files: []
100
- files:
127
+
128
+ files:
101
129
  - .gitignore
102
130
  - .travis.yml
103
131
  - Gemfile
@@ -127,33 +155,44 @@ files:
127
155
  - spec/wd_documentation_spec.rb
128
156
  - spec/wd_params_spec.rb
129
157
  - spec/wd_spec.rb
158
+ - spec/ws_list_spec.rb
130
159
  - spec/wsdsl_sinatra_ext_spec.rb
131
160
  - weasel_diesel.gemspec
161
+ has_rdoc: true
132
162
  homepage: https://github.com/mattetti/Weasel-Diesel
133
163
  licenses: []
164
+
134
165
  post_install_message:
135
166
  rdoc_options: []
136
- require_paths:
167
+
168
+ require_paths:
137
169
  - lib
138
- required_ruby_version: !ruby/object:Gem::Requirement
170
+ required_ruby_version: !ruby/object:Gem::Requirement
139
171
  none: false
140
- requirements:
141
- - - ! '>='
142
- - !ruby/object:Gem::Version
143
- version: '0'
144
- required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ hash: 3
176
+ segments:
177
+ - 0
178
+ version: "0"
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
180
  none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ hash: 3
185
+ segments:
186
+ - 0
187
+ version: "0"
150
188
  requirements: []
189
+
151
190
  rubyforge_project: wsdsl
152
- rubygems_version: 1.8.24
191
+ rubygems_version: 1.5.3
153
192
  signing_key:
154
193
  specification_version: 3
155
194
  summary: Web Service DSL
156
- test_files:
195
+ test_files:
157
196
  - spec/hello_world_controller.rb
158
197
  - spec/hello_world_service.rb
159
198
  - spec/json_response_description_spec.rb
@@ -166,5 +205,5 @@ test_files:
166
205
  - spec/wd_documentation_spec.rb
167
206
  - spec/wd_params_spec.rb
168
207
  - spec/wd_spec.rb
208
+ - spec/ws_list_spec.rb
169
209
  - spec/wsdsl_sinatra_ext_spec.rb
170
- has_rdoc: