occi 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -41,7 +41,7 @@ module OCCI
41
41
  @kinds.empty? && @mixins.empty? && @actions.empty? && @resources.empty? && @links.empty?
42
42
  end
43
43
 
44
- # @return [Hashie::Mash] returns collection as Hashie::Mash which can be converted to json
44
+ # @return [Hashie::Mash] json representation
45
45
  def as_json(options = { })
46
46
  collection = Hashie::Mash.new
47
47
  collection.kinds = @kinds.collect { |kind| kind.as_json } if @kinds.any?
@@ -52,13 +52,18 @@ module OCCI
52
52
  collection
53
53
  end
54
54
 
55
+ # @return [String] text representation
55
56
  def to_text
56
- body = ""
57
- body << self.categories.collect { |category| category.to_text }.join("\n")
58
- body << "\n" if self.categories.any?
59
- raise "Only one entity allowed for rendering to plain text" if body.entities.size > 1
60
- body << self.entities.collect {|entity| entity.to_text}.join("\n")
61
- body
57
+ text = ""
58
+ text << self.categories.collect { |category| category.to_text }.join("\n")
59
+ text << "\n" if self.categories.any?
60
+ raise "Only one entity allowed for rendering to plain text" if self.entities.size > 1
61
+ text << self.entities.collect {|entity| entity.to_text}.join("\n")
62
+ text
63
+ end
64
+
65
+ def inspect
66
+ JSON.pretty_generate(JSON.parse(to_json))
62
67
  end
63
68
 
64
69
  end
@@ -4,6 +4,7 @@ module OCCI
4
4
  module Core
5
5
  class Action < OCCI::Core::Category
6
6
 
7
+ # @return [String] text representation
7
8
  def to_text
8
9
  text = super
9
10
  text << ';attributes=' + @attributes.combine.join(' ').inspect if @attributes.any?
@@ -4,6 +4,8 @@ module OCCI
4
4
  module Core
5
5
  class AttributeProperties < Hashie::Mash
6
6
 
7
+ # @param [Hashie::Mash] attributes
8
+ # @param [Hash] default
7
9
  def initialize(attributes = nil, default = nil)
8
10
  if [:Type, :Required, :Mutable, :Pattern, :Default, :Minimum, :Maximum, :Description].any? { |k| attributes.key?(k) }
9
11
  attributes[:Type] ||= "string"
@@ -14,12 +16,10 @@ module OCCI
14
16
  super(attributes, default)
15
17
  end
16
18
 
19
+ # @return [Array] list of full attribute names
17
20
  def combine
18
21
  array = []
19
22
  self.each_key do |key|
20
- #puts "Key :#{key}"
21
- #puts self[key].keys
22
- #puts self[key].key? 'type'
23
23
  if self[key].key? 'Type'
24
24
  array << key
25
25
  else
@@ -30,6 +30,8 @@ module OCCI
30
30
  array
31
31
  end
32
32
 
33
+
34
+ # @return [Hash] key value pairs of attribute names with their defaults set
33
35
  def combine_with_defaults
34
36
  hash = { }
35
37
  self.each_key do |key|
@@ -56,6 +58,7 @@ module OCCI
56
58
  end
57
59
  end
58
60
 
61
+ # Overrides method of hashie mash to check if one of the attribute properties has been set
59
62
  def method_missing(method_name, *args, &blk)
60
63
  return self.[](method_name, &blk) if key?(method_name)
61
64
  match = method_name.to_s.match(/(.*?)([?=!]?)$/)
@@ -91,6 +94,10 @@ module OCCI
91
94
  end
92
95
  end
93
96
 
97
+ def inspect
98
+ JSON.pretty_generate(JSON.parse(to_json))
99
+ end
100
+
94
101
  end
95
102
  end
96
103
  end
@@ -4,7 +4,8 @@ module OCCI
4
4
  module Core
5
5
  class Attributes < Hashie::Mash
6
6
 
7
- def combine
7
+ # @return [Array] key value pair of full attribute names with their corresponding values
8
+ def combine
8
9
  hash = { }
9
10
  self.each_key do |key|
10
11
  if self[key].kind_of? OCCI::Core::Attributes
@@ -16,7 +17,9 @@ module OCCI
16
17
  hash
17
18
  end
18
19
 
19
- def self.split(attributes)
20
+ # @param [Hash] attributes key value pair of full attribute names with their corresponding values
21
+ # @return [OCCI::Core::Attributes]
22
+ def self.split(attributes)
20
23
  attribute = Attributes.new
21
24
  attributes.each do |name,value|
22
25
  puts name
@@ -31,5 +34,10 @@ module OCCI
31
34
  end
