occi 2.5.11 → 2.5.12

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.
@@ -6,7 +6,7 @@ module OCCI
6
6
  module Core
7
7
  class Link < Entity
8
8
 
9
- attr_accessor :rel
9
+ attr_accessor :rel, :source, :target
10
10
 
11
11
  # @return [OCCI::Core::Kind] kind definition of Link type
12
12
  def self.kind_definition
@@ -30,32 +30,40 @@ module OCCI
30
30
 
31
31
  # @param [String] kind
32
32
  # @param [String] mixins
33
- # @param [OCCI::Core::Attributes] attributes
34
- def initialize(kind, mixins=nil, attributes=nil, actions=nil, rel=nil)
33
+ # @param [Occi::Core::Attributes] attributes
34
+ # @param [Array] actions
35
+ # @param [String] rel
36
+ # @param [String,OCCI::Core::Entity] target
37
+ # @param [String,OCCI::Core::Entity] source
38
+ def initialize(kind, mixins=[], attributes={ }, actions=[], rel=nil, target=nil, source=nil)
35
39
  super(kind,mixins,attributes,actions)
36
- @rel = rel
40
+ @rel = rel if rel
41
+ self.source = source if source
42
+ self.target = target
37
43
  end
38
44
 
39
45
  # @return [String] target attribute of the link
40
46
  def target
41
- self.attributes.occi!.core!.target
47
+ @target ||= self.attributes.occi.core.target if @attributes.occi.core if @attributes.occi
48
+ @target
42
49
  end
43
50
 
44
51
  # set target attribute of link
45
52
  # @param [String] target
46
- def target=(target)
47
- self.attributes.occi!.core!.target = target
53
+ def target=(resource)
54
+ @target = resource
48
55
  end
49
56
 
50
57
  # @return [String] source attribute of the link
51
58
  def source
52
- self.attributes.occi!.core!.source
59
+ @source ||= self.attributes.occi.core.source if @attributes.occi.core if @attributes.occi
60
+ @source
53
61
  end
54
62
 
55
63
  # set source attribute of link
56
64
  # @param [String] source
57
- def source=(source)
58
- self.attributes.occi!.core!.source = source
65
+ def source=(resource)
66
+ @source = resource
59
67
  end
60
68
 
61
69
  # @param [OCCI::Model] model
@@ -67,11 +75,10 @@ module OCCI
67
75
  # @param [Hash] options
68
76
  # @return [Hashie::Mash] json representation
69
77
  def as_json(options={ })
70
- link = Hashie::Mash.new
71
- link.kind = @kind if @kind
78
+ link = super
72
79
  link.rel = @rel if @rel
73
- link.mixins = @mixins if @mixins.any?
74
- link.attributes = @attributes if @attributes.any?
80
+ link.source = self.source.to_s if self.source.kind_of? String if self.source
81
+ link.target = self.target.to_s if self.target
75
82
  link
76
83
  end
77
84
 
@@ -28,8 +28,8 @@ module OCCI
28
28
  # @param [Array] mixins
29
29
  # @param [OCCI::Core::Attributes,Hash] attributes
30
30
  # @param [Array] links
31
- def initialize(kind, mixins=nil, attributes=nil, links=nil)
32
- super(kind, mixins, attributes)
31
+ def initialize(kind, mixins=[], attributes={ }, actions=[], links=[])
32
+ super(kind, mixins, attributes, actions)
33
33
  @links = []
34
34
  links.to_a.each do |link|
35
35
  link = OCCI::Core::Link.new(link.kind,link.mixins,link.attributes,link.actions,link.rel) unless link.kind_of? OCCI::Core::Link
data/lib/occi/parser.rb CHANGED
@@ -24,7 +24,7 @@ module OCCI
24
24
 
25
25
  case media_type
26
26
  when 'text/uri-list'
27
- body.each_line { |line| locations << URI.parse(line) }
27
+ body.each_line { |line| locations << URI.parse(line.chomp) }
28
28
  when 'text/occi'
29
29
  nil
30
30
  when 'text/plain', nil
@@ -77,7 +77,13 @@ module OCCI
77
77
  return collection if category_strings.empty?
78
78
  attribute_strings = header['HTTP_X_OCCI_ATTRIBUTE'].to_s.split(',')
79
79
  categories = Hashie::Mash.new({ :kinds => [], :mixins => [], :actions => [] })
80
- category_strings.each { |cat| categories.merge!(OCCIANTLR::Parser.new('Category: ' + cat).category) }
80
+ category_strings.each do |category|
81
+ cat = OCCIANTLR::Parser.new('Category: ' + category).category
82
+ categories.kinds.concat cat.kinds
83
+ categories.mixins.concat cat.mixins
84
+ categories.actions.concat cat.actions
85
+ end
86
+
81
87
  return collection if categories.kinds.empty?
82
88
  entity.kind = categories.kinds.first.scheme + categories.kinds.first.term
