cim 0.2.7 → 0.3.0
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/Manifest.txt +7 -8
- data/README.rdoc +5 -2
- data/lib/cim.rb +8 -8
- data/lib/cim/association.rb +1 -1
- data/lib/cim/class.rb +5 -5
- data/lib/cim/class_feature.rb +43 -0
- data/lib/cim/indication.rb +1 -1
- data/lib/cim/method.rb +2 -2
- data/lib/cim/named_element.rb +17 -0
- data/lib/cim/property.rb +5 -2
- data/lib/cim/qualifier.rb +13 -13
- data/lib/cim/qualifier_declaration.rb +32 -0
- data/lib/cim/qualifier_flavors.rb +33 -0
- data/lib/cim/qualifier_scope.rb +37 -0
- data/lib/cim/qualifiers.rb +11 -11
- data/lib/cim/reference.rb +2 -2
- data/lib/cim/type.rb +122 -0
- data/lib/cim/variant.rb +17 -0
- data/test/test_method.rb +3 -3
- data/test/test_property.rb +4 -4
- data/test/test_qualifier.rb +2 -2
- data/test/test_reference.rb +3 -3
- data/test/test_type.rb +2 -2
- metadata +18 -16
- data/lib/cim/meta/feature.rb +0 -41
- data/lib/cim/meta/flavor.rb +0 -33
- data/lib/cim/meta/named_element.rb +0 -18
- data/lib/cim/meta/qualifier.rb +0 -34
- data/lib/cim/meta/schema.rb +0 -7
- data/lib/cim/meta/scope.rb +0 -39
- data/lib/cim/meta/type.rb +0 -124
- data/lib/cim/meta/variant.rb +0 -19
data/Manifest.txt
CHANGED
@@ -7,14 +7,13 @@ lib/cim/association.rb
|
|
7
7
|
lib/cim/class.rb
|
8
8
|
lib/cim/indication.rb
|
9
9
|
lib/cim/instance.rb
|
10
|
-
lib/cim/
|
11
|
-
lib/cim/
|
12
|
-
lib/cim/
|
13
|
-
lib/cim/
|
14
|
-
lib/cim/
|
15
|
-
lib/cim/
|
16
|
-
lib/cim/
|
17
|
-
lib/cim/meta/variant.rb
|
10
|
+
lib/cim/class_feature.rb
|
11
|
+
lib/cim/qualifier_flavors.rb
|
12
|
+
lib/cim/named_element.rb
|
13
|
+
lib/cim/qualifier_declaration.rb
|
14
|
+
lib/cim/qualifier_scope.rb
|
15
|
+
lib/cim/type.rb
|
16
|
+
lib/cim/variant.rb
|
18
17
|
lib/cim/method.rb
|
19
18
|
lib/cim/property.rb
|
20
19
|
lib/cim/qualifier.rb
|
data/README.rdoc
CHANGED
@@ -8,8 +8,11 @@
|
|
8
8
|
|
9
9
|
Instances of Cim classes are used to define a CIM schema, often
|
10
10
|
represented as a .mof file.
|
11
|
+
See http://www.dmtf.org/standards/cim and http://www.dmtf.org/education/mof
|
12
|
+
for details
|
11
13
|
|
12
|
-
|
14
|
+
https://rubygems.org/gems/mof is a parser for .mof files and the
|
15
|
+
primary consumer of the cim gem.
|
13
16
|
|
14
17
|
== SYNOPSIS:
|
15
18
|
|
@@ -30,4 +33,4 @@
|
|
30
33
|
|
31
34
|
Copyright (c) 2010 Klaus Kämpf <kkaempf@suse.de>
|
32
35
|
|
33
|
-
See http://www.ruby-lang.org/en/LICENSE.txt for the full text
|
36
|
+
See http://www.ruby-lang.org/en/LICENSE.txt for the full text
|
data/lib/cim.rb
CHANGED
@@ -8,17 +8,17 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
8
8
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
9
9
|
|
10
10
|
module Cim
|
11
|
-
VERSION = '0.
|
11
|
+
VERSION = '0.3.0'
|
12
12
|
cim_dir = File.join(File.dirname(__FILE__),"cim")
|
13
|
-
require cim_dir + '/
|
14
|
-
require cim_dir + '/
|
15
|
-
require cim_dir + '/
|
16
|
-
require cim_dir + '/
|
17
|
-
require cim_dir + '/
|
18
|
-
require cim_dir + '/
|
13
|
+
require cim_dir + '/type'
|
14
|
+
require cim_dir + '/variant'
|
15
|
+
require cim_dir + '/qualifier_flavors'
|
16
|
+
require cim_dir + '/qualifier_scope'
|
17
|
+
require cim_dir + '/named_element'
|
18
|
+
require cim_dir + '/qualifier_declaration'
|
19
19
|
require cim_dir + '/qualifier'
|
20
20
|
require cim_dir + '/qualifiers'
|
21
|
-
require cim_dir + '/
|
21
|
+
require cim_dir + '/class_feature'
|
22
22
|
require cim_dir + '/property'
|
23
23
|
require cim_dir + '/reference'
|
24
24
|
require cim_dir + '/method'
|
data/lib/cim/association.rb
CHANGED
data/lib/cim/class.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
module
|
1
|
+
module CIM
|
2
2
|
require File.join(File.dirname(__FILE__),"qualifier")
|
3
|
-
class Class <
|
4
|
-
attr_reader :
|
3
|
+
class Class < CIM::NamedElement
|
4
|
+
attr_reader :alias_name, :qualifiers, :superclass, :features
|
5
5
|
attr_accessor :parent
|
6
6
|
def initialize name, qualifiers, alias_name, superclass, features
|
7
7
|
@qualifiers = qualifiers
|
@@ -9,7 +9,7 @@ module Cim
|
|
9
9
|
@superclass = superclass
|
10
10
|
features = nil if features.is_a?(Array) && features.empty?
|
11
11
|
@features = features
|
12
|
-
# puts "
|
12
|
+
# puts "CIM::Class.new(#{@features})"
|
13
13
|
super name
|
14
14
|
end
|
15
15
|
def add_type t
|
@@ -23,7 +23,7 @@ module Cim
|
|
23
23
|
def method?
|
24
24
|
@features.each do |f|
|
25
25
|
case f
|
26
|
-
when
|
26
|
+
when CIM::Method: return true
|
27
27
|
end
|
28
28
|
end
|
29
29
|
false
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module CIM
|
2
|
+
# Shared between Property and Method
|
3
|
+
class ClassFeature < NamedElement
|
4
|
+
attr_reader :type, :qualifiers
|
5
|
+
def initialize type, name, qualifiers = nil
|
6
|
+
@type = (type.is_a? CIM::Type) ? type : CIM::Type.new(type)
|
7
|
+
qualifiers = nil if qualifiers.is_a?(::Array) && qualifiers.empty?
|
8
|
+
@qualifiers = qualifiers
|
9
|
+
super name
|
10
|
+
end
|
11
|
+
# if has key qualifier
|
12
|
+
def key?
|
13
|
+
@qualifiers && @qualifiers.include?(:key,:bool)
|
14
|
+
end
|
15
|
+
# if static (class-level) feature
|
16
|
+
def static?
|
17
|
+
false
|
18
|
+
end
|
19
|
+
# if property
|
20
|
+
def property?
|
21
|
+
false
|
22
|
+
end
|
23
|
+
# if method
|
24
|
+
def method?
|
25
|
+
false
|
26
|
+
end
|
27
|
+
# if reference
|
28
|
+
def reference?
|
29
|
+
false
|
30
|
+
end
|
31
|
+
def to_s
|
32
|
+
s = ""
|
33
|
+
s << "#{@qualifiers}\n " if @qualifiers
|
34
|
+
case @type
|
35
|
+
when CIM::Array
|
36
|
+
s << "#{@type.type} #{@name}[]"
|
37
|
+
else
|
38
|
+
s << "#{@type} #{@name}"
|
39
|
+
end
|
40
|
+
s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/cim/indication.rb
CHANGED
data/lib/cim/method.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
module CIM
|
2
|
+
class NamedElement
|
3
|
+
attr_reader :name, :characteristics
|
4
|
+
def initialize name
|
5
|
+
raise "NamedElement must have a name" unless name
|
6
|
+
@name = name.to_s
|
7
|
+
@characteristics = []
|
8
|
+
end
|
9
|
+
def << qualifier
|
10
|
+
@characteristics << qualifier
|
11
|
+
end
|
12
|
+
def has? qualifier
|
13
|
+
@characteristics.include? qualifier
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
data/lib/cim/property.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class Property <
|
1
|
+
module CIM
|
2
|
+
class Property < CIM::ClassFeature
|
3
3
|
attr_reader :default
|
4
4
|
def initialize type, name, qualifiers=nil, default=nil
|
5
5
|
@default = default
|
@@ -8,6 +8,9 @@ module Cim
|
|
8
8
|
end
|
9
9
|
super type, name, qualifiers
|
10
10
|
end
|
11
|
+
def property?
|
12
|
+
true
|
13
|
+
end
|
11
14
|
end
|
12
15
|
end
|
13
16
|
|
data/lib/cim/qualifier.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
module
|
1
|
+
module CIM
|
2
2
|
class Qualifier
|
3
|
-
attr_reader :
|
4
|
-
def initialize
|
5
|
-
raise "Not a
|
6
|
-
@
|
3
|
+
attr_reader :declaration, :value, :flavor
|
4
|
+
def initialize declaration, value = nil, flavor = nil
|
5
|
+
raise "Not a CIM::QualifierDeclaration: #{declaration.inspect}" unless declaration.is_a?(CIM::QualifierDeclaration)
|
6
|
+
@declaration = declaration
|
7
7
|
@value = value
|
8
8
|
@flavor = flavor
|
9
9
|
end
|
10
10
|
def == q
|
11
|
-
# puts "
|
11
|
+
# puts "CIM::Qualifier ->#{self} == #{q.inspect}"
|
12
12
|
case q
|
13
|
-
when
|
14
|
-
(@
|
13
|
+
when CIM::Qualifier
|
14
|
+
(@declaration == q.declaration) &&
|
15
15
|
(@value == q.value) &&
|
16
16
|
(@flavor == q.flavor)
|
17
|
-
when
|
18
|
-
@
|
17
|
+
when CIM::QualifierDeclaration
|
18
|
+
@declaration == q
|
19
19
|
when Symbol
|
20
|
-
q.to_s.downcase == @
|
20
|
+
q.to_s.downcase == @declaration.name.downcase && @value.nil? && @flavor.nil?
|
21
21
|
else
|
22
22
|
false
|
23
23
|
end
|
24
24
|
end
|
25
25
|
def to_sym
|
26
|
-
@
|
26
|
+
@declaration.downcase.to_sym
|
27
27
|
end
|
28
28
|
def to_s
|
29
|
-
s = "#{@
|
29
|
+
s = "#{@declaration.name.capitalize}"
|
30
30
|
case @value
|
31
31
|
when nil:
|
32
32
|
when Array:
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module CIM
|
2
|
+
class QualifierDeclaration < NamedElement
|
3
|
+
|
4
|
+
attr_reader :type, :default, :scope, :flavor
|
5
|
+
|
6
|
+
def initialize name, type = :bool, default = false, scope = nil, flavor = nil
|
7
|
+
@type = (type.kind_of? Type) ? type : Type.new(type)
|
8
|
+
@default = (default.nil? || default.is_a?(CIM::Variant)) ? default : CIM::Variant.new(@type, default)
|
9
|
+
@scope = scope
|
10
|
+
@flavor = flavor
|
11
|
+
super name
|
12
|
+
end
|
13
|
+
|
14
|
+
def == q
|
15
|
+
# puts "#{@name}:#{@type} == #{q.name}:#{q.type}"
|
16
|
+
(@name.downcase == q.name.downcase) &&
|
17
|
+
(@type.nil? || q.type.nil? || (@type == q.type))
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_sym
|
21
|
+
@name.downcase.to_sym
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s
|
25
|
+
s = "Qualifier #{@name} : #{@type}"
|
26
|
+
s << " = #{@default}" if @default
|
27
|
+
s << ",\n\t#{@scope}" if @scope
|
28
|
+
s << ",\n\t#{@flavor}" if @flavor
|
29
|
+
s
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module CIM
|
2
|
+
|
3
|
+
class QualifierFlavorError < ArgumentError
|
4
|
+
def initialize flavor
|
5
|
+
@flavor = flavor
|
6
|
+
end
|
7
|
+
def to_s
|
8
|
+
"#{@flavor} is not a valid qualifier flavor"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class QualifierFlavors
|
13
|
+
FLAVORS = [:amended, :enableoverride, :disableoverride, :restricted, :toinstance, :tosubclass, :translatable]
|
14
|
+
attr_reader :flavors
|
15
|
+
def initialize flavor
|
16
|
+
@flavors = []
|
17
|
+
self << flavor
|
18
|
+
end
|
19
|
+
def << flavor
|
20
|
+
flavor.downcase! if flavor.kind_of? String
|
21
|
+
f = flavor.to_sym
|
22
|
+
raise QualifierFlavorError.new("#{flavor}") unless FLAVORS.include? f
|
23
|
+
@flavors << f
|
24
|
+
self
|
25
|
+
end
|
26
|
+
def to_sym
|
27
|
+
@flavors.first
|
28
|
+
end
|
29
|
+
def to_s
|
30
|
+
"Flavor(#{@flavors.join(', ')})"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module CIM
|
2
|
+
|
3
|
+
class QualifierScopeError < ArgumentError
|
4
|
+
def initialize element, msg = nil
|
5
|
+
@element = element
|
6
|
+
super msg
|
7
|
+
end
|
8
|
+
def to_s
|
9
|
+
"#{@element} is not a valid meta element for scopes"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class QualifierScope
|
14
|
+
META_ELEMENTS = [ :schema, :class, :association, :indication, :qualifier, :property, :reference, :method, :parameter, :any ]
|
15
|
+
attr_reader :elements
|
16
|
+
def initialize element = :any
|
17
|
+
@elements = []
|
18
|
+
self << element
|
19
|
+
end
|
20
|
+
def << element
|
21
|
+
element.downcase! if element.is_a?(String)
|
22
|
+
e = element.to_sym
|
23
|
+
raise QualifierScopeError.new(element) unless META_ELEMENTS.include?(e)
|
24
|
+
@elements << e
|
25
|
+
self
|
26
|
+
end
|
27
|
+
def has? qualifier
|
28
|
+
@elements.include? qualifier
|
29
|
+
end
|
30
|
+
def to_s
|
31
|
+
"Scope(#{@elements.join(', ')})"
|
32
|
+
end
|
33
|
+
def to_sym
|
34
|
+
@elements.first
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/cim/qualifiers.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
module
|
2
|
-
# Array of
|
3
|
-
class Qualifiers < Array
|
1
|
+
module CIM
|
2
|
+
# Array of CIM::Qualifier
|
3
|
+
class Qualifiers < ::Array
|
4
4
|
#
|
5
5
|
# check if qualifier exists
|
6
6
|
#
|
@@ -8,14 +8,14 @@ module Cim
|
|
8
8
|
def include? q,type=:null
|
9
9
|
# puts "#{self}.include? #{q}:#{type}"
|
10
10
|
case q
|
11
|
-
when
|
11
|
+
when CIM::Qualifier
|
12
12
|
q = q.definition
|
13
|
-
when
|
13
|
+
when CIM::QualifierDeclaration
|
14
14
|
# nothing
|
15
15
|
when String
|
16
|
-
q =
|
16
|
+
q = CIM::QualifierDeclaration.new(q,type)
|
17
17
|
when Symbol
|
18
|
-
q =
|
18
|
+
q = CIM::QualifierDeclaration.new(q,type)
|
19
19
|
else
|
20
20
|
raise "Unknown parameter in #{self.class}.include?"
|
21
21
|
end
|
@@ -29,14 +29,14 @@ module Cim
|
|
29
29
|
case q
|
30
30
|
when Fixnum
|
31
31
|
return self.array_access[q]
|
32
|
-
when
|
32
|
+
when CIM::Qualifier
|
33
33
|
q = q.definition
|
34
|
-
when
|
34
|
+
when CIM::QualifierDeclaration
|
35
35
|
# nothing
|
36
36
|
when String
|
37
|
-
q =
|
37
|
+
q = CIM::QualifierDeclaration.new(q,type)
|
38
38
|
when Symbol
|
39
|
-
q =
|
39
|
+
q = CIM::QualifierDeclaration.new(q,type)
|
40
40
|
else
|
41
41
|
raise "Unknown parameter in #{self.class}.[]"
|
42
42
|
end
|
data/lib/cim/reference.rb
CHANGED
data/lib/cim/type.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
module CIM
|
2
|
+
class Type
|
3
|
+
TYPES = [:null,:void,:bool,:char16,:string,:uint8,:sint8,:uint16,:sint16,:uint32,:sint32,:uint64,:sint64,:real32,:real64,:datetime,:class,:reference,:array]
|
4
|
+
MATCHES = {
|
5
|
+
:null => [],
|
6
|
+
:void => [], # WMI
|
7
|
+
:bool => [],
|
8
|
+
:char16 => [ :null, :string ],
|
9
|
+
:string => [ :null ],
|
10
|
+
:uint8 => [ :null ],
|
11
|
+
:sint8 => [ :null ],
|
12
|
+
:uint16 => [ :null, :uint8 ],
|
13
|
+
:sint16 => [ :null, :sint8 ],
|
14
|
+
:uint32 => [ :null, :uint8, :uint16 ],
|
15
|
+
:sint32 => [ :null, :sint8, :sint16 ],
|
16
|
+
:uint64 => [ :null, :uint8, :uint16, :sint32 ],
|
17
|
+
:sint64 => [ :null, :sint8, :sint16, :sint32 ],
|
18
|
+
:real32 => [ :null ],
|
19
|
+
:real64 => [ :null, :real32 ],
|
20
|
+
:datetime => [ :null ],
|
21
|
+
:class => [ :null ],
|
22
|
+
:reference => [ :null ],
|
23
|
+
:array => [ :null ]
|
24
|
+
}
|
25
|
+
attr_reader :type
|
26
|
+
def initialize type
|
27
|
+
type.downcase! if type.is_a? String
|
28
|
+
@type = type.to_sym
|
29
|
+
raise TypeError.new("#{type}") unless TYPES.include? @type
|
30
|
+
end
|
31
|
+
def to_s
|
32
|
+
@type.to_s
|
33
|
+
end
|
34
|
+
def to_sym
|
35
|
+
@type
|
36
|
+
end
|
37
|
+
def == t
|
38
|
+
case t
|
39
|
+
when Type: t.type == @type
|
40
|
+
when Symbol: t == @type
|
41
|
+
else
|
42
|
+
false
|
43
|
+
end
|
44
|
+
end
|
45
|
+
private
|
46
|
+
def matches_value type,value
|
47
|
+
# puts ">#{type}<{#{type.class}}.matches_value?>#{value.inspect}<{#{value.class}}"
|
48
|
+
case value
|
49
|
+
when NilClass
|
50
|
+
true
|
51
|
+
when FalseClass, TrueClass
|
52
|
+
type == :bool
|
53
|
+
when Integer
|
54
|
+
case type
|
55
|
+
when :uint8: (0..255) === value
|
56
|
+
when :sint8: (-128..127) === value
|
57
|
+
when :uint16: (0..65535) === value
|
58
|
+
when :sint16: (-32768..32767) === value
|
59
|
+
when :uint32: (0..4294967295) === value
|
60
|
+
when :sint32: (-2147483648..2147483647) === value
|
61
|
+
when :uint64: (0..18446744073709551615) === value
|
62
|
+
when :sint64: (-9223372036854775808..9223372036854775807) === value
|
63
|
+
else
|
64
|
+
false
|
65
|
+
end
|
66
|
+
when Float
|
67
|
+
case type
|
68
|
+
when :real32: value.to_i.size == 4
|
69
|
+
when :real64: true
|
70
|
+
else
|
71
|
+
false
|
72
|
+
end
|
73
|
+
when String
|
74
|
+
type == :string
|
75
|
+
else
|
76
|
+
false
|
77
|
+
end
|
78
|
+
end
|
79
|
+
public
|
80
|
+
def matches? x
|
81
|
+
# puts ">#{self}<{#{self.class}}.matches?>#{x.inspect}<{#{x.class}}"
|
82
|
+
case x
|
83
|
+
when CIM::Type, CIM::Variant
|
84
|
+
return true if x.type == @type
|
85
|
+
return true if MATCHES[@type].include? x.type
|
86
|
+
false
|
87
|
+
when ::Array
|
88
|
+
return false unless self.is_a? CIM::Array
|
89
|
+
x.each do |v|
|
90
|
+
return false unless matches_value @type,v
|
91
|
+
end
|
92
|
+
true
|
93
|
+
else
|
94
|
+
matches_value @type, x
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
class Array < Type
|
99
|
+
attr_reader :size
|
100
|
+
def initialize size, type
|
101
|
+
@size = size
|
102
|
+
super type
|
103
|
+
end
|
104
|
+
def to_s
|
105
|
+
if @size > 0
|
106
|
+
"#{super}[#{@size}]"
|
107
|
+
else
|
108
|
+
"#{super}[]"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
class ReferenceType < Type
|
113
|
+
attr_reader :name
|
114
|
+
def initialize name
|
115
|
+
@name = name
|
116
|
+
super :class
|
117
|
+
end
|
118
|
+
def to_s
|
119
|
+
"#{@name} ref"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
data/lib/cim/variant.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module CIM
|
2
|
+
# A Variant is a typed value
|
3
|
+
class Variant
|
4
|
+
attr_reader :type, :value
|
5
|
+
def initialize type = :null, value = nil
|
6
|
+
@type = (type.kind_of? CIM::Type) ? type : CIM::Type.new(type)
|
7
|
+
@value = value unless value == :null
|
8
|
+
end
|
9
|
+
def to_s
|
10
|
+
if @type == :null
|
11
|
+
"null"
|
12
|
+
else
|
13
|
+
"#{@value.inspect}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/test/test_method.rb
CHANGED
@@ -5,7 +5,7 @@ require "cim"
|
|
5
5
|
|
6
6
|
class MethodTest < Test::Unit::TestCase
|
7
7
|
def test_init
|
8
|
-
m =
|
8
|
+
m = CIM::Method.new :real32, "Foo", CIM::QualifierDeclaration.new(:description, :string, "This is a foo method", :class)
|
9
9
|
assert m
|
10
10
|
assert_equal "Foo", m.name
|
11
11
|
assert m.qualifiers.size > 0
|
@@ -14,7 +14,7 @@ class MethodTest < Test::Unit::TestCase
|
|
14
14
|
assert_equal false, m.to_s.empty?
|
15
15
|
end
|
16
16
|
def test_nodesc
|
17
|
-
m =
|
17
|
+
m = CIM::Method.new :bool, "Foo"
|
18
18
|
assert m
|
19
19
|
assert_equal "Foo", m.name
|
20
20
|
assert_equal m.type, :bool
|
@@ -22,7 +22,7 @@ class MethodTest < Test::Unit::TestCase
|
|
22
22
|
end
|
23
23
|
def test_raise
|
24
24
|
assert_raise TypeError do
|
25
|
-
m =
|
25
|
+
m = CIM::Method.new :foo, "Foo"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
data/test/test_property.rb
CHANGED
@@ -5,19 +5,19 @@ require "cim"
|
|
5
5
|
|
6
6
|
class PropertyTest < Test::Unit::TestCase
|
7
7
|
def test_init
|
8
|
-
p =
|
8
|
+
p = CIM::Property.new :string, "String", CIM::QualifierDeclaration.new(:key, :bool), CIM::QualifierDeclaration.new(:description, :string, "This is a string", :class)
|
9
9
|
assert p
|
10
|
-
assert p.is_a?
|
10
|
+
assert p.is_a? CIM::Property
|
11
11
|
assert_equal "String", p.name
|
12
12
|
# assert p.key?
|
13
13
|
end
|
14
14
|
def test_name
|
15
|
-
p =
|
15
|
+
p = CIM::Property.new :uint32, "foo"
|
16
16
|
assert_equal "foo", p.name
|
17
17
|
end
|
18
18
|
def test_raise
|
19
19
|
assert_raise TypeError do
|
20
|
-
p =
|
20
|
+
p = CIM::Property.new :foo, "foo"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/test/test_qualifier.rb
CHANGED
@@ -5,12 +5,12 @@ require "cim"
|
|
5
5
|
|
6
6
|
class QualifierTest < Test::Unit::TestCase
|
7
7
|
def test_key
|
8
|
-
q =
|
8
|
+
q = CIM::QualifierDeclaration.new :key, :bool
|
9
9
|
assert q
|
10
10
|
end
|
11
11
|
def test_raise
|
12
12
|
assert_raise RuntimeError do
|
13
|
-
|
13
|
+
CIM::Qualifier.new(:unknown)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
data/test/test_reference.rb
CHANGED
@@ -5,9 +5,9 @@ require "cim"
|
|
5
5
|
|
6
6
|
class ReferenceTest < Test::Unit::TestCase
|
7
7
|
def test_init
|
8
|
-
r =
|
8
|
+
r = CIM::Reference.new :string, "String"
|
9
9
|
assert r
|
10
|
-
assert r.is_a?
|
11
|
-
assert r.kind_of?
|
10
|
+
assert r.is_a? CIM::Reference
|
11
|
+
assert r.kind_of? CIM::ClassFeature
|
12
12
|
end
|
13
13
|
end
|
data/test/test_type.rb
CHANGED
@@ -5,13 +5,13 @@ require "cim"
|
|
5
5
|
|
6
6
|
class TypeTest < Test::Unit::TestCase
|
7
7
|
def test_init
|
8
|
-
t =
|
8
|
+
t = CIM::Type.new :null
|
9
9
|
assert t
|
10
10
|
assert_equal "null", t.to_s
|
11
11
|
end
|
12
12
|
def test_raise
|
13
13
|
assert_raise TypeError do
|
14
|
-
t =
|
14
|
+
t = CIM::Type.new :foo
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Klaus K\xC3\xA4mpf"
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-04 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -55,8 +55,11 @@ description: |-
|
|
55
55
|
|
56
56
|
Instances of Cim classes are used to define a CIM schema, often
|
57
57
|
represented as a .mof file.
|
58
|
+
See http://www.dmtf.org/standards/cim and http://www.dmtf.org/education/mof
|
59
|
+
for details
|
58
60
|
|
59
|
-
|
61
|
+
https://rubygems.org/gems/mof is a parser for .mof files and the
|
62
|
+
primary consumer of the cim gem.
|
60
63
|
email:
|
61
64
|
- kkaempf@suse.de
|
62
65
|
executables: []
|
@@ -76,14 +79,13 @@ files:
|
|
76
79
|
- lib/cim/class.rb
|
77
80
|
- lib/cim/indication.rb
|
78
81
|
- lib/cim/instance.rb
|
79
|
-
- lib/cim/
|
80
|
-
- lib/cim/
|
81
|
-
- lib/cim/
|
82
|
-
- lib/cim/
|
83
|
-
- lib/cim/
|
84
|
-
- lib/cim/
|
85
|
-
- lib/cim/
|
86
|
-
- lib/cim/meta/variant.rb
|
82
|
+
- lib/cim/class_feature.rb
|
83
|
+
- lib/cim/qualifier_flavors.rb
|
84
|
+
- lib/cim/named_element.rb
|
85
|
+
- lib/cim/qualifier_declaration.rb
|
86
|
+
- lib/cim/qualifier_scope.rb
|
87
|
+
- lib/cim/type.rb
|
88
|
+
- lib/cim/variant.rb
|
87
89
|
- lib/cim/method.rb
|
88
90
|
- lib/cim/property.rb
|
89
91
|
- lib/cim/qualifier.rb
|
@@ -132,8 +134,8 @@ specification_version: 3
|
|
132
134
|
summary: "* Cim is a pure-Ruby implementation of the CIM meta model"
|
133
135
|
test_files:
|
134
136
|
- test/test_qualifier.rb
|
135
|
-
- test/
|
137
|
+
- test/test_loading.rb
|
136
138
|
- test/test_property.rb
|
137
139
|
- test/test_type.rb
|
138
|
-
- test/
|
140
|
+
- test/test_method.rb
|
139
141
|
- test/test_reference.rb
|
data/lib/cim/meta/feature.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
module Cim
|
2
|
-
module Meta
|
3
|
-
# Shared between Property and Method
|
4
|
-
class Feature < NamedElement
|
5
|
-
attr_reader :type, :qualifiers
|
6
|
-
def initialize type, name, qualifiers
|
7
|
-
@type = (type.is_a? Cim::Meta::Type) ? type : Cim::Meta::Type.new(type)
|
8
|
-
qualifiers = nil if qualifiers.is_a?(::Array) && qualifiers.empty?
|
9
|
-
@qualifiers = qualifiers
|
10
|
-
super name
|
11
|
-
end
|
12
|
-
# if has key qualifier
|
13
|
-
def key?
|
14
|
-
@qualifiers && @qualifiers.include?(:key,:bool)
|
15
|
-
end
|
16
|
-
# if static (class-level) feature
|
17
|
-
def static?
|
18
|
-
false
|
19
|
-
end
|
20
|
-
# if method
|
21
|
-
def method?
|
22
|
-
false
|
23
|
-
end
|
24
|
-
# if reference
|
25
|
-
def reference?
|
26
|
-
false
|
27
|
-
end
|
28
|
-
def to_s
|
29
|
-
s = ""
|
30
|
-
s << "#{@qualifiers}\n " if @qualifiers
|
31
|
-
case @type
|
32
|
-
when Cim::Meta::Array
|
33
|
-
s << "#{@type.type} #{@name}[]"
|
34
|
-
else
|
35
|
-
s << "#{@type} #{@name}"
|
36
|
-
end
|
37
|
-
s
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/lib/cim/meta/flavor.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Cim
|
2
|
-
module Meta
|
3
|
-
class FlavorError < ArgumentError
|
4
|
-
def initialize flavor
|
5
|
-
@flavor = flavor
|
6
|
-
end
|
7
|
-
def to_s
|
8
|
-
"#{@flavor} is not a valid Flavor"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
class Flavors
|
12
|
-
FLAVORS = [:amended, :enableoverride, :disableoverride, :restricted, :toinstance, :tosubclass, :translatable]
|
13
|
-
attr_reader :flavors
|
14
|
-
def initialize flavor
|
15
|
-
@flavors = []
|
16
|
-
self << flavor
|
17
|
-
end
|
18
|
-
def << flavor
|
19
|
-
flavor.downcase! if flavor.kind_of? String
|
20
|
-
f = flavor.to_sym
|
21
|
-
raise FlavorError.new("#{flavor}") unless FLAVORS.include? f
|
22
|
-
@flavors << f
|
23
|
-
self
|
24
|
-
end
|
25
|
-
def to_sym
|
26
|
-
@flavors.first
|
27
|
-
end
|
28
|
-
def to_s
|
29
|
-
"Flavor(#{@flavors.join(', ')})"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Cim
|
2
|
-
module Meta
|
3
|
-
class NamedElement
|
4
|
-
attr_reader :name, :characteristics
|
5
|
-
def initialize name
|
6
|
-
raise "NamedElement must have a name" unless name
|
7
|
-
@name = name.to_s
|
8
|
-
@characteristics = []
|
9
|
-
end
|
10
|
-
def << qualifier
|
11
|
-
@characteristics << qualifier
|
12
|
-
end
|
13
|
-
def has? qualifier
|
14
|
-
@characteristics.include? qualifier
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/cim/meta/qualifier.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module Cim
|
2
|
-
module Meta
|
3
|
-
class Qualifier < NamedElement
|
4
|
-
|
5
|
-
attr_reader :type, :default, :scope, :flavor
|
6
|
-
|
7
|
-
def initialize name, type = :bool, default = false, scope = nil, flavor = nil
|
8
|
-
@type = (type.kind_of? Type) ? type : Type.new(type)
|
9
|
-
@default = (default.nil? || default.is_a?(Cim::Meta::Variant)) ? default : Cim::Meta::Variant.new(@type, default)
|
10
|
-
@scope = scope
|
11
|
-
@flavor = flavor
|
12
|
-
super name
|
13
|
-
end
|
14
|
-
|
15
|
-
def == q
|
16
|
-
# puts "#{@name}:#{@type} == #{q.name}:#{q.type}"
|
17
|
-
(@name.downcase == q.name.downcase) &&
|
18
|
-
(@type.nil? || q.type.nil? || (@type == q.type))
|
19
|
-
end
|
20
|
-
|
21
|
-
def to_sym
|
22
|
-
@name.downcase.to_sym
|
23
|
-
end
|
24
|
-
|
25
|
-
def to_s
|
26
|
-
s = "Qualifier #{@name} : #{@type}"
|
27
|
-
s << " = #{@default}" if @default
|
28
|
-
s << ",\n\t#{@scope}" if @scope
|
29
|
-
s << ",\n\t#{@flavor}" if @flavor
|
30
|
-
s
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
data/lib/cim/meta/schema.rb
DELETED
data/lib/cim/meta/scope.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
module Cim
|
2
|
-
module Meta
|
3
|
-
|
4
|
-
class MetaElementError < ArgumentError
|
5
|
-
def initialize element, msg = nil
|
6
|
-
@element = element
|
7
|
-
super msg
|
8
|
-
end
|
9
|
-
def to_s
|
10
|
-
"#{@element} is not a valid meta element for scopes"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class Scope
|
15
|
-
META_ELEMENTS = [ :schema, :class, :association, :indication, :qualifier, :property, :reference, :method, :parameter, :any ]
|
16
|
-
attr_reader :elements
|
17
|
-
def initialize element = :any
|
18
|
-
@elements = []
|
19
|
-
self << element
|
20
|
-
end
|
21
|
-
def << element
|
22
|
-
element.downcase! if element.is_a?(String)
|
23
|
-
e = element.to_sym
|
24
|
-
raise MetaElementError.new(element) unless META_ELEMENTS.include?(e)
|
25
|
-
@elements << e
|
26
|
-
self
|
27
|
-
end
|
28
|
-
def has? qualifier
|
29
|
-
@elements.include? qualifier
|
30
|
-
end
|
31
|
-
def to_s
|
32
|
-
"Scope(#{@elements.join(', ')})"
|
33
|
-
end
|
34
|
-
def to_sym
|
35
|
-
@elements.first
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/lib/cim/meta/type.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
module Cim
|
2
|
-
module Meta
|
3
|
-
class Type
|
4
|
-
TYPES = [:null,:void,:bool,:char16,:string,:uint8,:sint8,:uint16,:sint16,:uint32,:sint32,:uint64,:sint64,:real32,:real64,:datetime,:class,:reference,:array]
|
5
|
-
MATCHES = {
|
6
|
-
:null => [],
|
7
|
-
:void => [], # WMI
|
8
|
-
:bool => [],
|
9
|
-
:char16 => [ :null, :string ],
|
10
|
-
:string => [ :null ],
|
11
|
-
:uint8 => [ :null ],
|
12
|
-
:sint8 => [ :null ],
|
13
|
-
:uint16 => [ :null, :uint8 ],
|
14
|
-
:sint16 => [ :null, :sint8 ],
|
15
|
-
:uint32 => [ :null, :uint8, :uint16 ],
|
16
|
-
:sint32 => [ :null, :sint8, :sint16 ],
|
17
|
-
:uint64 => [ :null, :uint8, :uint16, :sint32 ],
|
18
|
-
:sint64 => [ :null, :sint8, :sint16, :sint32 ],
|
19
|
-
:real32 => [ :null ],
|
20
|
-
:real64 => [ :null, :real32 ],
|
21
|
-
:datetime => [ :null ],
|
22
|
-
:class => [ :null ],
|
23
|
-
:reference => [ :null ],
|
24
|
-
:array => [ :null ]
|
25
|
-
}
|
26
|
-
attr_reader :type
|
27
|
-
def initialize type
|
28
|
-
type.downcase! if type.is_a? String
|
29
|
-
@type = type.to_sym
|
30
|
-
raise TypeError.new("#{type}") unless TYPES.include? @type
|
31
|
-
end
|
32
|
-
def to_s
|
33
|
-
@type.to_s
|
34
|
-
end
|
35
|
-
def to_sym
|
36
|
-
@type
|
37
|
-
end
|
38
|
-
def == t
|
39
|
-
case t
|
40
|
-
when Type: t.type == @type
|
41
|
-
when Symbol: t == @type
|
42
|
-
else
|
43
|
-
false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
private
|
47
|
-
def matches_value type,value
|
48
|
-
# puts ">#{type}<{#{type.class}}.matches_value?>#{value.inspect}<{#{value.class}}"
|
49
|
-
case value
|
50
|
-
when NilClass
|
51
|
-
true
|
52
|
-
when FalseClass, TrueClass
|
53
|
-
type == :bool
|
54
|
-
when Integer
|
55
|
-
case type
|
56
|
-
when :uint8: (0..255) === value
|
57
|
-
when :sint8: (-128..127) === value
|
58
|
-
when :uint16: (0..65535) === value
|
59
|
-
when :sint16: (-32768..32767) === value
|
60
|
-
when :uint32: (0..4294967295) === value
|
61
|
-
when :sint32: (-2147483648..2147483647) === value
|
62
|
-
when :uint64: (0..18446744073709551615) === value
|
63
|
-
when :sint64: (-9223372036854775808..9223372036854775807) === value
|
64
|
-
else
|
65
|
-
false
|
66
|
-
end
|
67
|
-
when Float
|
68
|
-
case type
|
69
|
-
when :real32: value.to_i.size == 4
|
70
|
-
when :real64: true
|
71
|
-
else
|
72
|
-
false
|
73
|
-
end
|
74
|
-
when String
|
75
|
-
type == :string
|
76
|
-
else
|
77
|
-
false
|
78
|
-
end
|
79
|
-
end
|
80
|
-
public
|
81
|
-
def matches? x
|
82
|
-
# puts ">#{self}<{#{self.class}}.matches?>#{x.inspect}<{#{x.class}}"
|
83
|
-
case x
|
84
|
-
when Cim::Meta::Type, Cim::Meta::Variant
|
85
|
-
return true if x.type == @type
|
86
|
-
return true if MATCHES[@type].include? x.type
|
87
|
-
false
|
88
|
-
when ::Array
|
89
|
-
return false unless self.is_a? Cim::Meta::Array
|
90
|
-
x.each do |v|
|
91
|
-
return false unless matches_value @type,v
|
92
|
-
end
|
93
|
-
true
|
94
|
-
else
|
95
|
-
matches_value @type, x
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
class Array < Type
|
100
|
-
attr_reader :size
|
101
|
-
def initialize size, type
|
102
|
-
@size = size
|
103
|
-
super type
|
104
|
-
end
|
105
|
-
def to_s
|
106
|
-
if @size > 0
|
107
|
-
"#{super}[#{@size}]"
|
108
|
-
else
|
109
|
-
"#{super}[]"
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
class Reference < Type
|
114
|
-
attr_reader :name
|
115
|
-
def initialize name
|
116
|
-
@name = name
|
117
|
-
super :class
|
118
|
-
end
|
119
|
-
def to_s
|
120
|
-
"#{@name} ref"
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
data/lib/cim/meta/variant.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module Cim
|
2
|
-
module Meta
|
3
|
-
# A Variant is a typed value
|
4
|
-
class Variant
|
5
|
-
attr_reader :type, :value
|
6
|
-
def initialize type = :null, value = nil
|
7
|
-
@type = (type.kind_of? Cim::Meta::Type) ? type : Cim::Meta::Type.new(type)
|
8
|
-
@value = value unless value == :null
|
9
|
-
end
|
10
|
-
def to_s
|
11
|
-
if @type == :null
|
12
|
-
"null"
|
13
|
-
else
|
14
|
-
"#{@value.inspect}"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|