32
35
 
33
36
  end
37
+
38
+ def inspect
39
+ JSON.pretty_generate(JSON.parse(to_json))
40
+ end
41
+
34
42
  end
35
43
  end
@@ -34,6 +34,8 @@ module OCCI
34
34
  false
35
35
  end
36
36
 
37
+ # @param [Hash] options
38
+ # @return [Hashie::Mash] json representation
37
39
  def as_json(options={ })
38
40
  category = Hashie::Mash.new
39
41
  category.scheme = @scheme if @scheme
@@ -43,12 +45,17 @@ module OCCI
43
45
  category
44
46
  end
45
47
 
48
+ # @return [String] text representation
46
49
  def to_text
47
50
  text = @term + ';scheme=' + @scheme.inspect + ';class=' + self.class.name.demodulize.downcase.inspect
48
51
  text << ';title=' + @title.inspect if @title
49
52
  text
50
53
  end
51
54
 
55
+ def inspect
56
+ JSON.pretty_generate(JSON.parse(to_json))
57
+ end
58
+
52
59
  end
53
60
  end
54
61
  end
@@ -39,29 +39,25 @@ module OCCI
39
39
  def initialize(kind, mixins=nil, attributes=nil, actions=nil)
40
40
  @checked = false
41
41
  raise "Kind #{kind} not of type String" unless kind.kind_of? String
42
- @kind = kind
43
- @mixins = mixins.to_a
44
- @attributes = OCCI::Core::Attributes.new(attributes)
45
- @actions = actions.to_a
46
- self.id = UUIDTools::UUID.timestamp_create.to_s
42
+ @kind = kind
43
+ @mixins = mixins.to_a
44
+ @attributes = OCCI::Core::Attributes.new(attributes)
45
+ @attributes.occi!.core![:id] ||= UUIDTools::UUID.random_create.to_s
46
+ @actions = actions.to_a
47
47
  end
48
48
 
49
+ # @param [Array] mixins
49
50
  def mixins=(mixins)
50
51
  @checked=false
51
52
  @mixins =mixins
52
53
  end
53
54
 
55
+ # @param [OCCI::Core::Attributes] attributes
54
56
  def attributes=(attributes)
55
57
  @checked =false
56
58
  @attributes=attributes
57
59
  end
58
60
 
59
- # set id for entity
60
- # @param [UUIDTools::UUID] id
61
- def id=(id)
62
- @attributes.occi!.core!.id = id
63
- end
64
-
65
61
  # @return [UUIDTools::UUID] id of the entity
66
62
  def id
67
63
  @attributes.occi!.core!.id
@@ -129,12 +125,13 @@ module OCCI
129
125
  attributes
130
126
  end
131
127
 
128
+ # @return [true,false]
132
129
  def checked?
133
130
  @checked && @attributes.checked?
134
131
  end
135
132
 
136
133
  # @param [Hash] options
137
- # @return [Hashie::Mash] entity as Hashie::Mash to be parsed into a JSON object
134
+ # @return [Hashie::Mash] json representation
138
135
  def as_json(options={ })
139
136
  entity = Hashie::Mash.new
140
137
  entity.kind = @kind if @kind
@@ -144,6 +141,29 @@ module OCCI
144
141
  entity
145
142
  end
146
143
 
144
+ # @return [String] text representation
145
+ def to_text
146
+ scheme, term = self.kind.split('#')
147
+ text = term + ';scheme=' + scheme.inspect + ';class="kind"' + "\n"
148
+ @mixins.each do |mixin|
149
+ scheme, term = mixin.split('#')
150
+ text << term + ';scheme=' + scheme.inspect + ';class="mixin"' + "\n"
151
+ end
152
+ @attributes.combine.each_pair do |name, value|
153
+ name = name.inspect if name.kind_of? String
154
+ text << 'X-OCCI-Attribute: ' + name + '=' + value + "\n"
155
+ end
156
+ @actions.each do |action|
157
+ _, term = mixin.split('#')
158
+ text << 'Link: <' + self.location + '?action=' + term + '>;rel=' + action.inspect + "\n"
159
+ end
160
+ text
161
+ end
162
+
163
+ def inspect
164
+ JSON.pretty_generate(JSON.parse(to_json))
165
+ end
166
+
147
167
  end
148
168
  end
149
169
  end
@@ -40,6 +40,8 @@ module OCCI
40
40
  '/' + @term + '/'
41
41
  end
42
42
 
43
+ # @param [Hash] options
44
+ # @return [Hashie::Mash] json representation
43
45
  def as_json(options={ })
44
46
  kind = Hashie::Mash.new