83
89
  entity.mixins = categories.mixins.collect { |mixin| mixin.scheme + mixin.term } if categories.mixins.any?
@@ -85,16 +91,29 @@ module OCCI
85
91
  if entity_type == OCCI::Core::Link
86
92
  entity.target = link.attributes!.occi!.core!.target
87
93
  entity.source = link.attributes!.occi!.core!.source
88
- collection.links << OCCI::Core::Link.new(entity.kind, entity.mixins, entity.attributes)
94
+ cats = entity.categories.split(' ')
95
+ kind = cats.reverse!.pop
96
+ mixins = cats.categories
97
+ collection.links << OCCI::Core::Link.new(kind, mixins, entity.attributes)
89
98
  elsif entity_type == OCCI::Core::Resource
90
99
  entity.links = []
91
100
  link_strings = header['HTTP_LINK'].to_s.split(',')
92
101
  link_strings.each do |link_string|
93
- link = OCCIANTLR::Parser.new('Link: ' + link_string).link
94
- link.attributes!.occi!.core!.target = link.target
95
- entity.links << OCCI::Core::Link.new(link.kind, link.mixins, link.attributes, link.actions, link.rel)
102
+ link = OCCIANTLR::Parser.new('Link: ' + link_string).link
103
+ if link.rel.include? 'action#'
104
+ entity.actions = link.rel + entity.actions.to_a
105
+ else
106
+ link.attributes!.occi!.core!.target = link.target
107
+
108
+ link.category ||= 'http://schemas.ogf.org/occi/core#link'
109
+ cats = link.category.split(' ')
110
+ kind = cats.reverse!.pop
111
+ mixins = cats
112
+
113
+ entity.links << OCCI::Core::Link.new(kind, mixins, link.attributes, link.actions, link.rel, link.target, link.source)
114
+ end
96
115
  end
97
- collection.resources << OCCI::Core::Resource.new(entity.kind, entity.mixins, entity.attributes, entity.links)
116
+ collection.resources << OCCI::Core::Resource.new(entity.kind, entity.mixins, entity.attributes, entity.actions, entity.links)
98
117
  end
99
118
  collection
100
119
  end
@@ -102,7 +121,7 @@ module OCCI
102
121
  # @param [String] text
103
122
  # @return [Array] list of URIs
104
123
  def self.text_locations(text)
105
- text.lines.collect { |line| OCCIANTLR::Parser.new(line).x_occi_location if line.include? 'X-OCCI-Location' }.compact
124
+ text.lines.collect { |line| OCCIANTLR::Parser.new(line.chomp).x_occi_location if line.include? 'X-OCCI-Location' }.compact
106
125
  end
107
126
 
108
127
  # @param [String] text
@@ -110,7 +129,7 @@ module OCCI
110
129
  def self.text_categories(text)
111
130
  collection = OCCI::Collection.new
112
131
  text.each_line do |line|
113
- category = OCCIANTLR::Parser.new(line).category
132
+ category = OCCIANTLR::Parser.new(line.chomp).category
114
133
  next if category.nil?
115
134
  collection.kinds.concat category.kinds.collect { |kind| OCCI::Core::Kind.new(kind.scheme, kind.term, kind.title, kind.attributes, kind.related, kind.actions) }
116
135
  collection.mixins.concat category.mixins.collect { |mixin| OCCI::Core::Mixin.new(mixin.scheme, mixin.term, mixin.title, mixin.attributes, mixin.related, mixin.actions) }
@@ -128,19 +147,41 @@ module OCCI
128
147
  links = []
129
148
  categories = Hashie::Mash.new({ :kinds => [], :mixins => [], :actions => [] })
130
149
  text.each_line do |line|
131
- categories.merge!(OCCIANTLR::Parser.new(line).category) if line.include? 'Category'
132
- entity.attributes!.merge!(OCCIANTLR::Parser.new(line).x_occi_attribute) if line.include? 'X-OCCI-Attribute'
133
- links << OCCIANTLR::Parser.new(line).link if line.include? 'Link'
150
+ if line.include? 'Category'
151
+ cat = (OCCIANTLR::Parser.new(line.chomp).category)
152
+ categories.kinds.concat cat.kinds
153
+ categories.mixins.concat cat.mixins
154
+ categories.actions.concat cat.actions
155
+ end
156
+ entity.attributes!.merge!(OCCIANTLR::Parser.new(line.chomp).x_occi_attribute) if line.include? 'X-OCCI-Attribute'
157
+ links << OCCIANTLR::Parser.new(line.chomp).link if line.include? 'Link'
134
158
  end
135
159
  entity.kind = categories.kinds.first.scheme + categories.kinds.first.term if categories.kinds.first
136
- entity.mixins = categories.mixins.collect { |mixin| mixin.scheme + mixin.term } if entity.mixins
160
+ entity.mixins = categories.mixins.collect { |mixin| mixin.scheme + mixin.term } if categories.mixins
137
161
  if entity_type == OCCI::Core::Link
