occi-core 5.0.0.beta.3 → 5.0.0.beta.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.
- checksums.yaml +4 -4
- data/lib/occi/core.rb +1 -0
- data/lib/occi/core/errors/location_validation_error.rb +13 -0
- data/lib/occi/core/locations.rb +109 -0
- data/lib/occi/core/renderers/json/locations.rb +20 -0
- data/lib/occi/core/renderers/json_renderer.rb +2 -1
- data/lib/occi/core/renderers/text/locations.rb +38 -0
- data/lib/occi/core/renderers/text_renderer.rb +2 -1
- data/lib/occi/core/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2e1b39411baa08d88b06220dc9478fed8dc9853
|
4
|
+
data.tar.gz: 38abfa1554fd73fb0107be365060cc8858ff3eb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 308dac6e39d40ba9df868b98f5e02ec2eab4e5242b6f48cc688d124c3b221654e91d6a48f80a906a8700acd397fb09f9094f29d45ca071cf333c30c9b4da6654
|
7
|
+
data.tar.gz: c0ef2b4f0c161a672aece4f5d5596463e3ff562967967d9bc8c0bc44d050b678ceec03563b7a6090a44a327170c5515ae4c953642c6022a072b79c2d5f8c8a4e
|
data/lib/occi/core.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'occi/core/errors/validation_error'
|
2
|
+
|
3
|
+
module Occi
|
4
|
+
module Core
|
5
|
+
module Errors
|
6
|
+
# Custom error class indicating validation failures on
|
7
|
+
# various Core class instances.
|
8
|
+
#
|
9
|
+
# @author Boris Parak <parak@cesnet.cz>
|
10
|
+
class LocationValidationError < ValidationError; end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module Occi
|
2
|
+
module Core
|
3
|
+
# Implments handling helpers for OCCI locations. These are especially useful for rendering
|
4
|
+
# and butter-passing purposes.
|
5
|
+
#
|
6
|
+
# @attr uris [Set] collection of URIs representing locations
|
7
|
+
#
|
8
|
+
# @author Boris Parak <parak@cesnet.cz>
|
9
|
+
class Locations
|
10
|
+
include Yell::Loggable
|
11
|
+
include Helpers::Renderable
|
12
|
+
include Helpers::ArgumentValidator
|
13
|
+
include Enumerable
|
14
|
+
|
15
|
+
# Methods to be redirected to `uris`
|
16
|
+
ENUM_METHODS = %i[each << add remove map! empty? include?].freeze
|
17
|
+
delegate(*ENUM_METHODS, to: :uris)
|
18
|
+
|
19
|
+
attr_accessor :uris
|
20
|
+
|
21
|
+
# Constructs an instance with given URIs. If `uris` are omitted, an empty
|
22
|
+
# set will be automatically provided.
|
23
|
+
#
|
24
|
+
# @param args [Hash] arguments with Location information
|
25
|
+
# @option args [Set] :uris collection of URIs representing locations
|
26
|
+
def initialize(args = {})
|
27
|
+
pre_initialize(args)
|
28
|
+
default_args! args
|
29
|
+
|
30
|
+
@uris = args.fetch(:uris)
|
31
|
+
|
32
|
+
post_initialize(args)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Applies given `host` to all locations contained in the collection.
|
36
|
+
#
|
37
|
+
# @param host [String] hostname for locations
|
38
|
+
def host=(host)
|
39
|
+
each { |uri| uri.host = host }
|
40
|
+
end
|
41
|
+
|
42
|
+
# Applies given `port` to all locations contained in the collection.
|
43
|
+
#
|
44
|
+
# @param port [String] port number
|
45
|
+
def port=(port)
|
46
|
+
each { |uri| uri.port = port }
|
47
|
+
end
|
48
|
+
|
49
|
+
# Applies given `scheme` to all locations contained in the collection.
|
50
|
+
#
|
51
|
+
# @param scheme [String] URI scheme
|
52
|
+
def scheme=(scheme)
|
53
|
+
each { |uri| uri.scheme = scheme }
|
54
|
+
end
|
55
|
+
|
56
|
+
# Validates all locations contained in the collection. Validation
|
57
|
+
# errors are only logged.
|
58
|
+
#
|
59
|
+
# @return [TrueClass] if locations are valid
|
60
|
+
# @return [FalseClass] if locations are invalid
|
61
|
+
def valid?
|
62
|
+
valid!
|
63
|
+
true
|
64
|
+
rescue => ex
|
65
|
+
logger.warn "Location invalid: #{ex.message}"
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
69
|
+
# Validates all locations in the collections and raises an error
|
70
|
+
# if there is an invalid location. During this process, all locations
|
71
|
+
# will be converted to `URI` instances.
|
72
|
+
#
|
73
|
+
# @raise [Occi::Core::Errors::LocationValidationError] if some location is invalid
|
74
|
+
def valid!
|
75
|
+
map! { |uri| return_or_convert uri }
|
76
|
+
rescue => ex
|
77
|
+
raise Occi::Core::Errors::LocationValidationError, ex.message
|
78
|
+
end
|
79
|
+
alias convert! valid!
|
80
|
+
|
81
|
+
protected
|
82
|
+
|
83
|
+
# :nodoc:
|
84
|
+
def sufficient_args!(args)
|
85
|
+
return if args[:uris]
|
86
|
+
raise Occi::Core::Errors::MandatoryArgumentError, "'uris' is a mandatory argument for #{self.class}"
|
87
|
+
end
|
88
|
+
|
89
|
+
# :nodoc:
|
90
|
+
def defaults
|
91
|
+
{ uris: Set.new }
|
92
|
+
end
|
93
|
+
|
94
|
+
# :nodoc:
|
95
|
+
def pre_initialize(args); end
|
96
|
+
|
97
|
+
# :nodoc:
|
98
|
+
def post_initialize(args); end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
# :nodoc:
|
103
|
+
def return_or_convert(uri)
|
104
|
+
return uri if uri.is_a?(URI)
|
105
|
+
URI.parse uri
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'occi/core/renderers/json/base'
|
2
|
+
|
3
|
+
module Occi
|
4
|
+
module Core
|
5
|
+
module Renderers
|
6
|
+
module Json
|
7
|
+
# Implements routines required to render `Occi::Core::Locations` and
|
8
|
+
# its subclasses to a JSON-based representation.
|
9
|
+
#
|
10
|
+
# @author Boris Parak <parak@cesnet.cz>
|
11
|
+
class Locations < Base
|
12
|
+
# :nodoc:
|
13
|
+
def render_hash
|
14
|
+
object.map(&:to_s)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -62,7 +62,8 @@ module Occi
|
|
62
62
|
'Occi::Core::Collection' => Occi::Core::Renderers::Json::Collection,
|
63
63
|
'Occi::Core::Model' => Occi::Core::Renderers::Json::Model,
|
64
64
|
'Occi::Core::Resource' => Occi::Core::Renderers::Json::Resource,
|
65
|
-
'Occi::Core::Link' => Occi::Core::Renderers::Json::Link
|
65
|
+
'Occi::Core::Link' => Occi::Core::Renderers::Json::Link,
|
66
|
+
'Occi::Core::Locations' => Occi::Core::Renderers::Json::Locations
|
66
67
|
}
|
67
68
|
end
|
68
69
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'occi/core/renderers/text/base'
|
2
|
+
|
3
|
+
module Occi
|
4
|
+
module Core
|
5
|
+
module Renderers
|
6
|
+
module Text
|
7
|
+
# Implements routines required to render `Occi::Core::Locations` and
|
8
|
+
# its subclasses to a text-based representation. Supports rendering
|
9
|
+
# to plain and header-like formats.
|
10
|
+
#
|
11
|
+
# @author Boris Parak <parak@cesnet.cz>
|
12
|
+
class Locations < Base
|
13
|
+
# Location key constants
|
14
|
+
LOCATION_KEY_PLAIN = 'X-OCCI-Location'.freeze
|
15
|
+
LOCATION_KEY_HEADERS = 'Location'.freeze
|
16
|
+
|
17
|
+
# Renders `object` into plain text and returns the result
|
18
|
+
# as `String`.
|
19
|
+
#
|
20
|
+
# @return [String] textual representation of Object
|
21
|
+
def render_plain
|
22
|
+
locs = object.map { |loc| "#{LOCATION_KEY_PLAIN}: #{loc}" }
|
23
|
+
locs.join "\n"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Renders `object` into text for headers and returns the result
|
27
|
+
# as `Hash`.
|
28
|
+
#
|
29
|
+
# @return [Hash] textual representation of Object for headers
|
30
|
+
def render_headers
|
31
|
+
return {} if object.empty?
|
32
|
+
{ LOCATION_KEY_HEADERS => object.map(&:to_s) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -62,7 +62,8 @@ module Occi
|
|
62
62
|
'Occi::Core::Collection' => Occi::Core::Renderers::Text::Collection,
|
63
63
|
'Occi::Core::Model' => Occi::Core::Renderers::Text::Model,
|
64
64
|
'Occi::Core::Resource' => Occi::Core::Renderers::Text::Resource,
|
65
|
-
'Occi::Core::Link' => Occi::Core::Renderers::Text::Link
|
65
|
+
'Occi::Core::Link' => Occi::Core::Renderers::Text::Link,
|
66
|
+
'Occi::Core::Locations' => Occi::Core::Renderers::Text::Locations
|
66
67
|
}
|
67
68
|
end
|
68
69
|
end
|
data/lib/occi/core/version.rb
CHANGED
@@ -3,7 +3,7 @@ module Occi
|
|
3
3
|
MAJOR_VERSION = 5 # Major update constant
|
4
4
|
MINOR_VERSION = 0 # Minor update constant
|
5
5
|
PATCH_VERSION = 0 # Patch/Fix version constant
|
6
|
-
STAGE_VERSION = 'beta.
|
6
|
+
STAGE_VERSION = 'beta.4'.freeze # use `nil` for production releases
|
7
7
|
|
8
8
|
unless defined?(::Occi::Core::VERSION)
|
9
9
|
VERSION = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: occi-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.0.beta.
|
4
|
+
version: 5.0.0.beta.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boris Parak
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -353,6 +353,7 @@ files:
|
|
353
353
|
- lib/occi/core/errors/category_validation_error.rb
|
354
354
|
- lib/occi/core/errors/collection_lookup_error.rb
|
355
355
|
- lib/occi/core/errors/instance_validation_error.rb
|
356
|
+
- lib/occi/core/errors/location_validation_error.rb
|
356
357
|
- lib/occi/core/errors/mandatory_argument_error.rb
|
357
358
|
- lib/occi/core/errors/model_lookup_error.rb
|
358
359
|
- lib/occi/core/errors/parser_error.rb
|
@@ -377,6 +378,7 @@ files:
|
|
377
378
|
- lib/occi/core/instance_builder.rb
|
378
379
|
- lib/occi/core/kind.rb
|
379
380
|
- lib/occi/core/link.rb
|
381
|
+
- lib/occi/core/locations.rb
|
380
382
|
- lib/occi/core/mixin.rb
|
381
383
|
- lib/occi/core/model.rb
|
382
384
|
- lib/occi/core/parsers.rb
|
@@ -415,6 +417,7 @@ files:
|
|
415
417
|
- lib/occi/core/renderers/json/collection.rb
|
416
418
|
- lib/occi/core/renderers/json/instance.rb
|
417
419
|
- lib/occi/core/renderers/json/link.rb
|
420
|
+
- lib/occi/core/renderers/json/locations.rb
|
418
421
|
- lib/occi/core/renderers/json/model.rb
|
419
422
|
- lib/occi/core/renderers/json/resource.rb
|
420
423
|
- lib/occi/core/renderers/json_renderer.rb
|
@@ -426,6 +429,7 @@ files:
|
|
426
429
|
- lib/occi/core/renderers/text/collection.rb
|
427
430
|
- lib/occi/core/renderers/text/instance.rb
|
428
431
|
- lib/occi/core/renderers/text/link.rb
|
432
|
+
- lib/occi/core/renderers/text/locations.rb
|
429
433
|
- lib/occi/core/renderers/text/model.rb
|
430
434
|
- lib/occi/core/renderers/text/resource.rb
|
431
435
|
- lib/occi/core/renderers/text_renderer.rb
|