45
47
  kind.related = @related if @related.any?
@@ -48,6 +50,7 @@ module OCCI
48
50
  kind
49
51
  end
50
52
 
53
+ # @return [String] text representation
51
54
  def to_text
52
55
  text = super
53
56
  text << ';rel=' + @related.join(' ').inspect if @related.any?
@@ -6,7 +6,7 @@ module OCCI
6
6
  module Core
7
7
  class Link < Entity
8
8
 
9
- attr_reader :rel
9
+ attr_accessor :rel
10
10
 
11
11
  # @return [OCCI::Core::Kind] kind definition of Link type
12
12
  def self.kind_definition
@@ -28,9 +28,17 @@ module OCCI
28
28
  kind
29
29
  end
30
30
 
31
+ # @param [String] kind
32
+ # @param [String] mixins
33
+ # @param [OCCI::Core::Attributes] attributes
34
+ def initialize(kind, mixins=nil, attributes=nil, actions=nil, rel=nil)
35
+ super(kind,mixins,attributes,actions)
36
+ @rel = rel
37
+ end
38
+
31
39
  # @return [String] target attribute of the link
32
40
  def target
33
- self.attributes.occi!.core!.summary
41
+ self.attributes.occi!.core!.target
34
42
  end
35
43
 
36
44
  # set target attribute of link
@@ -50,14 +58,14 @@ module OCCI
50
58
  self.attributes.occi!.core!.source = source
51
59
  end
52
60
 
61
+ # @param [OCCI::Model] model
53
62
  def check(model)
54
- target = model.get_by_id(self.target)
55
- @rel = model.type_identifier if target.kind_of? OCCI::Core::Resource
63
+ raise "rel must be provided" unless @rel
56
64
  super(model)
57
65
  end
58
66
 
59
67
  # @param [Hash] options
60
- # @return [Hashie::Mash] link as Hashie::Mash to be parsed into a JSON object
68
+ # @return [Hashie::Mash] json representation
61
69
  def as_json(options={ })
62
70
  link = Hashie::Mash.new
63
71
  link.kind = @kind if @kind
@@ -67,6 +75,17 @@ module OCCI
67
75
  link
68
76
  end
69
77
 
78
+ # @return [String] text representation of link reference
79
+ def to_reference_text
80
+ OCCI::Log.debug "Test"
81
+ text = '<' + target + '>'
82
+ text << ';rel=' + @rel.inspect
83
+ text << ';self=' + self.location
84
+ text << ';category=' + @kind
85
+ @attributes.combine.each_pair { |name, value| text << name + '=' + value + ';' }
86
+ text
87
+ end
88
+
70
89
  end
71
90
  end
72
91
  end
@@ -25,6 +25,8 @@ module OCCI
25
25
  '/mixins/' + @term + '/'
26
26
  end
27
27
 
28
+ # @param [Hash] options
29
+ # @return [Hashie::Mash] json representation
28
30
  def as_json(options={ })
29
31
  mixin = Hashie::Mash.new
30
32
  mixin.related = @related if @related.any?
@@ -33,6 +35,7 @@ module OCCI
33
35
  mixin
34
36
  end
35
37
 
38
+ # @return [String] text representation
36
39
  def to_text
37
40
  text = super
38
41
  text << ';rel=' + @related.join(' ').inspect if @related.any?
@@ -9,11 +9,6 @@ module OCCI
9
9
 
10
10
  attr_accessor :links
11
11
 
12
- def initialize(kind, mixins=nil, attributes=nil, links=nil)
13
- @links = links.to_a
14
- super(kind, mixins, attributes)
15
- end
16
-
17
12
  # @return [OCCI::Core::Kind] kind definition of Resource type
18
13
  def self.kind_definition
19
14
  kind = OCCI::Core::Kind.new('http://schemas.ogf.org/occi/core#', 'resource')
@@ -29,9 +24,17 @@ module OCCI
29
24
  kind
30
25
  end
31
26
 
32
- def links=(links)
33
- @checked = false
34
- @links = links
27
+ # @param [String] kind
28
+ # @param [Array] mixins
29
+ # @param [OCCI::Core::Attributes,Hash] attributes
30
+ # @param [Array] links
31
+ def initialize(kind, mixins=nil, attributes=nil, links=nil)
32
+ super(kind, mixins, attributes)
33
+ @links = []
34
+ links.to_a.each do |link|
35
+ link = OCCI::Core::Link.new(link.kind,link.mixins,link.attributes,link.actions,link.rel) unless link.kind_of? OCCI::Core::Link
36
+ @links << link
37
+ end
35
38
  end
36
39
 
