weasel_diesel 1.0.3 → 1.0.4

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