aviator 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/aviator/core/cli/describer.rb +4 -3
- data/lib/aviator/core/request_builder.rb +7 -7
- data/lib/aviator/core/service.rb +4 -4
- data/lib/aviator/core/utils/string.rb +18 -16
- data/lib/aviator/openstack/provider.rb +5 -5
- data/lib/aviator/version.rb +1 -1
- data/test/aviator/core/cli/describer_test.rb +2 -2
- data/test/aviator/core/request_builder_test.rb +7 -7
- data/test/aviator/core/service_test.rb +4 -3
- data/test/support/dummy/provider.rb +2 -2
- data/test/support/request_helper.rb +1 -1
- data/test/support/test_base_class.rb +3 -2
- data/test/support/vcr_setup.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e05d6303dec010925adaadef7852044aec4dbc0
|
4
|
+
data.tar.gz: 76d05e1271d60e2040ed6e752c79d8641556ab1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2bae7d16b1364ee57d72c69d2e3449419315cd0702c9ab0fb2ae1a38f78f2025624c8b65b61faa1c22348848b67ad7588826c49a0f742a19b4ab260d311ae9d
|
7
|
+
data.tar.gz: 3e586d5770779da16528ff1a7ed924318c2a71bd5e1146afa4f079889439b91f14da4e4973ce56a54d8415bd9ebc2f285d9458b5487bce5a01f3aa575e1da2f2
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
![Aviator](https://raw.github.com/aviator/www/gh-pages/images/logo-small.png)
|
2
|
-
<br/>
|
2
|
+
<br/>A Framework for Writing REST API Clients
|
3
3
|
|
4
4
|
[![Build Status](https://travis-ci.org/aviator/aviator.png?branch=master)](https://travis-ci.org/aviator/aviator)
|
5
5
|
[![Coverage Status](https://coveralls.io/repos/aviator/aviator/badge.png?branch=master)](https://coveralls.io/r/aviator/aviator?branch=master)
|
@@ -33,8 +33,9 @@ module Aviator
|
|
33
33
|
|
34
34
|
def self.describe_request(provider_name, service_name, api_version, endpoint_type, request_name)
|
35
35
|
service = Aviator::Service.new :provider => provider_name, :service => service_name
|
36
|
-
request_class = "Aviator::#{
|
37
|
-
"#{
|
36
|
+
request_class = "Aviator::#{ StrUtil.camelize(provider_name) }::#{ StrUtil.camelize(service_name) }::Requests::"\
|
37
|
+
"#{ StrUtil.camelize(api_version) }::#{ StrUtil.camelize(endpoint_type) }::#{ StrUtil.camelize(request_name) }"
|
38
|
+
request_class = StrUtil.constantize(request_class)
|
38
39
|
|
39
40
|
display = "Request: #{ request_name }\n"
|
40
41
|
|
@@ -119,7 +120,7 @@ module Aviator
|
|
119
120
|
str = "Available requests for #{ provider_name } #{ service_name }_service:\n"
|
120
121
|
|
121
122
|
requests.each do |klass|
|
122
|
-
str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last
|
123
|
+
str << " #{ klass.api_version } #{ klass.endpoint_type } #{ StrUtil.underscore(klass.name.split('::').last) }\n"
|
123
124
|
end
|
124
125
|
|
125
126
|
str
|
@@ -40,12 +40,12 @@ module Aviator
|
|
40
40
|
]
|
41
41
|
|
42
42
|
namespace = namespace_arr.inject(root_namespace) do |namespace, sym|
|
43
|
-
const_name = sym.to_s
|
43
|
+
const_name = StrUtil.camelize(sym.to_s)
|
44
44
|
namespace.const_set(const_name, Module.new) unless namespace.const_defined?(const_name, false)
|
45
45
|
namespace.const_get(const_name, false)
|
46
46
|
end
|
47
47
|
|
48
|
-
klassname = request_name.to_s
|
48
|
+
klassname = StrUtil.camelize(request_name.to_s)
|
49
49
|
|
50
50
|
if namespace.const_defined?(klassname, false)
|
51
51
|
raise RequestAlreadyDefinedError.new(namespace, klassname)
|
@@ -66,11 +66,11 @@ module Aviator
|
|
66
66
|
end
|
67
67
|
|
68
68
|
full_request_class_arr.inject(root_namespace) do |namespace, sym|
|
69
|
-
namespace.const_get(sym.to_s
|
69
|
+
namespace.const_get(StrUtil.camelize(sym.to_s), false)
|
70
70
|
end
|
71
71
|
rescue NameError => e
|
72
|
-
if Aviator.const_defined?(full_request_class_arr[0].to_s
|
73
|
-
provider = "Aviator::#{ full_request_class_arr[0] }::Provider"
|
72
|
+
if Aviator.const_defined?(StrUtil.camelize(full_request_class_arr[0].to_s))
|
73
|
+
provider = StrUtil.constantize("Aviator::#{ full_request_class_arr[0] }::Provider")
|
74
74
|
arr = ['..'] + full_request_class_arr
|
75
75
|
arr[-1,1] = arr.last.to_s + '.rb'
|
76
76
|
path = Pathname.new(provider.root_dir).join(*arr.map{|i| i.to_s }).expand_path
|
@@ -79,7 +79,7 @@ module Aviator
|
|
79
79
|
if provider && path.exist?
|
80
80
|
require path
|
81
81
|
full_request_class_arr.inject(root_namespace) do |namespace, sym|
|
82
|
-
namespace.const_get(sym.to_s
|
82
|
+
namespace.const_get(StrUtil.camelize(sym.to_s), false)
|
83
83
|
end
|
84
84
|
else
|
85
85
|
raise BaseRequestNotFoundError.new(request_class_arr)
|
@@ -99,4 +99,4 @@ module Aviator
|
|
99
99
|
|
100
100
|
end # class << self
|
101
101
|
|
102
|
-
end
|
102
|
+
end
|
data/lib/aviator/core/service.rb
CHANGED
@@ -47,7 +47,7 @@ module Aviator
|
|
47
47
|
|
48
48
|
class MissingServiceEndpointError < StandardError
|
49
49
|
def initialize(service_name, request_name)
|
50
|
-
request_name = request_name.to_s.split('::').last
|
50
|
+
request_name = StrUtil.underscore(request_name.to_s.split('::').last)
|
51
51
|
super "The session's service catalog does not have an entry for the #{ service_name } "\
|
52
52
|
"service. Therefore, I don't know to which base URL the request should be sent. "\
|
53
53
|
"This may be because you are using a default or unscoped token. If this is not your "\
|
@@ -147,10 +147,10 @@ module Aviator
|
|
147
147
|
|
148
148
|
constant_parts = request_file_paths \
|
149
149
|
.map{|rf| rf.to_s.match(/#{provider}\/#{service}\/([\w\/]+)\.rb$/) } \
|
150
|
-
.map{|rf| rf[1].split('/').map{|c|
|
150
|
+
.map{|rf| rf[1].split('/').map{|c| StrUtil.camelize(c) }.join('::') }
|
151
151
|
|
152
152
|
@request_classes = constant_parts.map do |cp|
|
153
|
-
"Aviator::#{
|
153
|
+
StrUtil.constantize("Aviator::#{StrUtil.camelize(provider)}::#{StrUtil.camelize(service)}::#{cp}")
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -161,7 +161,7 @@ module Aviator
|
|
161
161
|
|
162
162
|
|
163
163
|
def provider_module
|
164
|
-
@provider_module ||= "Aviator::#{
|
164
|
+
@provider_module ||= StrUtil.constantize("Aviator::#{StrUtil.camelize(provider)}::Provider")
|
165
165
|
end
|
166
166
|
|
167
167
|
end
|
@@ -1,24 +1,26 @@
|
|
1
|
-
|
1
|
+
module Aviator
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
word.gsub(/_([a-zA-Z\d])/) { "#{$1.capitalize}" }
|
7
|
-
end
|
8
|
-
end
|
3
|
+
class StrUtil
|
4
|
+
|
5
|
+
class <<self
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
def camelize(str)
|
8
|
+
word = str.slice(0,1).capitalize + str.slice(1..-1)
|
9
|
+
word.gsub(/_([a-zA-Z\d])/) { "#{$1.capitalize}" }
|
10
|
+
end
|
11
|
+
|
12
|
+
def constantize(str)
|
13
|
+
str.split("::").inject(Object) do |namespace, sym|
|
14
|
+
namespace.const_get(self.camelize(sym.to_s), false)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def underscore(str)
|
19
|
+
str.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
14
20
|
end
|
15
|
-
end
|
16
|
-
end
|
17
21
|
|
18
|
-
unless instance_methods.include? 'underscore'
|
19
|
-
define_method :underscore do
|
20
|
-
self.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
21
22
|
end
|
23
|
+
|
22
24
|
end
|
23
25
|
|
24
26
|
end
|
@@ -95,24 +95,24 @@ EOF
|
|
95
95
|
service = service.to_s
|
96
96
|
endpoint_type = options[:endpoint_type]
|
97
97
|
endpoint_types = if endpoint_type
|
98
|
-
[endpoint_type.to_s
|
98
|
+
[StrUtil.camelize(endpoint_type.to_s)]
|
99
99
|
else
|
100
100
|
['Public', 'Admin']
|
101
101
|
end
|
102
102
|
|
103
103
|
namespace = Aviator.const_get('Openstack') \
|
104
|
-
.const_get(
|
104
|
+
.const_get(StrUtil.camelize(service)) \
|
105
105
|
.const_get('Requests')
|
106
106
|
|
107
107
|
if options[:api_version]
|
108
108
|
m = options[:api_version].to_s.match(/(v\d+)\.?\d*/)
|
109
|
-
version = m[1].to_s
|
109
|
+
version = StrUtil.camelize(m[1].to_s) unless m.nil?
|
110
110
|
end
|
111
111
|
|
112
112
|
version ||= infer_version(session_data, name, service)
|
113
113
|
|
114
114
|
unless version.nil?
|
115
|
-
version = version.to_s
|
115
|
+
version = StrUtil.camelize(version.to_s)
|
116
116
|
end
|
117
117
|
|
118
118
|
return nil unless version && namespace.const_defined?(version)
|
@@ -120,7 +120,7 @@ EOF
|
|
120
120
|
namespace = namespace.const_get(version, name)
|
121
121
|
|
122
122
|
endpoint_types.each do |endpoint_type|
|
123
|
-
name = name.to_s
|
123
|
+
name = StrUtil.camelize(name.to_s)
|
124
124
|
|
125
125
|
next unless namespace.const_defined?(endpoint_type)
|
126
126
|
next unless namespace.const_get(endpoint_type).const_defined?(name)
|
data/lib/aviator/version.rb
CHANGED
@@ -13,7 +13,7 @@ class Aviator::Test
|
|
13
13
|
request_path = [provider_name, service_name, :requests, base_ver, base_ept, base_name]
|
14
14
|
|
15
15
|
@base = request_path.inject(Aviator) do |namespace, sym|
|
16
|
-
const_name = sym.to_s
|
16
|
+
const_name = Aviator::StrUtil.camelize(sym.to_s)
|
17
17
|
|
18
18
|
if namespace && namespace.const_defined?(const_name, false)
|
19
19
|
namespace.const_get(const_name, false)
|
@@ -91,7 +91,7 @@ class Aviator::Test
|
|
91
91
|
expected = "Available requests for #{ provider } #{ service }_service:\n"
|
92
92
|
|
93
93
|
requests.each do |klass|
|
94
|
-
expected << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last
|
94
|
+
expected << " #{ klass.api_version } #{ klass.endpoint_type } #{ Aviator::StrUtil.underscore(klass.name.split('::').last) }\n"
|
95
95
|
end
|
96
96
|
|
97
97
|
klass.describe_service(provider, service).must_equal expected
|
@@ -26,7 +26,7 @@ class Aviator::Test
|
|
26
26
|
end
|
27
27
|
|
28
28
|
[provider, service, :requests, api_ver, ep_type, _name_].inject(builder) do |namespace, sym|
|
29
|
-
const_name = sym.to_s
|
29
|
+
const_name = Aviator::StrUtil.camelize(sym.to_s)
|
30
30
|
|
31
31
|
namespace.const_defined?(const_name, false).must_equal true
|
32
32
|
|
@@ -50,7 +50,7 @@ class Aviator::Test
|
|
50
50
|
end
|
51
51
|
|
52
52
|
[provider, service, :requests, api_ver, ep_type, _name_].inject(builder) do |namespace, sym|
|
53
|
-
const_name = sym.to_s
|
53
|
+
const_name = Aviator::StrUtil.camelize(sym.to_s)
|
54
54
|
|
55
55
|
namespace.const_defined?(const_name, false).must_equal true,
|
56
56
|
"Expected #{ const_name } to be defined in #{ namespace }"
|
@@ -96,7 +96,7 @@ class Aviator::Test
|
|
96
96
|
]
|
97
97
|
|
98
98
|
child_request = child_req_hierarchy.inject(builder) do |namespace, sym|
|
99
|
-
namespace.const_get(sym.to_s
|
99
|
+
namespace.const_get(Aviator::StrUtil.camelize(sym.to_s), false)
|
100
100
|
end
|
101
101
|
|
102
102
|
child_request.wont_be_nil
|
@@ -154,7 +154,7 @@ class Aviator::Test
|
|
154
154
|
error = the_method.call rescue $!
|
155
155
|
|
156
156
|
error.message.wont_be_nil
|
157
|
-
error.request_name.must_equal request[:name].to_s
|
157
|
+
error.request_name.must_equal Aviator::StrUtil.camelize(request[:name].to_s)
|
158
158
|
end
|
159
159
|
|
160
160
|
|
@@ -165,11 +165,11 @@ class Aviator::Test
|
|
165
165
|
builder.define_request child_arr.last, :inherit => base_arr do; end
|
166
166
|
|
167
167
|
base_klass = base_arr.insert(2, :requests).inject(builder) do |namespace, sym|
|
168
|
-
namespace.const_get(sym.to_s
|
168
|
+
namespace.const_get(Aviator::StrUtil.camelize(sym.to_s), false)
|
169
169
|
end
|
170
170
|
|
171
171
|
child_klass = child_arr.insert(2, :requests).inject(builder) do |namespace, sym|
|
172
|
-
namespace.const_get(sym.to_s
|
172
|
+
namespace.const_get(Aviator::StrUtil.camelize(sym.to_s), false)
|
173
173
|
end
|
174
174
|
|
175
175
|
base_klass.wont_be_nil
|
@@ -180,4 +180,4 @@ class Aviator::Test
|
|
180
180
|
|
181
181
|
end
|
182
182
|
|
183
|
-
end
|
183
|
+
end
|
@@ -83,17 +83,18 @@ class Aviator::Test
|
|
83
83
|
it 'returns an array of the request classes' do
|
84
84
|
provider_name = config[:provider]
|
85
85
|
service_name = config[:auth_service][:name]
|
86
|
-
provider_module = "Aviator::#{
|
86
|
+
provider_module = "Aviator::#{ Aviator::StrUtil.camelize(provider_name) }::Provider"
|
87
|
+
provider_module = Aviator::StrUtil.constantize(provider_module)
|
87
88
|
|
88
89
|
request_file_paths = provider_module.request_file_paths(service_name)
|
89
90
|
request_file_paths.each{ |path| require path }
|
90
91
|
|
91
92
|
constant_parts = request_file_paths \
|
92
93
|
.map{|rf| rf.to_s.match(/#{ provider_name }\/#{ service_name }\/([\w\/]+)\.rb$/) } \
|
93
|
-
.map{|rf| rf[1].split('/').map{|c|
|
94
|
+
.map{|rf| rf[1].split('/').map{|c| Aviator::StrUtil.camelize(c) }.join('::') }
|
94
95
|
|
95
96
|
classes = constant_parts.map do |cp|
|
96
|
-
"Aviator::#{
|
97
|
+
Aviator::StrUtil.constantize("Aviator::#{ Aviator::StrUtil.camelize(provider_name) }::#{ Aviator::StrUtil.camelize(service_name) }::#{ cp }")
|
97
98
|
end
|
98
99
|
|
99
100
|
service.request_classes.must_equal classes
|
@@ -8,8 +8,8 @@ module Provider
|
|
8
8
|
class << self
|
9
9
|
|
10
10
|
def find_request(service, name, session_data, options)
|
11
|
-
fqrn = "Aviator::Dummy::#{service.to_s
|
12
|
-
|
11
|
+
fqrn = "Aviator::Dummy::#{Aviator::StrUtil.camelize(service.to_s)}::Requests::V1::Public::#{Aviator::StrUtil.camelize(name.to_s)}"
|
12
|
+
Aviator::StrUtil.constantize(fqrn)
|
13
13
|
rescue NameError => e
|
14
14
|
raise NameError.new("#{fqrn} not found: #{e.message}")
|
15
15
|
end
|
@@ -50,7 +50,7 @@ class Test
|
|
50
50
|
|
51
51
|
|
52
52
|
def get_request_class(parent, *path)
|
53
|
-
const_name = path.shift.to_s.
|
53
|
+
const_name = Aviator::StrUtil.camelize(path.shift.to_s).gsub(/\.rb$/, '')
|
54
54
|
|
55
55
|
const = if parent.const_defined?(const_name)
|
56
56
|
parent.const_get(const_name)
|
@@ -17,8 +17,9 @@ class Test < MiniTest::Spec
|
|
17
17
|
.gsub(/^Aviator::Test::/, '') \
|
18
18
|
.gsub(/::#/, '/i_') \
|
19
19
|
.gsub(/::::/, '/c_') \
|
20
|
-
.gsub(/::/, '/')
|
21
|
-
|
20
|
+
.gsub(/::/, '/')
|
21
|
+
|
22
|
+
path = Aviator::StrUtil.underscore(path)
|
22
23
|
|
23
24
|
basename = __name__.gsub(/test_\d+_/, '')
|
24
25
|
|
data/test/support/vcr_setup.rb
CHANGED
@@ -50,7 +50,7 @@ VCR.configure do |c|
|
|
50
50
|
[:username, :password, :tenantName, :tokenId].each do |key|
|
51
51
|
configs.each do |config|
|
52
52
|
c.filter_sensitive_data("<#{ config.to_s.upcase }_#{key.to_s.upcase}>") do
|
53
|
-
env.send(config)[:auth_credentials][key] || env.send(config)[:auth_credentials][key.to_s
|
53
|
+
env.send(config)[:auth_credentials][key] || env.send(config)[:auth_credentials][Aviator::StrUtil.underscore(key.to_s)]
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aviator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Maglana
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|