37
40
  # set id for resource and update the the source of all links
@@ -52,13 +55,8 @@ module OCCI
52
55
  self.attributes.occi!.core!.summary = summary
53
56
  end
54
57
 
55
- # update the source of all links before returning them
56
- # @return [Array] links of resource
57
- def links
58
- @links.each { |link| link.attributes.occi!.core!.source = self.location }
59
- @links
60
- end
61
-
58
+ # @param [Hash] options
59
+ # @return [Hashie::Mash] link as Hashie::Mash to be parsed into a JSON object
62
60
  def as_json(options={ })
63
61
  resource = Hashie::Mash.new
64
62
  resource.links = @links if @links.any?
@@ -66,6 +64,13 @@ module OCCI
66
64
  resource
67
65
  end
68
66
 
67
+ # @return [String] text representation
68
+ def to_text
69
+ text = super
70
+ @links.each { |link| text << 'Link: ' + link.to_reference_text + "\n" }
71
+ text
72
+ end
73
+
69
74
  end
70
75
  end
71
76
  end
@@ -9,13 +9,13 @@ module OCCI
9
9
  attr_reader :logger
10
10
 
11
11
  # creates a new OCCI logger
12
- # @param [IO,String] logdev The log device. This is a filename (String) or IO object (typically +STDOUT+,
12
+ # @param [IO,String] log_dev The log device. This is a filename (String) or IO object (typically +STDOUT+,
13
13
  # +STDERR+, or an open file).
14
- def initialize(logdev)
15
- if logdev.kind_of? Logger
16
- @logger = logdev
14
+ def initialize(log_dev)
15
+ if log_dev.kind_of? Logger
16
+ @logger = log_dev
17
17
  else
18
- @logger = Logger.new(logdev)
18
+ @logger = Logger.new(log_dev)
19
19
  end
20
20
 
21
21
  # subscribe to log messages and send to logger
@@ -24,10 +24,12 @@ module OCCI
24
24
  end
25
25
  end
26
26
 
27
+ # @param [Logger::Severity] severity
27
28
  def level=(severity)
28
29
  @logger.level = severity
29
30
  end
30
31
 
32
+ # @return [Logger::Severity]
31
33
  def level
32
34
  @logger.level
33
35
  end
@@ -6,11 +6,12 @@ module OCCI
6
6
  attr_accessor :categories
7
7
  attr_accessor :locations
8
8
 
9
+ # @param [OCCI::Core::Collection] collection
9
10
  def initialize(collection=nil)
10
11
  @categories = { }
11
12
  @locations = { }
12
13
  register_core
13
- register_collection collection if collection
14
+ register_collection collection if collection.kind_of? OCCI::Collection
14
15
  end
15
16
 
16
17
  # register OCCI Core categories enitity, resource and link
@@ -49,11 +50,12 @@ module OCCI
49
50
  collection.categories.each { |category| register category }
50
51
  end
51
52
 
53
+ # clear all entities from all categories
52
54
  def reset()
53
55
  @categories.each_value.each { |category| category.entities = [] if category.respond_to? :entities }
54
56
  end
55
57
 
56
- # ---------------------------------------------------------------------------------------------------------------------
58
+ # @param [OCCI::Core::Category] category
57
59
  def register(category)
58
60
  OCCI::Log.debug "### Registering category #{category.type_identifier}"
59
61
  @categories[category.type_identifier] = category
@@ -62,7 +64,7 @@ module OCCI
62
64
  category.model = self
63
65
  end
64
66
 
65
- # ---------------------------------------------------------------------------------------------------------------------
67
+ # @param [OCCI::Core::Category] category
66
68
  def unregister(category)
67
69
  OCCI::Log.debug "### Unregistering category #{category.type_identifier}"
68
70
  @categories.delete category.type_identifier
@@ -71,14 +73,16 @@ module OCCI
71
73
 
72
74
  # Returns the category corresponding to a given type identifier
73
75
  #
74
- # @param [URI] type identifier of a category
76
+ # @param [URI] id type identifier of a category
77
+ # @return [OCCI::Core::Category]
75
78
  def get_by_id(id)
76
79
  @categories.fetch(id) { OCCI::Log.debug("Category with id #{id} not found"); nil }
77
80
  end
78
81
 
79
82
  # Returns the category corresponding to a given location
80
83
  #
81
- # @param [URI] Location of a category
84
+ # @param [URI] location
85
+ # @return [OCCI::Core::Category]
82
86
  def get_by_location(location)
83
87
  id = @locations.fetch(location) { OCCI::Log.debug("Category with location #{location} not found"); nil }
84
88
  get_by_id id