wadl 0.2.8 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README +8 -8
- data/Rakefile +17 -10
- data/lib/wadl.rb +17 -2
- data/lib/wadl/address.rb +1 -3
- data/lib/wadl/application.rb +1 -2
- data/lib/wadl/cheap_schema.rb +1 -8
- data/lib/wadl/cli.rb +62 -97
- data/lib/wadl/documentation.rb +1 -3
- data/lib/wadl/fault.rb +1 -3
- data/lib/wadl/fault_format.rb +4 -6
- data/lib/wadl/has_docs.rb +1 -3
- data/lib/wadl/http_method.rb +11 -54
- data/lib/wadl/http_request.rb +139 -0
- data/lib/wadl/http_response.rb +44 -0
- data/lib/wadl/link.rb +1 -3
- data/lib/wadl/option.rb +1 -3
- data/lib/wadl/param.rb +2 -2
- data/lib/wadl/representation_container.rb +1 -3
- data/lib/wadl/representation_format.rb +6 -5
- data/lib/wadl/request_format.rb +1 -3
- data/lib/wadl/resource.rb +2 -4
- data/lib/wadl/resource_and_address.rb +1 -2
- data/lib/wadl/resource_container.rb +1 -3
- data/lib/wadl/resource_type.rb +1 -3
- data/lib/wadl/resources.rb +1 -3
- data/lib/wadl/response.rb +1 -3
- data/lib/wadl/response_format.rb +4 -9
- data/lib/wadl/uri_parts.rb +1 -3
- data/lib/wadl/version.rb +2 -2
- data/lib/wadl/xml_representation.rb +1 -2
- data/test/wadl_test.rb +76 -37
- metadata +87 -33
data/lib/wadl/documentation.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,8 +26,6 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'wadl'
|
30
|
-
|
31
29
|
module WADL
|
32
30
|
|
33
31
|
class Documentation < CheapSchema
|
data/lib/wadl/fault.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,8 +26,6 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'wadl'
|
30
|
-
|
31
29
|
module WADL
|
32
30
|
|
33
31
|
class Fault < Exception
|
data/lib/wadl/fault_format.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,8 +26,6 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'wadl'
|
30
|
-
|
31
29
|
module WADL
|
32
30
|
|
33
31
|
class FaultFormat < RepresentationFormat
|
@@ -50,9 +48,9 @@ module WADL
|
|
50
48
|
|
51
49
|
me.subclass = if name = me.attributes['id']
|
52
50
|
begin
|
53
|
-
|
54
|
-
|
55
|
-
|
51
|
+
Faults.const_defined?(name) ?
|
52
|
+
Faults.const_get(name) :
|
53
|
+
Faults.const_set(name, Class.new(Fault))
|
56
54
|
rescue NameError
|
57
55
|
# This fault format's ID can't be a class name. Use the
|
58
56
|
# generic subclass of Fault.
|
data/lib/wadl/has_docs.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,8 +26,6 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'wadl'
|
30
|
-
|
31
29
|
module WADL
|
32
30
|
|
33
31
|
class HasDocs < CheapSchema
|
data/lib/wadl/http_method.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,29 +26,21 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'yaml'
|
30
|
-
require 'rest-open-uri'
|
31
|
-
require 'wadl'
|
32
|
-
|
33
|
-
begin
|
34
|
-
require 'oauth/client/helper'
|
35
|
-
rescue LoadError
|
36
|
-
warn "For OAuth support, install the 'oauth' library."
|
37
|
-
end
|
38
|
-
|
39
29
|
module WADL
|
40
30
|
|
41
31
|
class HTTPMethod < HasDocs
|
42
32
|
|
43
|
-
OAUTH_HEADER = 'Authorization'
|
44
|
-
OAUTH_PREFIX = 'OAuth:'
|
45
|
-
|
46
33
|
in_document 'method'
|
47
34
|
as_collection 'http_methods'
|
48
35
|
has_required :id, :name
|
49
|
-
has_one RequestFormat
|
36
|
+
has_one RequestFormat
|
37
|
+
has_many ResponseFormat
|
50
38
|
may_be_reference
|
51
39
|
|
40
|
+
def response
|
41
|
+
responses.first
|
42
|
+
end
|
43
|
+
|
52
44
|
# Args:
|
53
45
|
# :path - Values for path parameters
|
54
46
|
# :query - Values for query parameters
|
@@ -64,47 +56,12 @@ module WADL
|
|
64
56
|
method = dereference
|
65
57
|
|
66
58
|
uri = method.request ? method.request.uri(resource, args) : resource.uri(args)
|
67
|
-
headers = uri.headers.dup
|
68
|
-
|
69
|
-
headers['Accept'] = expect_representation.mediaType if args[:expect_representation]
|
70
|
-
headers['User-Agent'] = 'Ruby WADL client' unless headers['User-Agent']
|
71
|
-
headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
72
|
-
headers[:method] = name.downcase.to_sym
|
73
|
-
headers[:body] = args[:send_representation]
|
74
59
|
|
75
|
-
|
76
|
-
|
77
|
-
response = begin
|
78
|
-
open(uri, headers)
|
79
|
-
rescue OpenURI::HTTPError => err
|
80
|
-
err.io
|
81
|
-
end
|
82
|
-
|
83
|
-
method.response.build(response)
|
84
|
-
end
|
85
|
-
|
86
|
-
def set_oauth_header(headers, uri)
|
87
|
-
args = headers[OAUTH_HEADER] or return
|
88
|
-
|
89
|
-
yaml = args.dup
|
90
|
-
yaml.sub!(/\A#{OAUTH_PREFIX}/, '') or return
|
91
|
-
|
92
|
-
consumer_key, consumer_secret, access_token, token_secret = YAML.load(yaml)
|
93
|
-
|
94
|
-
request = OpenURI::Methods[headers[:method]].new(uri.to_s)
|
95
|
-
|
96
|
-
consumer = OAuth::Consumer.new(consumer_key, consumer_secret)
|
97
|
-
token = OAuth::AccessToken.new(consumer, access_token, token_secret)
|
98
|
-
|
99
|
-
helper = OAuth::Client::Helper.new(request,
|
100
|
-
:request_uri => request.path,
|
101
|
-
:consumer => consumer,
|
102
|
-
:token => token,
|
103
|
-
:scheme => 'header',
|
104
|
-
:signature_method => 'HMAC-SHA1'
|
105
|
-
)
|
60
|
+
headers = uri.headers.dup
|
61
|
+
headers['Accept'] = expect_representation.mediaType if args[:expect_representation]
|
106
62
|
|
107
|
-
|
63
|
+
method.response.build(HTTPRequest.execute(
|
64
|
+
uri, name, args[:send_representation], headers))
|
108
65
|
end
|
109
66
|
|
110
67
|
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of wadl, the super cheap Ruby WADL client. #
|
5
|
+
# #
|
6
|
+
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
|
+
# #
|
9
|
+
# Authors: #
|
10
|
+
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
11
|
+
# Jens Wille <jens.wille@gmail.com> #
|
12
|
+
# #
|
13
|
+
# wadl is free software; you can redistribute it and/or modify it under the #
|
14
|
+
# terms of the GNU Affero General Public License as published by the Free #
|
15
|
+
# Software Foundation; either version 3 of the License, or (at your option) #
|
16
|
+
# any later version. #
|
17
|
+
# #
|
18
|
+
# wadl is distributed in the hope that it will be useful, but WITHOUT ANY #
|
19
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
20
|
+
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
|
21
|
+
# more details. #
|
22
|
+
# #
|
23
|
+
# You should have received a copy of the GNU Affero General Public License #
|
24
|
+
# along with wadl. If not, see <http://www.gnu.org/licenses/>. #
|
25
|
+
# #
|
26
|
+
###############################################################################
|
27
|
+
#++
|
28
|
+
|
29
|
+
require 'net/https'
|
30
|
+
require 'safe_yaml/load'
|
31
|
+
|
32
|
+
module WADL
|
33
|
+
|
34
|
+
require_oauth 'client/helper'
|
35
|
+
|
36
|
+
class HTTPRequest
|
37
|
+
|
38
|
+
DEFAULT_METHOD = :get
|
39
|
+
|
40
|
+
DEFAULT_USER_AGENT = "Ruby WADL client/#{VERSION}"
|
41
|
+
DEFAULT_CONTENT_TYPE = 'application/x-www-form-urlencoded'
|
42
|
+
|
43
|
+
OAUTH_HEADER = 'Authorization'
|
44
|
+
OAUTH_PREFIX = 'OAuth:'
|
45
|
+
|
46
|
+
class << self
|
47
|
+
|
48
|
+
def execute(uri, *args)
|
49
|
+
new(uri).execute(*args)
|
50
|
+
end
|
51
|
+
|
52
|
+
def oauth_header(args)
|
53
|
+
return unless valid_oauth_args?(args)
|
54
|
+
[OAUTH_HEADER, "#{OAUTH_PREFIX}#{args.to_yaml}"]
|
55
|
+
end
|
56
|
+
|
57
|
+
def valid_oauth_args?(args)
|
58
|
+
args.is_a?(Array) && args.size == 4
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
def initialize(uri)
|
64
|
+
self.uri = URI(uri)
|
65
|
+
end
|
66
|
+
|
67
|
+
def start
|
68
|
+
self.http = Net::HTTP.start(
|
69
|
+
uri.hostname, uri.port,
|
70
|
+
use_ssl: uri.scheme == 'https'
|
71
|
+
)
|
72
|
+
|
73
|
+
self
|
74
|
+
end
|
75
|
+
|
76
|
+
def finish
|
77
|
+
http.finish if started?
|
78
|
+
self
|
79
|
+
end
|
80
|
+
|
81
|
+
def started?
|
82
|
+
http && http.started?
|
83
|
+
end
|
84
|
+
|
85
|
+
def execute(*args)
|
86
|
+
start unless started?
|
87
|
+
|
88
|
+
req = prepare_request(*args)
|
89
|
+
res = http.request(req)
|
90
|
+
|
91
|
+
HTTPResponse.new(res)
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
attr_accessor :uri, :http
|
97
|
+
|
98
|
+
def prepare_request(method, body, headers)
|
99
|
+
req = make_request(method || DEFAULT_METHOD)
|
100
|
+
req.body = body if req.request_body_permitted?
|
101
|
+
|
102
|
+
set_headers(req, headers)
|
103
|
+
|
104
|
+
req
|
105
|
+
end
|
106
|
+
|
107
|
+
def make_request(method)
|
108
|
+
Net::HTTP.const_get(method.to_s.capitalize).new(uri)
|
109
|
+
rescue NameError
|
110
|
+
raise ArgumentError, "method not supported: #{method}"
|
111
|
+
end
|
112
|
+
|
113
|
+
def set_headers(req, headers)
|
114
|
+
set_oauth_header(req, headers)
|
115
|
+
|
116
|
+
headers['User-Agent'] ||= DEFAULT_USER_AGENT
|
117
|
+
headers['Content-Type'] ||= DEFAULT_CONTENT_TYPE
|
118
|
+
|
119
|
+
headers.each { |key, value|
|
120
|
+
Array(value).each { |val| req.add_field(key, val) }
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
def set_oauth_header(req, headers)
|
125
|
+
args = SafeYAML.load($') if headers[OAUTH_HEADER] =~ /\A#{OAUTH_PREFIX}/
|
126
|
+
return unless self.class.valid_oauth_args?(args)
|
127
|
+
|
128
|
+
headers[OAUTH_HEADER] = OAuth::Client::Helper.new(req,
|
129
|
+
request_uri: req.request_uri,
|
130
|
+
consumer: consumer = OAuth::Consumer.new(*args[0, 2]),
|
131
|
+
token: OAuth::AccessToken.new(consumer, *args[2, 2]),
|
132
|
+
scheme: 'header',
|
133
|
+
signature_method: 'HMAC-SHA1'
|
134
|
+
).header
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of wadl, the super cheap Ruby WADL client. #
|
5
|
+
# #
|
6
|
+
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
|
+
# #
|
9
|
+
# Authors: #
|
10
|
+
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
11
|
+
# Jens Wille <jens.wille@gmail.com> #
|
12
|
+
# #
|
13
|
+
# wadl is free software; you can redistribute it and/or modify it under the #
|
14
|
+
# terms of the GNU Affero General Public License as published by the Free #
|
15
|
+
# Software Foundation; either version 3 of the License, or (at your option) #
|
16
|
+
# any later version. #
|
17
|
+
# #
|
18
|
+
# wadl is distributed in the hope that it will be useful, but WITHOUT ANY #
|
19
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
20
|
+
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
|
21
|
+
# more details. #
|
22
|
+
# #
|
23
|
+
# You should have received a copy of the GNU Affero General Public License #
|
24
|
+
# along with wadl. If not, see <http://www.gnu.org/licenses/>. #
|
25
|
+
# #
|
26
|
+
###############################################################################
|
27
|
+
#++
|
28
|
+
|
29
|
+
module WADL
|
30
|
+
|
31
|
+
class HTTPResponse
|
32
|
+
|
33
|
+
def initialize(res)
|
34
|
+
@status, @content_type, @body, @headers =
|
35
|
+
[res.code, res.message], res.content_type, res.body, res.to_hash
|
36
|
+
end
|
37
|
+
|
38
|
+
attr_reader :status, :content_type, :body, :headers
|
39
|
+
|
40
|
+
alias_method :read, :body
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/lib/wadl/link.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,8 +26,6 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'wadl'
|
30
|
-
|
31
29
|
module WADL
|
32
30
|
|
33
31
|
class Link < HasDocs
|
data/lib/wadl/option.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,8 +26,6 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'wadl'
|
30
|
-
|
31
29
|
module WADL
|
32
30
|
|
33
31
|
class Option < HasDocs
|
data/lib/wadl/param.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,7 +26,7 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require '
|
29
|
+
require 'uri'
|
30
30
|
|
31
31
|
module WADL
|
32
32
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -26,8 +26,6 @@
|
|
26
26
|
###############################################################################
|
27
27
|
#++
|
28
28
|
|
29
|
-
require 'wadl'
|
30
|
-
|
31
29
|
module WADL
|
32
30
|
|
33
31
|
# A mixin for objects that contain representations
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# A component of wadl, the super cheap Ruby WADL client. #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2006-2008 Leonard Richardson #
|
7
|
-
# Copyright (C) 2010-
|
7
|
+
# Copyright (C) 2010-2014 Jens Wille #
|
8
8
|
# #
|
9
9
|
# Authors: #
|
10
10
|
# Leonard Richardson <leonardr@segfault.org> (Original author) #
|
@@ -27,7 +27,6 @@
|
|
27
27
|
#++
|
28
28
|
|
29
29
|
require 'cgi'
|
30
|
-
require 'wadl'
|
31
30
|
|
32
31
|
module WADL
|
33
32
|
|
@@ -38,15 +37,17 @@ module WADL
|
|
38
37
|
has_many Param
|
39
38
|
may_be_reference
|
40
39
|
|
40
|
+
FORM_TYPES = %w[application/x-www-form-urlencoded multipart/form-data]
|
41
|
+
|
41
42
|
def is_form_representation?
|
42
|
-
mediaType
|
43
|
+
FORM_TYPES.include?(mediaType)
|
43
44
|
end
|
44
45
|
|
45
46
|
# Creates a representation by plugging a set of parameters
|
46
47
|
# into a representation format.
|
47
48
|
def %(values)
|
48
|
-
unless
|
49
|
-
raise "wadl
|
49
|
+
unless is_form_representation?
|
50
|
+
raise "wadl can't instantiate a representation of type #{mediaType}"
|
50
51
|
end
|
51
52
|
|
52
53
|
representation = []
|