occi-core 4.2.4 → 4.2.5
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.
- data/.travis.yml +7 -0
- data/lib/occi/collection.rb +13 -8
- data/lib/occi/core/action_instance.rb +13 -5
- data/lib/occi/core/attributes.rb +2 -2
- data/lib/occi/core/entity.rb +3 -2
- data/lib/occi/core/mixin.rb +4 -2
- data/lib/occi/infrastructure/os_tpl.rb +3 -2
- data/lib/occi/infrastructure/resource_tpl.rb +3 -2
- data/lib/occi/model.rb +3 -3
- data/lib/occi/parser.rb +9 -4
- data/lib/occi/parser/json.rb +2 -0
- data/lib/occi/parser/text.rb +31 -4
- data/lib/occi/version.rb +1 -1
- data/spec/occi/collection_spec.rb +2 -2
- data/spec/occi/core/action_instance_spec.rb +16 -16
- data/spec/occi/parser_spec.rb +1 -1
- metadata +22 -5
- checksums.yaml +0 -15
data/.travis.yml
CHANGED
@@ -3,6 +3,7 @@ language: ruby
|
|
3
3
|
rvm:
|
4
4
|
- 1.9.3
|
5
5
|
- 2.0.0
|
6
|
+
- 2.1.0
|
6
7
|
- ruby-head
|
7
8
|
- jruby-19mode
|
8
9
|
- jruby-head
|
@@ -25,13 +26,19 @@ matrix:
|
|
25
26
|
jdk: openjdk7
|
26
27
|
- rvm: 2.0.0
|
27
28
|
jdk: oraclejdk7
|
29
|
+
- rvm: 2.1.0
|
30
|
+
jdk: openjdk7
|
31
|
+
- rvm: 2.1.0
|
32
|
+
jdk: oraclejdk7
|
28
33
|
- rvm: ruby-head
|
29
34
|
jdk: openjdk7
|
30
35
|
- rvm: ruby-head
|
31
36
|
jdk: oraclejdk7
|
37
|
+
fast_finish: true
|
32
38
|
|
33
39
|
branches:
|
34
40
|
only:
|
35
41
|
- master
|
36
42
|
- 4.0.x
|
37
43
|
- 4.1.x
|
44
|
+
- 4.2.x
|
data/lib/occi/collection.rb
CHANGED
@@ -18,14 +18,14 @@ module Occi
|
|
18
18
|
@resources = Occi::Core::Resources.new
|
19
19
|
@links = Occi::Core::Links.new
|
20
20
|
|
21
|
-
self.model = model if model
|
22
|
-
|
23
21
|
@kinds.merge collection.kinds.to_a.collect { |kind| Occi::Core::Kind.new(kind.scheme, kind.term, kind.title, kind.attributes, kind.related, kind.actions, kind.location) }
|
24
22
|
@mixins.merge collection.mixins.to_a.collect { |mixin| Occi::Core::Mixin.new(mixin.scheme, mixin.term, mixin.title, mixin.attributes, mixin.depends, mixin.actions, mixin.location, mixin.applies) }
|
25
23
|
@actions.merge collection.actions.to_a.collect { |action| Occi::Core::Action.new(action.scheme, action.term, action.title, action.attributes) }
|
26
24
|
@resources.merge collection.resources.to_a.collect { |resource| Occi::Core::Resource.new(resource.kind, resource.mixins, resource.attributes, resource.actions, resource.links, resource.location) }
|
27
25
|
@links.merge collection.links.to_a.collect { |link| Occi::Core::Link.new(link.kind, link.mixins, link.attributes, link.actions, link.rel, link.target, link.source, link.location) }
|
28
|
-
@action = Occi::Core::ActionInstance.new(collection.action) if collection.action
|
26
|
+
@action = Occi::Core::ActionInstance.new(collection.action.action, collection.action.attributes) if collection.action
|
27
|
+
|
28
|
+
self.model = model if model
|
29
29
|
end
|
30
30
|
|
31
31
|
def <<(object)
|
@@ -35,6 +35,8 @@ module Occi
|
|
35
35
|
self.resources << object if object.kind_of? Occi::Core::Resource
|
36
36
|
self.links << object if object.kind_of? Occi::Core::Link
|
37
37
|
|
38
|
+
self.action = object if object.kind_of? Occi::Core::ActionInstance
|
39
|
+
|
38
40
|
self
|
39
41
|
end
|
40
42
|
|
@@ -52,18 +54,18 @@ module Occi
|
|
52
54
|
# @return [Occi::Core::Model]
|
53
55
|
def model=(model)
|
54
56
|
@model = model
|
57
|
+
|
55
58
|
@kinds.model = model
|
56
59
|
@mixins.model = model
|
57
60
|
@actions.model = model
|
58
61
|
@resources.model = model
|
59
62
|
@links.model = model
|
63
|
+
|
64
|
+
@action.model = model if @action
|
60
65
|
end
|
61
66
|
|
62
67
|
def check
|
63
|
-
@resources.check
|
64
|
-
@links.check
|
65
|
-
# TODO: check action instance format, should check be applicable?
|
66
|
-
#@action.check
|
68
|
+
@resources.check && @links.check && (@action ? @action.check : true)
|
67
69
|
end
|
68
70
|
|
69
71
|
# @param [Occi::Collection] other_collection
|
@@ -104,11 +106,13 @@ module Occi
|
|
104
106
|
collection.actions.replace other_collection.actions.select { |action| get_by_id(action.type_identifier) }
|
105
107
|
collection.resources.replace other_collection.resources.select { |resource| get_by_id(resource.id) }
|
106
108
|
collection.links.replace other_collection.links.select { |link| get_by_id(link.id) }
|
109
|
+
|
107
110
|
if collection.action == other_collection.action
|
108
111
|
collection.action = other_collection.action
|
109
112
|
else
|
110
113
|
collection.action = nil
|
111
114
|
end
|
115
|
+
|
112
116
|
collection
|
113
117
|
end
|
114
118
|
|
@@ -148,6 +152,8 @@ module Occi
|
|
148
152
|
|
149
153
|
# @return [Hashie::Mash] json representation
|
150
154
|
def as_json(options = {})
|
155
|
+
return @action.as_json if standalone_action_instance?
|
156
|
+
|
151
157
|
collection = Hashie::Mash.new
|
152
158
|
collection.kinds = @kinds.collect { |kind| kind.as_json } if @kinds.any?
|
153
159
|
collection.mixins = @mixins.collect { |mixin| mixin.as_json } if @mixins.any?
|
@@ -167,7 +173,6 @@ module Occi
|
|
167
173
|
end
|
168
174
|
collection.links = lnks.collect { |link| link.as_json } if lnks.to_a.any?
|
169
175
|
|
170
|
-
collection.action = @action.as_json if @action
|
171
176
|
collection
|
172
177
|
end
|
173
178
|
|
@@ -14,20 +14,22 @@ module Occi
|
|
14
14
|
self.action = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/core#',
|
15
15
|
term='action_instance',
|
16
16
|
title='action',
|
17
|
-
attributes=self.attributes
|
17
|
+
attributes=Occi::Core::Attributes.new(self.attributes)
|
18
18
|
|
19
19
|
def initialize(action = self.action, attributes=self.attributes)
|
20
20
|
raise ArgumentError, 'action cannot be nil' unless action
|
21
|
-
raise ArgumentError, 'attributes cannot be nil' unless attributes
|
22
|
-
raise ArgumentError, 'attributes must respond to #convert' unless attributes.respond_to? :convert
|
23
21
|
|
24
22
|
if action.kind_of? String
|
25
23
|
scheme, term = action.split '#'
|
26
24
|
action = Occi::Core::Action.new(scheme, term)
|
27
25
|
end
|
28
|
-
|
29
26
|
@action = action
|
30
|
-
|
27
|
+
|
28
|
+
if attributes.kind_of? Occi::Core::Attributes
|
29
|
+
@attributes = attributes.convert
|
30
|
+
else
|
31
|
+
@attributes = Occi::Core::Attributes.new(attributes || {})
|
32
|
+
end
|
31
33
|
end
|
32
34
|
|
33
35
|
# @param [Hash] options
|
@@ -75,6 +77,12 @@ module Occi
|
|
75
77
|
action.nil? || action.empty?
|
76
78
|
end
|
77
79
|
|
80
|
+
# @return [Bool] Result of the validation process
|
81
|
+
def check
|
82
|
+
# TODO: impl check for ActionInstance attributes
|
83
|
+
true
|
84
|
+
end
|
85
|
+
|
78
86
|
end
|
79
87
|
end
|
80
88
|
end
|
data/lib/occi/core/attributes.rb
CHANGED
@@ -288,7 +288,7 @@ module Occi
|
|
288
288
|
raise Occi::Errors::AttributeTypeError,
|
289
289
|
"Value #{value.to_s} does not match pattern #{pattern}" unless value.to_s.match "^#{pattern}$"
|
290
290
|
else
|
291
|
-
Occi::Log.
|
291
|
+
Occi::Log.debug "[#{self.class}] Skipping pattern checks on attributes, turn off " \
|
292
292
|
"the compatibility mode and enable the attribute pattern check in settings!"
|
293
293
|
end
|
294
294
|
end
|
@@ -337,7 +337,7 @@ module Occi
|
|
337
337
|
"Attribute #{key} with value #{attributes[key]} does not " \
|
338
338
|
"match pattern #{definitions[key].pattern}" unless attributes[key].to_s.match "^#{definitions[key].pattern}$"
|
339
339
|
else
|
340
|
-
Occi::Log.
|
340
|
+
Occi::Log.debug "[#{self.class}] [#{key}] Skipping pattern checks on attributes, turn off " \
|
341
341
|
"the compatibility mode and enable the attribute pattern check in settings!"
|
342
342
|
end
|
343
343
|
end
|
data/lib/occi/core/entity.rb
CHANGED
@@ -160,10 +160,11 @@ module Occi
|
|
160
160
|
# @param [true,false] set default values for all empty attributes
|
161
161
|
def check(set_defaults = false)
|
162
162
|
|
163
|
-
raise ArgumentError, 'No model has been assigned to this entity' unless @model
|
163
|
+
raise ArgumentError, 'No model has been assigned to this entity' unless @model
|
164
164
|
|
165
165
|
kind = @model.get_by_id(@kind.to_s)
|
166
|
-
raise Occi::Errors::KindNotDefinedError,
|
166
|
+
raise Occi::Errors::KindNotDefinedError,
|
167
|
+
"Kind not found for entity #{self.class.name}[#{self.to_s.inspect}]!" unless kind
|
167
168
|
|
168
169
|
definitions = Occi::Core::Attributes.new
|
169
170
|
definitions.merge! kind.attributes
|
data/lib/occi/core/mixin.rb
CHANGED
@@ -4,12 +4,14 @@ module Occi
|
|
4
4
|
|
5
5
|
attr_accessor :entities, :depends, :actions, :location, :applies
|
6
6
|
|
7
|
-
# @param [String
|
7
|
+
# @param [String] scheme
|
8
8
|
# @param [String] term
|
9
9
|
# @param [String] title
|
10
10
|
# @param [Occi::Core::Attributes,Hash,NilClass] attributes
|
11
|
-
# @param [Occi::Core::Categories,Hash,NilClass]
|
11
|
+
# @param [Occi::Core::Categories,Hash,NilClass] depends
|
12
12
|
# @param [Occi::Core::Actions,Hash,NilClass] actions
|
13
|
+
# @param [String] location
|
14
|
+
# @param [Occi::Core::Kinds, NilClass] applies
|
13
15
|
def initialize(scheme='http://schemas.ogf.org/occi/core#',
|
14
16
|
term='mixin',
|
15
17
|
title=nil,
|
@@ -10,9 +10,10 @@ module Occi
|
|
10
10
|
term='os_tpl',
|
11
11
|
title='operating system template',
|
12
12
|
attributes=Occi::Core::Attributes.new(self.attributes),
|
13
|
-
|
13
|
+
dependencies=Occi::Core::Dependencies.new,
|
14
14
|
actions=Occi::Core::Actions.new,
|
15
|
-
location='/mixin/os_tpl/'
|
15
|
+
location='/mixin/os_tpl/',
|
16
|
+
applies=Occi::Core::Kinds.new << Occi::Infrastructure::Compute.kind
|
16
17
|
end
|
17
18
|
|
18
19
|
end
|
@@ -10,9 +10,10 @@ module Occi
|
|
10
10
|
term='resource_tpl',
|
11
11
|
title='resource template',
|
12
12
|
attributes=Occi::Core::Attributes.new(self.attributes),
|
13
|
-
|
13
|
+
dependencies=Occi::Core::Dependencies.new,
|
14
14
|
actions=Occi::Core::Actions.new,
|
15
|
-
location='/mixin/resource_tpl/'
|
15
|
+
location='/mixin/resource_tpl/',
|
16
|
+
applies=Occi::Core::Kinds.new << Occi::Infrastructure::Compute.kind
|
16
17
|
end
|
17
18
|
|
18
19
|
end
|
data/lib/occi/model.rb
CHANGED
@@ -14,7 +14,7 @@ module Occi
|
|
14
14
|
|
15
15
|
# register Occi Core categories enitity, resource and link
|
16
16
|
def register_core
|
17
|
-
Occi::Log.
|
17
|
+
Occi::Log.debug "[#{self.class}] Registering OCCI Core categories enitity, resource and link"
|
18
18
|
register Occi::Core::Entity.kind
|
19
19
|
register Occi::Core::Resource.kind
|
20
20
|
register Occi::Core::Link.kind
|
@@ -22,7 +22,7 @@ module Occi
|
|
22
22
|
|
23
23
|
# register Occi Infrastructure categories
|
24
24
|
def register_infrastructure
|
25
|
-
Occi::Log.
|
25
|
+
Occi::Log.debug "[#{self.class}] Registering OCCI Infrastructure categories"
|
26
26
|
Occi::Infrastructure.categories.each { |category| register category }
|
27
27
|
end
|
28
28
|
|
@@ -32,7 +32,7 @@ module Occi
|
|
32
32
|
# recursively searched for files with the extension .json .
|
33
33
|
# @param [Sting] scheme_base_url base location for provider specific extensions of the OCCI model
|
34
34
|
def register_files(path, scheme_base_url='http://localhost')
|
35
|
-
Occi::Log.
|
35
|
+
Occi::Log.debug "[#{self.class}] Initializing OCCI Model from #{path}"
|
36
36
|
raise ArgumentError, "Directory \"#{path}\" does not exist" unless File.directory?(path)
|
37
37
|
Dir.glob(path + '/**/*.json').each do |file|
|
38
38
|
collection = Occi::Collection.new(JSON.parse(File.read(file)))
|
data/lib/occi/parser.rb
CHANGED
@@ -22,7 +22,7 @@ module Occi
|
|
22
22
|
collection = parse_headers(header, category, entity_type)
|
23
23
|
|
24
24
|
Occi::Log.debug "[#{self}] Parsing #{media_type} from body"
|
25
|
-
coll_body = parse_body(media_type, body, category, entity_type)
|
25
|
+
coll_body = parse_body(media_type, body || '', category, entity_type)
|
26
26
|
collection.merge! coll_body if coll_body && !coll_body.empty?
|
27
27
|
|
28
28
|
collection
|
@@ -62,6 +62,9 @@ module Occi
|
|
62
62
|
elsif entity_type == Occi::Core::Link
|
63
63
|
Occi::Log.debug "[#{self}] Parsing a link from headers"
|
64
64
|
collection = Occi::Parser::Text.link(header)
|
65
|
+
elsif entity_type == Occi::Core::ActionInstance
|
66
|
+
Occi::Log.debug "[#{self}] Parsing an action instance from headers"
|
67
|
+
collection = Occi::Parser::Text.action(header)
|
65
68
|
else
|
66
69
|
raise Occi::Errors::ParserTypeError, "Entity type '#{entity_type}' not supported"
|
67
70
|
end
|
@@ -98,12 +101,14 @@ module Occi
|
|
98
101
|
|
99
102
|
def parse_body_plain(body, category, entity_type)
|
100
103
|
if category
|
101
|
-
collection = Occi::Parser::Text.categories body.split
|
104
|
+
collection = Occi::Parser::Text.categories body.split("\n")
|
102
105
|
else
|
103
106
|
if entity_type == Occi::Core::Resource
|
104
|
-
collection = Occi::Parser::Text.resource body.split
|
107
|
+
collection = Occi::Parser::Text.resource body.split("\n")
|
105
108
|
elsif entity_type == Occi::Core::Link
|
106
|
-
collection = Occi::Parser::Text.link body.split
|
109
|
+
collection = Occi::Parser::Text.link body.split("\n")
|
110
|
+
elsif entity_type == Occi::Core::ActionInstance
|
111
|
+
collection = Occi::Parser::Text.action body.split("\n")
|
107
112
|
else
|
108
113
|
raise Occi::Errors::ParserTypeError, "Entity type #{entity_type} not supported"
|
109
114
|
end
|
data/lib/occi/parser/json.rb
CHANGED
@@ -11,6 +11,8 @@ module Occi
|
|
11
11
|
Occi::Log.error "[#{self}] Failed to parse JSON input: #{perr.message}"
|
12
12
|
raise Occi::Errors::ParserInputError, perr.message
|
13
13
|
end
|
14
|
+
|
15
|
+
hash = { :action => hash } if hash && hash.action
|
14
16
|
collection = Occi::Collection.new(hash)
|
15
17
|
|
16
18
|
if collection.resources.size == 1 && collection.links.size > 0
|
data/lib/occi/parser/text.rb
CHANGED
@@ -101,7 +101,7 @@ module Occi
|
|
101
101
|
# match string to regular expression
|
102
102
|
match = regexp.match string
|
103
103
|
|
104
|
-
raise Occi::Errors::ParserInputError, "
|
104
|
+
raise Occi::Errors::ParserInputError, "Could not match #{string}" unless match
|
105
105
|
|
106
106
|
term = match[:term].downcase
|
107
107
|
scheme = match[:scheme]
|
@@ -148,7 +148,7 @@ module Occi
|
|
148
148
|
# match string to regular expression
|
149
149
|
match = regexp.match string
|
150
150
|
|
151
|
-
raise Occi::Errors::ParserInputError, "
|
151
|
+
raise Occi::Errors::ParserInputError, "Could not match #{string}" unless match
|
152
152
|
|
153
153
|
value = match[:string] if match[:string]
|
154
154
|
|
@@ -167,7 +167,7 @@ module Occi
|
|
167
167
|
# match string to regular expression
|
168
168
|
match = regexp.match string
|
169
169
|
|
170
|
-
raise Occi::Errors::ParserInputError, "
|
170
|
+
raise Occi::Errors::ParserInputError, "Could not match #{string}" unless match
|
171
171
|
|
172
172
|
target = match[:uri]
|
173
173
|
rel = match[:rel]
|
@@ -201,11 +201,38 @@ module Occi
|
|
201
201
|
# match string to regular expression
|
202
202
|
match = regexp.match string
|
203
203
|
|
204
|
-
raise Occi::Errors::ParserInputError, "
|
204
|
+
raise Occi::Errors::ParserInputError, "Could not match #{string}" unless match
|
205
205
|
|
206
206
|
match[:location]
|
207
207
|
end
|
208
208
|
|
209
|
+
def action(lines)
|
210
|
+
Occi::Log.debug "[#{self}] Parsing through Occi::Parser::Text.action"
|
211
|
+
collection = Occi::Collection.new
|
212
|
+
action_instance = nil
|
213
|
+
|
214
|
+
block = Proc.new { |line|
|
215
|
+
line.strip!
|
216
|
+
|
217
|
+
case line
|
218
|
+
when /^Category:/
|
219
|
+
action_instance = Occi::Core::ActionInstance.new
|
220
|
+
action_instance.action = category(line)
|
221
|
+
when /^X-OCCI-Attribute:/
|
222
|
+
raise Occi::Errors::ParserInputError,
|
223
|
+
"Line #{line.inspect} arrived out of order!" unless action_instance
|
224
|
+
action_instance.attributes.merge! attribute(line)
|
225
|
+
end
|
226
|
+
}
|
227
|
+
lines.respond_to?(:each) ? lines.each(&block) : lines.each_line(&block)
|
228
|
+
|
229
|
+
unless action_instance.blank?
|
230
|
+
collection << action_instance
|
231
|
+
end
|
232
|
+
|
233
|
+
collection
|
234
|
+
end
|
235
|
+
|
209
236
|
end
|
210
237
|
|
211
238
|
end
|
data/lib/occi/version.rb
CHANGED
@@ -775,7 +775,7 @@ module Occi
|
|
775
775
|
collection.action = Occi::Core::ActionInstance.new
|
776
776
|
collection.resources << Occi::Core::Resource.new
|
777
777
|
collection.links << Occi::Core::Link.new
|
778
|
-
expected = "{\"
|
778
|
+
expected = "{\"actions\":[{\"scheme\":\"http://schemas.ogf.org/occi/infrastructure/compute/action#\",\"term\":\"start\",\"attributes\":{}}],\"kinds\":[{\"parent\":\"http://schemas.ogf.org/occi/core#resource\",\"related\":[\"http://schemas.ogf.org/occi/core#resource\"],\"actions\":[\"http://schemas.ogf.org/occi/infrastructure/compute/action#start\",\"http://schemas.ogf.org/occi/infrastructure/compute/action#stop\",\"http://schemas.ogf.org/occi/infrastructure/compute/action#restart\",\"http://schemas.ogf.org/occi/infrastructure/compute/action#suspend\"],\"location\":\"/compute/\",\"scheme\":\"http://schemas.ogf.org/occi/infrastructure#\",\"term\":\"compute\",\"title\":\"compute resource\",\"attributes\":{\"occi\":{\"core\":{\"id\":{\"type\":\"string\",\"required\":false,\"mutable\":false,\"pattern\":\"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\"},\"title\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"summary\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"}},\"compute\":{\"architecture\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\"x86|x64\"},\"cores\":{\"type\":\"number\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"hostname\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\"(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\\\-]*[a-zA-Z0-9])\\\\.)*\"},\"memory\":{\"type\":\"number\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"speed\":{\"type\":\"number\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"state\":{\"default\":\"inactive\",\"type\":\"string\",\"required\":false,\"mutable\":false,\"pattern\":\"inactive|active|suspended|error\"}}}}}],\"links\":[{\"kind\":\"http://schemas.ogf.org/occi/core#link\",\"attributes\":{\"occi\":{\"core\":{\"id\":\"#{collection.links.first.id}\"}}},\"id\":\"#{collection.links.first.id}\",\"rel\":\"http://schemas.ogf.org/occi/core#link\"}],\"mixins\":[{\"location\":\"/mixin/my_mixin/\",\"scheme\":\"http://example.com/occi/tags#\",\"term\":\"my_mixin\",\"attributes\":{}}],\"resources\":[{\"kind\":\"http://schemas.ogf.org/occi/core#resource\",\"attributes\":{\"occi\":{\"core\":{\"id\":\"#{collection.resources.first.id}\"}}},\"id\":\"#{collection.resources.first.id}\"}]}"
|
779
779
|
|
780
780
|
hash=Hashie::Mash.new(JSON.parse(expected))
|
781
781
|
expect(collection.as_json).to eql(hash)
|
@@ -794,7 +794,7 @@ module Occi
|
|
794
794
|
collection.actions << "http://schemas.ogf.org/occi/infrastructure/compute/action#start"
|
795
795
|
collection.action = Occi::Core::ActionInstance.new
|
796
796
|
collection.links << Occi::Core::Link.new
|
797
|
-
expected = "{\"
|
797
|
+
expected = "{\"actions\":[{\"scheme\":\"http://schemas.ogf.org/occi/infrastructure/compute/action#\",\"term\":\"start\",\"attributes\":{}}],\"kinds\":[{\"parent\":\"http://schemas.ogf.org/occi/core#resource\",\"related\":[\"http://schemas.ogf.org/occi/core#resource\"],\"actions\":[\"http://schemas.ogf.org/occi/infrastructure/compute/action#start\",\"http://schemas.ogf.org/occi/infrastructure/compute/action#stop\",\"http://schemas.ogf.org/occi/infrastructure/compute/action#restart\",\"http://schemas.ogf.org/occi/infrastructure/compute/action#suspend\"],\"location\":\"/compute/\",\"scheme\":\"http://schemas.ogf.org/occi/infrastructure#\",\"term\":\"compute\",\"title\":\"compute resource\",\"attributes\":{\"occi\":{\"core\":{\"id\":{\"type\":\"string\",\"required\":false,\"mutable\":false,\"pattern\":\"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\"},\"title\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"summary\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"}},\"compute\":{\"architecture\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\"x86|x64\"},\"cores\":{\"type\":\"number\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"hostname\":{\"type\":\"string\",\"required\":false,\"mutable\":true,\"pattern\":\"(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\\\-]*[a-zA-Z0-9])\\\\.)*\"},\"memory\":{\"type\":\"number\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"speed\":{\"type\":\"number\",\"required\":false,\"mutable\":true,\"pattern\":\".*\"},\"state\":{\"default\":\"inactive\",\"type\":\"string\",\"required\":false,\"mutable\":false,\"pattern\":\"inactive|active|suspended|error\"}}}}}],\"links\":[{\"kind\":\"http://schemas.ogf.org/occi/core#link\",\"attributes\":{\"occi\":{\"core\":{\"id\":\"#{collection.links.first.id}\"}}},\"id\":\"#{collection.links.first.id}\",\"rel\":\"http://schemas.ogf.org/occi/core#link\"}],\"mixins\":[{\"location\":\"/mixin/my_mixin/\",\"scheme\":\"http://example.com/occi/tags#\",\"term\":\"my_mixin\",\"attributes\":{}}]}"
|
798
798
|
|
799
799
|
hash=Hashie::Mash.new(JSON.parse(expected))
|
800
800
|
expect(collection.as_json).to eql(hash)
|
@@ -40,28 +40,28 @@ module Occi
|
|
40
40
|
expect { Occi::Core::ActionInstance.new nil }.to raise_error(ArgumentError)
|
41
41
|
end
|
42
42
|
|
43
|
-
it '
|
44
|
-
expect { Occi::Core::ActionInstance.new action, nil }.
|
43
|
+
it 'does not fail without attributes' do
|
44
|
+
expect { Occi::Core::ActionInstance.new action, nil }.not_to raise_error(ArgumentError)
|
45
45
|
end
|
46
46
|
|
47
|
-
it 'with an Occi::Core::Action instance' do
|
47
|
+
it 'does not fail with an Occi::Core::Action instance' do
|
48
48
|
expect { Occi::Core::ActionInstance.new action }.not_to raise_error
|
49
49
|
end
|
50
50
|
|
51
|
-
it 'with a valid action type identifier' do
|
51
|
+
it 'does not fail with a valid action type identifier' do
|
52
52
|
expect { Occi::Core::ActionInstance.new action_string }.not_to raise_error
|
53
53
|
end
|
54
54
|
|
55
|
-
it 'with an invalid action type identifier' do
|
55
|
+
it 'fails with an invalid action type identifier' do
|
56
56
|
expect { Occi::Core::ActionInstance.new action_string_invalid }.to raise_error(ArgumentError)
|
57
57
|
end
|
58
58
|
|
59
|
-
it 'with an Occi::Core::Attributes instance' do
|
59
|
+
it 'does not fail with an Occi::Core::Attributes instance' do
|
60
60
|
expect { Occi::Core::ActionInstance.new action, attributes }.not_to raise_error
|
61
61
|
end
|
62
62
|
|
63
|
-
it 'with un-convertable attribute values' do
|
64
|
-
expect { Occi::Core::ActionInstance.new action, attributes_unconvertable}.
|
63
|
+
it 'does not fail with un-convertable attribute values' do
|
64
|
+
expect { Occi::Core::ActionInstance.new action, attributes_unconvertable}.not_to raise_error(ArgumentError)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -93,7 +93,7 @@ module Occi
|
|
93
93
|
it 'renders to text w/ an attribute' do
|
94
94
|
expected = %Q|Category: action;scheme="http://schemas.ogf.org/occi/core#";class="action"
|
95
95
|
X-OCCI-Attribute: occi.core.title="test"|
|
96
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_one).to_text).to eq(expected)
|
96
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_one.to_hash).to_text).to eq(expected)
|
97
97
|
end
|
98
98
|
|
99
99
|
it 'renders to text w/ attributes' do
|
@@ -101,12 +101,12 @@ X-OCCI-Attribute: occi.core.title="test"|
|
|
101
101
|
X-OCCI-Attribute: occi.core.title="test"
|
102
102
|
X-OCCI-Attribute: occi.core.id="1"
|
103
103
|
X-OCCI-Attribute: org.opennebula.network.id=1|
|
104
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_multi).to_text).to eq(expected)
|
104
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_multi.to_hash).to_text).to eq(expected)
|
105
105
|
end
|
106
106
|
|
107
107
|
it 'renders to text w/ a nil attribute' do
|
108
108
|
expected = "Category: action;scheme=\"http://schemas.ogf.org/occi/core#\";class=\"action\""
|
109
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_wnil).to_text).to eq(expected)
|
109
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_wnil.to_hash).to_text).to eq(expected)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
@@ -121,7 +121,7 @@ X-OCCI-Attribute: org.opennebula.network.id=1|
|
|
121
121
|
"Category" => "action;scheme=\"http://schemas.ogf.org/occi/core#\";class=\"action\"",
|
122
122
|
"X-OCCI-Attribute" => "occi.core.title=\"test\""
|
123
123
|
}
|
124
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_one).to_header).to eq(expected)
|
124
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_one.to_hash).to_header).to eq(expected)
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'renders to hash w/ attributes' do
|
@@ -129,12 +129,12 @@ X-OCCI-Attribute: org.opennebula.network.id=1|
|
|
129
129
|
"Category" => "action;scheme=\"http://schemas.ogf.org/occi/core#\";class=\"action\"",
|
130
130
|
"X-OCCI-Attribute" => "occi.core.title=\"test\",occi.core.id=\"1\",org.opennebula.network.id=1"
|
131
131
|
}
|
132
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_multi).to_header).to eq(expected)
|
132
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_multi.to_hash).to_header).to eq(expected)
|
133
133
|
end
|
134
134
|
|
135
135
|
it 'renders to hash w/ a nil attribute' do
|
136
136
|
expected = {"Category" => "action;scheme=\"http://schemas.ogf.org/occi/core#\";class=\"action\""}
|
137
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_wnil).to_header).to eq(expected)
|
137
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_wnil.to_hash).to_header).to eq(expected)
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
@@ -176,7 +176,7 @@ X-OCCI-Attribute: org.opennebula.network.id=1|
|
|
176
176
|
expected.action = "http://schemas.ogf.org/occi/core#action"
|
177
177
|
expected.attributes = {"occi" => {"core" => {"title" => "test"}}}
|
178
178
|
|
179
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_one).as_json).to eq(expected)
|
179
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_one.to_hash).as_json).to eq(expected)
|
180
180
|
end
|
181
181
|
|
182
182
|
it 'renders to Hashie::Mash w/ attributes' do
|
@@ -187,7 +187,7 @@ X-OCCI-Attribute: org.opennebula.network.id=1|
|
|
187
187
|
"org" => {"opennebula" => {"network" => {"id" => 1}}}
|
188
188
|
}
|
189
189
|
|
190
|
-
expect(Occi::Core::ActionInstance.new(action, attributes_multi).as_json).to eq(expected)
|
190
|
+
expect(Occi::Core::ActionInstance.new(action, attributes_multi.to_hash).as_json).to eq(expected)
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
data/spec/occi/parser_spec.rb
CHANGED
@@ -170,7 +170,7 @@ module Occi
|
|
170
170
|
|
171
171
|
it 'fails gracefully for unknown entity type' do
|
172
172
|
resource_string = File.open("spec/occi/parser/text_samples/occi_network_rocci_server.text", "rb").read
|
173
|
-
expect{ Occi::Parser.parse('text/plain', resource_string, false, Occi::Core::
|
173
|
+
expect{ Occi::Parser.parse('text/plain', resource_string, false, Occi::Core::Action) }.to raise_error(Occi::Errors::ParserTypeError)
|
174
174
|
end
|
175
175
|
end
|
176
176
|
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: occi-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.5
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Florian Feldhaus
|
@@ -10,11 +11,12 @@ authors:
|
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date: 2014-01-
|
14
|
+
date: 2014-01-09 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: json
|
17
18
|
requirement: !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
18
20
|
requirements:
|
19
21
|
- - ! '>='
|
20
22
|
- !ruby/object:Gem::Version
|
@@ -22,6 +24,7 @@ dependencies:
|
|
22
24
|
type: :runtime
|
23
25
|
prerelease: false
|
24
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
25
28
|
requirements:
|
26
29
|
- - ! '>='
|
27
30
|
- !ruby/object:Gem::Version
|
@@ -29,6 +32,7 @@ dependencies:
|
|
29
32
|
- !ruby/object:Gem::Dependency
|
30
33
|
name: hashie
|
31
34
|
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
32
36
|
requirements:
|
33
37
|
- - ! '>='
|
34
38
|
- !ruby/object:Gem::Version
|
@@ -36,6 +40,7 @@ dependencies:
|
|
36
40
|
type: :runtime
|
37
41
|
prerelease: false
|
38
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
39
44
|
requirements:
|
40
45
|
- - ! '>='
|
41
46
|
- !ruby/object:Gem::Version
|
@@ -43,6 +48,7 @@ dependencies:
|
|
43
48
|
- !ruby/object:Gem::Dependency
|
44
49
|
name: uuidtools
|
45
50
|
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
46
52
|
requirements:
|
47
53
|
- - ! '>='
|
48
54
|
- !ruby/object:Gem::Version
|
@@ -50,6 +56,7 @@ dependencies:
|
|
50
56
|
type: :runtime
|
51
57
|
prerelease: false
|
52
58
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
53
60
|
requirements:
|
54
61
|
- - ! '>='
|
55
62
|
- !ruby/object:Gem::Version
|
@@ -57,6 +64,7 @@ dependencies:
|
|
57
64
|
- !ruby/object:Gem::Dependency
|
58
65
|
name: nokogiri
|
59
66
|
requirement: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
60
68
|
requirements:
|
61
69
|
- - ~>
|
62
70
|
- !ruby/object:Gem::Version
|
@@ -64,6 +72,7 @@ dependencies:
|
|
64
72
|
type: :runtime
|
65
73
|
prerelease: false
|
66
74
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
67
76
|
requirements:
|
68
77
|
- - ~>
|
69
78
|
- !ruby/object:Gem::Version
|
@@ -71,6 +80,7 @@ dependencies:
|
|
71
80
|
- !ruby/object:Gem::Dependency
|
72
81
|
name: activesupport
|
73
82
|
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
74
84
|
requirements:
|
75
85
|
- - ~>
|
76
86
|
- !ruby/object:Gem::Version
|
@@ -78,6 +88,7 @@ dependencies:
|
|
78
88
|
type: :runtime
|
79
89
|
prerelease: false
|
80
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
81
92
|
requirements:
|
82
93
|
- - ~>
|
83
94
|
- !ruby/object:Gem::Version
|
@@ -85,6 +96,7 @@ dependencies:
|
|
85
96
|
- !ruby/object:Gem::Dependency
|
86
97
|
name: settingslogic
|
87
98
|
requirement: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
88
100
|
requirements:
|
89
101
|
- - ! '>='
|
90
102
|
- !ruby/object:Gem::Version
|
@@ -92,6 +104,7 @@ dependencies:
|
|
92
104
|
type: :runtime
|
93
105
|
prerelease: false
|
94
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
95
108
|
requirements:
|
96
109
|
- - ! '>='
|
97
110
|
- !ruby/object:Gem::Version
|
@@ -245,25 +258,29 @@ files:
|
|
245
258
|
homepage: https://github.com/gwdg/rOCCI-core
|
246
259
|
licenses:
|
247
260
|
- Apache License, Version 2.0
|
248
|
-
metadata: {}
|
249
261
|
post_install_message:
|
250
262
|
rdoc_options: []
|
251
263
|
require_paths:
|
252
264
|
- lib
|
253
265
|
required_ruby_version: !ruby/object:Gem::Requirement
|
266
|
+
none: false
|
254
267
|
requirements:
|
255
268
|
- - ! '>='
|
256
269
|
- !ruby/object:Gem::Version
|
257
270
|
version: 1.9.3
|
258
271
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
272
|
+
none: false
|
259
273
|
requirements:
|
260
274
|
- - ! '>='
|
261
275
|
- !ruby/object:Gem::Version
|
262
276
|
version: '0'
|
277
|
+
segments:
|
278
|
+
- 0
|
279
|
+
hash: -1899763597318893191
|
263
280
|
requirements: []
|
264
281
|
rubyforge_project:
|
265
|
-
rubygems_version:
|
282
|
+
rubygems_version: 1.8.25
|
266
283
|
signing_key:
|
267
|
-
specification_version:
|
284
|
+
specification_version: 3
|
268
285
|
summary: OCCI toolkit
|
269
286
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ZDU3NTg4MzhjZGYyMGI0N2Y3M2ViYmRmMTA2ZWI5OWY3YjYwMzcxZA==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
OGRmNTk3NmIwZGUwNWQ3ZTlhN2Y4YjA4NDU4MzJkMmIxZDg4NDExMA==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
N2E0MTUzMTlmZDlhYzZjYzZjOGZmYjgxNjZlZmY5NzA4NDk5ZmMyOWY0ZmJm
|
10
|
-
ODlkMzJlM2IyN2IzMjI1ODI3NDdjYWI3YTI5OWY0Y2QxYzdjZWUyYTgyN2Uz
|
11
|
-
MmQ4YTU1ZWFhNDlhN2IzNjUwYmRkZDJjZDUxYjRjYmVjZDg3OWM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZWNlMTdkYWYwMmNiNzZiZjRjYTExOTFjYzA1OTg2ODgyZjQ0M2UyZDk4Y2Q3
|
14
|
-
ZDg4MmJiYjFjYmU3YWIwYzcyOTdmNDIwOGM4YjNlMmYxNjBhODMwZTczOTI1
|
15
|
-
ZWJkN2EzMzUwZDJiMjBkZWFmM2ZiYjk0MjFmYmNkYTJkMjZkYTI=
|