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.
- data/lib/weasel_diesel/version.rb +1 -1
- data/lib/weasel_diesel.rb +28 -8
- data/lib/ws_list.rb +12 -0
- data/spec/test_services.rb +28 -2
- data/spec/wd_documentation_spec.rb +10 -0
- data/spec/ws_list_spec.rb +16 -0
- metadata +124 -85
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.
|
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
|
|
data/spec/test_services.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
WeaselDieselSpecOptions
|
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
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
53
|
none: false
|
58
|
-
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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
|
-
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
67
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
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
|
-
|
79
|
+
prerelease: false
|
80
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
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
|
-
|
108
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
89
109
|
none: false
|
90
|
-
requirements:
|
91
|
-
- -
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
144
|
-
|
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
|
-
|
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.
|
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:
|