138
162
  entity.target = links.first.attributes!.occi!.core!.target
139
163
  entity.source = links.first.attributes!.occi!.core!.source
164
+ cats = entity.categories.split(' ')
165
+ kind = cats.reverse!.pop
166
+ mixins = cats.categories
140
167
  collection.links << OCCI::Core::Link.new(entity.kind, entity.mixins, entity.attributes)
141
168
  elsif entity_type == OCCI::Core::Resource
142
- entity.links = links.collect { |link| link.attributes!.occi!.core!.target = link.target; OCCI::Core::Link.new(link.kind, link.mixins, link.attributes, link.actions, link.rel) }
143
- collection.resources << OCCI::Core::Resource.new(entity.kind, entity.mixins, entity.attributes, entity.links)
169
+ links.each do |link|
170
+ if link.rel.include? 'action#'
171
+ entity.actions = [link.rel] + entity.actions.to_a
172
+ else
173
+ link.attributes!.occi!.core!.target = link.target
174
+ link.category ||= 'http://schemas.ogf.org/occi/core#link'
175
+ cats = link.category.split(' ')
176
+ kind = cats.reverse!.pop
177
+ mixins = cats
178
+
179
+ link = OCCI::Core::Link.new(kind, mixins, link.attributes, link.actions, link.rel, link.target, link.source)
180
+ collection.links << link
181
+ entity.links = [link.id] + entity.links.to_a
182
+ end
183
+ end
184
+ collection.resources << OCCI::Core::Resource.new(entity.kind, entity.mixins, entity.attributes, entity.actions, entity.links)
144
185
  end unless entity.kind.nil?
145
186
  collection
146
187
  end
@@ -152,7 +193,7 @@ module OCCI
152
193
  hash = Hashie::Mash.new(JSON.parse(json))
153
194
  collection.kinds.concat hash.kinds.collect { |kind| OCCI::Core::Kind.new(kind.scheme, kind.term, kind.title, kind.attributes, kind.related, kind.actions) } if hash.kinds
154
195
  collection.mixins.concat hash.mixins.collect { |mixin| OCCI::Core::Mixin.new(mixin.scheme, mixin.term, mixin.title, mixin.attributes, mixin.related, mixin.actions) } if hash.mixins
155
- collection.resources.concat hash.resources.collect { |resource| OCCI::Core::Resource.new(resource.kind, resource.mixins, resource.attributes, resource.links) } if hash.resources
196
+ collection.resources.concat hash.resources.collect { |resource| OCCI::Core::Resource.new(resource.kind, resource.mixins, resource.attributes, resource.actions, resource.links) } if hash.resources
156
197
  collection.links.concat hash.links.collect { |link| OCCI::Core::Link.new(link.kind, link.mixins, link.attributes) } if hash.links
157
198
  collection
158
199
  end
@@ -164,7 +205,7 @@ module OCCI
164
205
  hash = Hashie::Mash.new(Hash.from_xml(Nokogiri::XML(xml)))
165
206
  collection.kinds.concat hash.kinds.collect { |kind| OCCI::Core::Kind.new(kind.scheme, kind.term, kind.title, kind.attributes, kind.related, kind.actions) } if hash.kinds
166
207
  collection.mixins.concat hash.mixins.collect { |mixin| OCCI::Core::Mixin.new(mixin.scheme, mixin.term, mixin.title, mixin.attributes, mixin.related, mixin.actions) } if hash.mixins
167
- collection.resources.concat hash.resources.collect { |resource| OCCI::Core::Resource.new(resource.kind, resource.mixins, resource.attributes, resource.links) } if hash.resources
208
+ collection.resources.concat hash.resources.collect { |resource| OCCI::Core::Resource.new(resource.kind, resource.mixins, resource.attributes, resource.actions, resource.links) } if hash.resources
168
209
  collection.links.concat hash.links.collect { |link| OCCI::Core::Link.new(link.kind, link.mixins, link.attributes) } if hash.links
169
210
  collection
170
211
  end
data/lib/occi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OCCI
2
- VERSION = "2.5.11" unless defined?(::OCCI::VERSION)
2
+ VERSION = "2.5.12" unless defined?(::OCCI::VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: occi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.11
4
+ version: 2.5.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-09-13 00:00:00.000000000 Z
13
+ date: 2012-12-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -248,15 +248,5 @@ rubygems_version: 1.8.24
248
248
  signing_key:
249
249
  specification_version: 3
250
250
  summary: OCCI toolkit
251
- test_files:
252
- - spec/occi/client_spec.rb
253
- - spec/occi/collection_spec.rb
254
- - spec/occi/log_spec.rb
255
- - spec/occi/model_spec.rb
256
- - spec/occi/parser_spec.rb
257
- - spec/occi/test.json
258
- - spec/occi/test.ova
259
- - spec/occi/test.ovf
260
- - spec/occiantlr/parser_spec.rb
261
- - spec/spec_helper.rb
251
+ test_files: []
262
252
  has_rdoc: