wadl 0.2.8 → 0.3.0
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.
- 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 = []
|