yao 0.1.1 → 0.2.0.rc1
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/lib/yao/client.rb +4 -26
- data/lib/yao/faraday_middlewares.rb +13 -0
- data/lib/yao/plugins/default_client_generator.rb +37 -0
- data/lib/yao/plugins/registry.rb +25 -0
- data/lib/yao/plugins.rb +3 -0
- data/lib/yao/resources/action.rb +16 -0
- data/lib/yao/resources/meter.rb +36 -0
- data/lib/yao/resources/resource.rb +54 -0
- data/lib/yao/resources/restfully_accessible.rb +23 -10
- data/lib/yao/resources/sample.rb +43 -0
- data/lib/yao/resources/server.rb +14 -0
- data/lib/yao/resources.rb +4 -0
- data/lib/yao/version.rb +1 -1
- data/lib/yao.rb +1 -0
- data/test/yao/test_client.rb +3 -3
- data/test/yao/test_client_plugin.rb +38 -0
- metadata +14 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 496e37a3be347d2be82ee61a2297dd8bd7271c97
|
4
|
+
data.tar.gz: 920987ae4956f2cc74be462eefd5fcd67c906c4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ca3a1ad84d0d95d36aa0802ea71df5455435bcd2eebdfda3b54c9b4bd468b9ed51a36665d063d330dd42e5625f83af73089e4563abd490e7a4b341be6597c8b
|
7
|
+
data.tar.gz: 1ddced2029721ec76beabce11277085d4044b76223e2e3049e19dc9f32e4d8d5cc63dd7935a53dfd8c898bce18594cacb054b169efe4697b2b3c51701817cb26
|
data/lib/yao/client.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'yao'
|
2
2
|
require 'yao/config'
|
3
3
|
require 'faraday'
|
4
|
-
require '
|
5
|
-
require 'yao/faraday_middlewares'
|
4
|
+
require 'yao/plugins/default_client_generator'
|
6
5
|
|
7
6
|
module Yao
|
8
7
|
module Client
|
@@ -42,34 +41,13 @@ module Yao
|
|
42
41
|
class << self
|
43
42
|
attr_accessor :default_client
|
44
43
|
|
45
|
-
def
|
46
|
-
|
47
|
-
f.request :url_encoded
|
48
|
-
f.request :json
|
49
|
-
|
50
|
-
if token
|
51
|
-
f.request :os_token, token
|
52
|
-
end
|
53
|
-
|
54
|
-
f.response :os_error_detector
|
55
|
-
f.response :json, :content_type => /\bjson$/
|
56
|
-
|
57
|
-
if Yao.config.debug
|
58
|
-
f.response :logger
|
59
|
-
f.response :os_dumper
|
60
|
-
end
|
61
|
-
|
62
|
-
if Yao.config.debug_record_response
|
63
|
-
f.response :os_response_recorder
|
64
|
-
end
|
65
|
-
|
66
|
-
f.adapter Faraday.default_adapter
|
67
|
-
end
|
44
|
+
def client_generator
|
45
|
+
Plugins::Registry.instance[:client_generator][Yao.config.client_generator].new
|
68
46
|
end
|
69
47
|
|
70
48
|
def gen_client(endpoint, token: nil)
|
71
49
|
Faraday.new( endpoint ) do |f|
|
72
|
-
|
50
|
+
client_generator.call(f, token)
|
73
51
|
end
|
74
52
|
end
|
75
53
|
|
@@ -1,5 +1,18 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
|
3
|
+
class Faraday::Request::Accept
|
4
|
+
def initialize(app, accept=nil)
|
5
|
+
@app = app
|
6
|
+
@accept = accept || 'application/json'
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:request_headers]['Accept'] = @accept
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
Faraday::Request.register_middleware accept: -> { Faraday::Request::Accept }
|
15
|
+
|
3
16
|
class Faraday::Request::OSToken
|
4
17
|
def initialize(app, token)
|
5
18
|
@app = app
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'yao/plugins'
|
2
|
+
require 'faraday'
|
3
|
+
require 'faraday_middleware'
|
4
|
+
require 'yao/faraday_middlewares'
|
5
|
+
|
6
|
+
module Yao::Plugins
|
7
|
+
class DefaultClientGenerator
|
8
|
+
def call(f, token)
|
9
|
+
f.request :accept, 'application/json'
|
10
|
+
f.request :url_encoded
|
11
|
+
|
12
|
+
if token
|
13
|
+
f.request :os_token, token
|
14
|
+
end
|
15
|
+
|
16
|
+
f.response :os_error_detector
|
17
|
+
f.response :json, :content_type => /\bjson$/
|
18
|
+
|
19
|
+
if Yao.config.debug
|
20
|
+
f.response :logger
|
21
|
+
f.response :os_dumper
|
22
|
+
end
|
23
|
+
|
24
|
+
if Yao.config.debug_record_response
|
25
|
+
f.response :os_response_recorder
|
26
|
+
end
|
27
|
+
|
28
|
+
f.adapter Faraday.default_adapter
|
29
|
+
end
|
30
|
+
|
31
|
+
Yao::Plugins.register(self, type: :client_generator)
|
32
|
+
|
33
|
+
Yao.config.param :client_generator, :default do |v|
|
34
|
+
raise("Invalid client_generator name %s.\nNote: name must be a Symbol" % v.inspect) unless Registry.instance[:client_generator][v]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module Yao::Plugins
|
4
|
+
class Registry
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@types = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def [](type)
|
12
|
+
@types[type]
|
13
|
+
end
|
14
|
+
|
15
|
+
def register(klass, type: nil, name: :default)
|
16
|
+
raise("Plugin registration requires both type and name.") if !type or !name
|
17
|
+
@types[type] ||= {}
|
18
|
+
@types[type][name] = klass
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.register(*a)
|
23
|
+
Registry.instance.register(*a)
|
24
|
+
end
|
25
|
+
end
|
data/lib/yao/plugins.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Yao::Resources
|
2
|
+
module Action
|
3
|
+
def action(id, query)
|
4
|
+
res = POST(action_path(id)) do |req|
|
5
|
+
req.body = query.to_json
|
6
|
+
req.headers['Content-Type'] = 'application/json'
|
7
|
+
end
|
8
|
+
return_resource(res.body[resource_name_in_json])
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def action_path(id)
|
13
|
+
[resources_name, id, "action"].join("/")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Yao::Resources
|
2
|
+
class Meter < Base
|
3
|
+
friendly_attributes :meter_id, :name, :user_id, :resource_id, :project_id, :source, :type, :unit
|
4
|
+
|
5
|
+
def id
|
6
|
+
meter_id
|
7
|
+
end
|
8
|
+
|
9
|
+
def resource
|
10
|
+
@resource ||= Yao::Resource.get(resource_id)
|
11
|
+
end
|
12
|
+
|
13
|
+
def tenant
|
14
|
+
@tenant ||= Yao::User.get(project_id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def user
|
18
|
+
@user ||= Yao::User.get(user_id)
|
19
|
+
end
|
20
|
+
|
21
|
+
self.service = "metering"
|
22
|
+
self.api_version = "v2"
|
23
|
+
self.resources_name = "meters"
|
24
|
+
|
25
|
+
class << self
|
26
|
+
private
|
27
|
+
def resource_from_json(json)
|
28
|
+
json
|
29
|
+
end
|
30
|
+
|
31
|
+
def resources_from_json(json)
|
32
|
+
json
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'time'
|
2
|
+
module Yao::Resources
|
3
|
+
class Resource < Base
|
4
|
+
friendly_attributes :user_id, :resource_id, :project_id,
|
5
|
+
:last_sample_timestamp, :first_sample_timestamp,
|
6
|
+
:metadata,
|
7
|
+
:links
|
8
|
+
|
9
|
+
def id
|
10
|
+
resource_id
|
11
|
+
end
|
12
|
+
|
13
|
+
def tenant
|
14
|
+
@tenant ||= Yao::User.get(project_id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def user
|
18
|
+
@user ||= Yao::User.get(user_id)
|
19
|
+
end
|
20
|
+
|
21
|
+
def last_sampled_at
|
22
|
+
Time.parse last_sample_timestamp
|
23
|
+
end
|
24
|
+
|
25
|
+
def first_sampled_at
|
26
|
+
Time.parse first_sample_timestamp
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_meter(name)
|
30
|
+
if link = links.find{|l| l["rel"] == name }
|
31
|
+
Yao::Sample.list(link["href"])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def meters
|
36
|
+
links.map{|l| l["rel"] }.delete_if{|n| n == 'self' }
|
37
|
+
end
|
38
|
+
|
39
|
+
self.service = "metering"
|
40
|
+
self.api_version = "v2"
|
41
|
+
self.resources_name = "resources"
|
42
|
+
|
43
|
+
class << self
|
44
|
+
private
|
45
|
+
def resource_from_json(json)
|
46
|
+
json
|
47
|
+
end
|
48
|
+
|
49
|
+
def resources_from_json(json)
|
50
|
+
json
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -18,10 +18,17 @@ module Yao::Resources
|
|
18
18
|
def service=(name)
|
19
19
|
@service = name
|
20
20
|
end
|
21
|
+
attr_reader :service
|
21
22
|
|
22
|
-
def
|
23
|
-
|
23
|
+
def api_version=(v)
|
24
|
+
raise("Set api_version after service is declared") unless service
|
25
|
+
@api_version = v
|
26
|
+
if cli = client
|
27
|
+
cli.url_prefix.path = "/#{api_version}"
|
28
|
+
end
|
29
|
+
api_version
|
24
30
|
end
|
31
|
+
attr_reader :api_version
|
25
32
|
|
26
33
|
def admin=(bool)
|
27
34
|
@admin = bool
|
@@ -71,14 +78,18 @@ module Yao::Resources
|
|
71
78
|
def list(query={})
|
72
79
|
json = GET(resources_path, query).body
|
73
80
|
if @return_single_on_querying && !query.empty?
|
74
|
-
return_resource(json
|
81
|
+
return_resource(resource_from_json(json))
|
75
82
|
else
|
76
|
-
return_resources(json
|
83
|
+
return_resources(resources_from_json(json))
|
77
84
|
end
|
78
85
|
end
|
79
86
|
|
80
87
|
def list_detail(query={})
|
81
|
-
return_resources(
|
88
|
+
return_resources(
|
89
|
+
resources_from_json(
|
90
|
+
GET([resources_path, "detail"].join("/"), query).body
|
91
|
+
)
|
92
|
+
)
|
82
93
|
end
|
83
94
|
|
84
95
|
def get(id_or_permalink, query={})
|
@@ -87,7 +98,7 @@ module Yao::Resources
|
|
87
98
|
else
|
88
99
|
GET([resources_path, id_or_permalink].join("/"), query)
|
89
100
|
end
|
90
|
-
return_resource(res.body
|
101
|
+
return_resource(resource_from_json(res.body))
|
91
102
|
end
|
92
103
|
alias find get
|
93
104
|
|
@@ -99,7 +110,7 @@ module Yao::Resources
|
|
99
110
|
req.body = params.to_json
|
100
111
|
req.headers['Content-Type'] = 'application/json'
|
101
112
|
end
|
102
|
-
return_resource(res.body
|
113
|
+
return_resource(resource_from_json(res.body))
|
103
114
|
end
|
104
115
|
|
105
116
|
def update(id, resource_params)
|
@@ -110,7 +121,7 @@ module Yao::Resources
|
|
110
121
|
req.body = params.to_json
|
111
122
|
req.headers['Content-Type'] = 'application/json'
|
112
123
|
end
|
113
|
-
return_resource(res.body
|
124
|
+
return_resource(resource_from_json(res.body))
|
114
125
|
end
|
115
126
|
|
116
127
|
def destroy(id)
|
@@ -119,12 +130,14 @@ module Yao::Resources
|
|
119
130
|
end
|
120
131
|
|
121
132
|
private
|
122
|
-
def
|
133
|
+
def resource_from_json(json)
|
123
134
|
@resource_name_in_json ||= resource_name.sub(/^os-/, "").tr("-", "_")
|
135
|
+
json[@resource_name_in_json]
|
124
136
|
end
|
125
137
|
|
126
|
-
def
|
138
|
+
def resources_from_json(json)
|
127
139
|
@resources_name_in_json ||= resources_name.sub(/^os-/, "").tr("-", "_")
|
140
|
+
json[@resources_name_in_json]
|
128
141
|
end
|
129
142
|
|
130
143
|
def return_resource(d)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Yao::Resources
|
2
|
+
class Sample < Base
|
3
|
+
friendly_attributes :counter_name, :counter_type, :counter_unit, :counter_volume,
|
4
|
+
:message_id, :project_id, :resource_id, :timestamp, :resource_metadata, :user_id
|
5
|
+
:source
|
6
|
+
|
7
|
+
def recorded_at
|
8
|
+
Time.parse(self["recorded_at"] || self["timestamp"])
|
9
|
+
end
|
10
|
+
alias timestamp recorded_at
|
11
|
+
|
12
|
+
def id
|
13
|
+
meter_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def resource
|
17
|
+
@resource ||= Yao::Resource.get(resource_id)
|
18
|
+
end
|
19
|
+
|
20
|
+
def tenant
|
21
|
+
@tenant ||= Yao::User.get(project_id)
|
22
|
+
end
|
23
|
+
|
24
|
+
def user
|
25
|
+
@user ||= Yao::User.get(user_id)
|
26
|
+
end
|
27
|
+
|
28
|
+
self.service = "metering"
|
29
|
+
self.api_version = "v2"
|
30
|
+
|
31
|
+
# get /v2/meters/{id} returns samples!
|
32
|
+
def self.list(id_or_url, query={})
|
33
|
+
json = if id_or_url =~ /^https?:\/\//
|
34
|
+
GET(id_or_url).body
|
35
|
+
else
|
36
|
+
GET("meters/#{id_or_url}", query).body
|
37
|
+
end
|
38
|
+
return_resources(json)
|
39
|
+
end
|
40
|
+
|
41
|
+
# TODO: implement `def self.create'
|
42
|
+
end
|
43
|
+
end
|
data/lib/yao/resources/server.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'yao/resources/metadata_available'
|
2
|
+
require 'yao/resources/action'
|
2
3
|
module Yao::Resources
|
3
4
|
class Server < Base
|
4
5
|
friendly_attributes :addresses, :metadata, :name, :progress,
|
@@ -21,6 +22,19 @@ module Yao::Resources
|
|
21
22
|
self.resource_name = "server"
|
22
23
|
self.resources_name = "servers"
|
23
24
|
|
25
|
+
def self.shutoff(id)
|
26
|
+
action(id, "os-stop" => nil)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.reboot(id)
|
30
|
+
action(id,"reboot" => { "type" => "HARD" })
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.resize(id, flavor_id)
|
34
|
+
action(id,"resize" => { "flavorRef" => flavor_id })
|
35
|
+
end
|
36
|
+
|
24
37
|
extend MetadataAvailable
|
38
|
+
extend Action
|
25
39
|
end
|
26
40
|
end
|
data/lib/yao/resources.rb
CHANGED
@@ -17,6 +17,10 @@ module Yao
|
|
17
17
|
autoload :Host, "yao/resources/host"
|
18
18
|
autoload :User, "yao/resources/user"
|
19
19
|
autoload :Role, "yao/resources/role"
|
20
|
+
|
21
|
+
autoload :Resource, "yao/resources/resource"
|
22
|
+
autoload :Meter, "yao/resources/meter"
|
23
|
+
autoload :Sample, "yao/resources/sample"
|
20
24
|
end
|
21
25
|
|
22
26
|
def self.const_missing(name)
|
data/lib/yao/version.rb
CHANGED
data/lib/yao.rb
CHANGED
data/test/yao/test_client.rb
CHANGED
@@ -9,8 +9,8 @@ class TestClient < Test::Unit::TestCase
|
|
9
9
|
assert { cli.url_prefix.to_s == "http://cool-api.example.com:12345/v3.0" }
|
10
10
|
|
11
11
|
handlers = [
|
12
|
+
Faraday::Request::Accept,
|
12
13
|
Faraday::Request::UrlEncoded,
|
13
|
-
FaradayMiddleware::EncodeJson,
|
14
14
|
Faraday::Response::OSErrorDetector,
|
15
15
|
FaradayMiddleware::ParseJson,
|
16
16
|
Faraday::Adapter::NetHttp
|
@@ -21,8 +21,8 @@ class TestClient < Test::Unit::TestCase
|
|
21
21
|
def test_gen_with_token
|
22
22
|
cli = Yao::Client.gen_client("http://cool-api.example.com:12345/v3.0", token: "deadbeaf")
|
23
23
|
handlers = [
|
24
|
+
Faraday::Request::Accept,
|
24
25
|
Faraday::Request::UrlEncoded,
|
25
|
-
FaradayMiddleware::EncodeJson,
|
26
26
|
Faraday::Request::OSToken,
|
27
27
|
Faraday::Response::OSErrorDetector,
|
28
28
|
FaradayMiddleware::ParseJson,
|
@@ -36,8 +36,8 @@ class TestClient < Test::Unit::TestCase
|
|
36
36
|
|
37
37
|
cli = Yao::Client.gen_client("http://cool-api.example.com:12345/v3.0")
|
38
38
|
handlers = [
|
39
|
+
Faraday::Request::Accept,
|
39
40
|
Faraday::Request::UrlEncoded,
|
40
|
-
FaradayMiddleware::EncodeJson,
|
41
41
|
Faraday::Response::OSErrorDetector,
|
42
42
|
FaradayMiddleware::ParseJson,
|
43
43
|
Faraday::Response::Logger,
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class TestClientPlugin < Test::Unit::TestCase
|
2
|
+
def setup
|
3
|
+
stub(Yao.config).debug { false }
|
4
|
+
stub(Yao.config).debug_record_response { false }
|
5
|
+
end
|
6
|
+
|
7
|
+
def teardown
|
8
|
+
Yao.config.set :client_generator, :default
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_raise_invalid_name
|
12
|
+
e = nil
|
13
|
+
begin
|
14
|
+
Yao.config.set :client_generator, :nonexist
|
15
|
+
rescue => e
|
16
|
+
end
|
17
|
+
|
18
|
+
assert { e.is_a? StandardError }
|
19
|
+
assert { e.message == "Invalid client_generator name :nonexist.\nNote: name must be a Symbol" }
|
20
|
+
end
|
21
|
+
|
22
|
+
class ::Yao::Plugins::TestCustomClientGenerator
|
23
|
+
def call(f, t)
|
24
|
+
f.response :xml, :content_type => /\/xml$/
|
25
|
+
end
|
26
|
+
::Yao::Plugins.register self, type: :client_generator, name: :test_custom
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_gen_client_with_custom
|
30
|
+
Yao.config.set :client_generator, :test_custom
|
31
|
+
|
32
|
+
cli = Yao::Client.gen_client("http://cool-api.example.com:12345/v3.0")
|
33
|
+
handlers = [
|
34
|
+
FaradayMiddleware::ParseXml,
|
35
|
+
]
|
36
|
+
assert { cli.builder.handlers == handlers }
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yao
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uchio, KONDO
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -170,7 +170,11 @@ files:
|
|
170
170
|
- lib/yao/config.rb
|
171
171
|
- lib/yao/faraday_middlewares.rb
|
172
172
|
- lib/yao/is_openstack_client.rb
|
173
|
+
- lib/yao/plugins.rb
|
174
|
+
- lib/yao/plugins/default_client_generator.rb
|
175
|
+
- lib/yao/plugins/registry.rb
|
173
176
|
- lib/yao/resources.rb
|
177
|
+
- lib/yao/resources/action.rb
|
174
178
|
- lib/yao/resources/base.rb
|
175
179
|
- lib/yao/resources/flavor.rb
|
176
180
|
- lib/yao/resources/floating_ip.rb
|
@@ -179,10 +183,13 @@ files:
|
|
179
183
|
- lib/yao/resources/image.rb
|
180
184
|
- lib/yao/resources/keypair.rb
|
181
185
|
- lib/yao/resources/metadata_available.rb
|
186
|
+
- lib/yao/resources/meter.rb
|
182
187
|
- lib/yao/resources/network.rb
|
183
188
|
- lib/yao/resources/port.rb
|
189
|
+
- lib/yao/resources/resource.rb
|
184
190
|
- lib/yao/resources/restfully_accessible.rb
|
185
191
|
- lib/yao/resources/role.rb
|
192
|
+
- lib/yao/resources/sample.rb
|
186
193
|
- lib/yao/resources/security_group.rb
|
187
194
|
- lib/yao/resources/security_group_rule.rb
|
188
195
|
- lib/yao/resources/server.rb
|
@@ -195,6 +202,7 @@ files:
|
|
195
202
|
- test/config.rb
|
196
203
|
- test/yao/test_auth.rb
|
197
204
|
- test/yao/test_client.rb
|
205
|
+
- test/yao/test_client_plugin.rb
|
198
206
|
- test/yao/test_config.rb
|
199
207
|
- test/yao/test_server_error.rb
|
200
208
|
- test/yao/test_token.rb
|
@@ -214,12 +222,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
214
222
|
version: '0'
|
215
223
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
216
224
|
requirements:
|
217
|
-
- - "
|
225
|
+
- - ">"
|
218
226
|
- !ruby/object:Gem::Version
|
219
|
-
version:
|
227
|
+
version: 1.3.1
|
220
228
|
requirements: []
|
221
229
|
rubyforge_project:
|
222
|
-
rubygems_version: 2.2.
|
230
|
+
rubygems_version: 2.2.5
|
223
231
|
signing_key:
|
224
232
|
specification_version: 4
|
225
233
|
summary: Yet Another OpenStack API Wrapper that rocks!!
|
@@ -227,6 +235,7 @@ test_files:
|
|
227
235
|
- test/config.rb
|
228
236
|
- test/yao/test_auth.rb
|
229
237
|
- test/yao/test_client.rb
|
238
|
+
- test/yao/test_client_plugin.rb
|
230
239
|
- test/yao/test_config.rb
|
231
240
|
- test/yao/test_server_error.rb
|
232
241
|
- test/yao/test_token.rb
|