cim 0.2.7 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|