cim 0.5.0 → 1.3
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/History.txt +13 -0
- data/cim.gemspec +3 -0
- data/lib/cim.rb +1 -3
- data/lib/cim/class.rb +40 -9
- data/lib/cim/class_feature.rb +2 -2
- data/lib/cim/method.rb +10 -6
- data/lib/cim/named_element.rb +4 -19
- data/lib/cim/property.rb +3 -3
- data/lib/cim/qualifier.rb +6 -2
- data/lib/cim/qualifier_declaration.rb +2 -2
- data/lib/cim/qualifier_flavors.rb +4 -12
- data/lib/cim/qualifier_scopes.rb +7 -14
- data/lib/cim/qualifier_set.rb +11 -6
- data/lib/cim/type.rb +48 -23
- data/lib/cim/variant.rb +7 -7
- data/test/test_method.rb +2 -2
- data/test/test_property.rb +1 -1
- data/test/test_qualifier.rb +1 -1
- data/test/test_qualifier_flavors.rb +19 -0
- data/test/test_qualifier_scopes.rb +19 -0
- data/test/test_qualifier_set.rb +8 -8
- data/test/test_type.rb +16 -0
- metadata +39 -11
- data/lib/cim/association.rb +0 -38
- data/lib/cim/indication.rb +0 -22
data/History.txt
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
=== 1.3 2011-11-16
|
2
|
+
|
3
|
+
* Make QualifierScope and QualifierFlavor Array
|
4
|
+
(remove :elements and :flavors accessors)
|
5
|
+
|
6
|
+
* Rename CIM::QualifierScopesError to CIM::QualifierScopeError
|
7
|
+
|
8
|
+
=== 1.2.1 2011-11-08
|
9
|
+
|
10
|
+
* Ruby 1.9 support
|
11
|
+
|
12
|
+
=== 1.2.0
|
13
|
+
|
1
14
|
=== 0.5.0 2011-09-29
|
2
15
|
|
3
16
|
* Clean up Rakefile, support Bundler
|
data/cim.gemspec
CHANGED
@@ -18,6 +18,9 @@ http://www.dmtf.org/education/mof for details}
|
|
18
18
|
|
19
19
|
s.rubyforge_project = "cim"
|
20
20
|
|
21
|
+
s.add_development_dependency('rake')
|
22
|
+
s.add_development_dependency('bundler')
|
23
|
+
|
21
24
|
s.files = `git ls-files`.split("\n")
|
22
25
|
s.files.reject! { |fn| fn == '.gitignore' }
|
23
26
|
s.extra_rdoc_files = Dir['README*', 'TODO*', 'CHANGELOG*', 'LICENSE']
|
data/lib/cim.rb
CHANGED
@@ -41,7 +41,7 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
41
41
|
#
|
42
42
|
|
43
43
|
module CIM
|
44
|
-
VERSION = '
|
44
|
+
VERSION = '1.3'
|
45
45
|
require 'cim/type'
|
46
46
|
require 'cim/variant'
|
47
47
|
require 'cim/qualifier_flavors'
|
@@ -55,6 +55,4 @@ module CIM
|
|
55
55
|
require 'cim/reference'
|
56
56
|
require 'cim/method'
|
57
57
|
require 'cim/class'
|
58
|
-
require 'cim/association'
|
59
|
-
require 'cim/indication'
|
60
58
|
end
|
data/lib/cim/class.rb
CHANGED
@@ -18,7 +18,7 @@ module CIM
|
|
18
18
|
# and contain features (properties or methods).
|
19
19
|
#
|
20
20
|
class Class < CIM::NamedElement
|
21
|
-
attr_reader :alias_name, :superclass
|
21
|
+
attr_reader :alias_name, :superclass
|
22
22
|
#
|
23
23
|
# Creates a new Class with name (String), qualifiers, alias, superclass and features
|
24
24
|
#
|
@@ -30,6 +30,23 @@ module CIM
|
|
30
30
|
# Class.new("MyClass", qualifiers, "my_class")
|
31
31
|
# Class.new("MyClass", qualifiers, "my_class", "SuperClass")
|
32
32
|
# Class.new("MyClass", qualifiers, "my_class", "SuperClass", features)
|
33
|
+
# if qualifiers and qualifiers.include?(:association, :boolean)
|
34
|
+
# FIXME: 'association' must be first
|
35
|
+
# Context:
|
36
|
+
#
|
37
|
+
# The remaining qualifier list must not include
|
38
|
+
# the ASSOCIATION qualifier again. If the
|
39
|
+
# association has no super association, then at
|
40
|
+
# least two references must be specified! The
|
41
|
+
# ASSOCIATION qualifier may be omitted in
|
42
|
+
# sub associations.
|
43
|
+
# result = CIM::Association.new(val[2],qualifiers,val[3],val[4],features)
|
44
|
+
# elsif qualifiers and qualifiers.include?(:indication, :boolean)
|
45
|
+
# FIXME: 'indication' must be first
|
46
|
+
# FIXME: features must not include references
|
47
|
+
# result = CIM::Indication.new(val[2],qualifiers,val[3],val[4],features)
|
48
|
+
# else
|
49
|
+
|
33
50
|
#
|
34
51
|
def initialize name, qualifiers = nil, alias_name = nil, superclass = nil, features = nil
|
35
52
|
@alias_name = alias_name
|
@@ -39,11 +56,22 @@ module CIM
|
|
39
56
|
# puts "CIM::Class.new(#{@features})"
|
40
57
|
super name, qualifiers
|
41
58
|
end
|
59
|
+
|
60
|
+
def method_missing name, *args
|
61
|
+
@qualifiers[name]
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Ensure features can be enumerated
|
66
|
+
#
|
67
|
+
def features
|
68
|
+
@features || []
|
69
|
+
end
|
42
70
|
#
|
43
71
|
# Iterate over features flagged as keys
|
44
72
|
#
|
45
73
|
def each_key
|
46
|
-
|
74
|
+
features.each do |f|
|
47
75
|
yield f if f.key?
|
48
76
|
end
|
49
77
|
end
|
@@ -51,16 +79,19 @@ module CIM
|
|
51
79
|
# true if class has instances (instance provider)
|
52
80
|
#
|
53
81
|
def instance?
|
54
|
-
|
82
|
+
features.each do |f|
|
83
|
+
next if f.reference?
|
84
|
+
next if f.method?
|
85
|
+
return true if f.property?
|
86
|
+
end
|
87
|
+
false
|
55
88
|
end
|
56
89
|
#
|
57
90
|
# true if class has methods (method provider)
|
58
91
|
#
|
59
92
|
def method?
|
60
|
-
|
61
|
-
|
62
|
-
when CIM::Method: return true
|
63
|
-
end
|
93
|
+
features.each do |f|
|
94
|
+
return true if f.method?
|
64
95
|
end
|
65
96
|
false
|
66
97
|
end
|
@@ -68,13 +99,13 @@ module CIM
|
|
68
99
|
# true if class has associations (association provider)
|
69
100
|
#
|
70
101
|
def association?
|
71
|
-
|
102
|
+
include? :association
|
72
103
|
end
|
73
104
|
#
|
74
105
|
# true if class has indications (indication provider)
|
75
106
|
#
|
76
107
|
def indication?
|
77
|
-
|
108
|
+
include? :indication
|
78
109
|
end
|
79
110
|
#
|
80
111
|
# returns a string representation in MOF syntax format
|
data/lib/cim/class_feature.rb
CHANGED
@@ -22,7 +22,7 @@ module CIM
|
|
22
22
|
# if has key qualifier
|
23
23
|
#
|
24
24
|
def key?
|
25
|
-
@qualifiers && @qualifiers.include?(:key,:
|
25
|
+
@qualifiers && @qualifiers.include?(:key,:boolean)
|
26
26
|
end
|
27
27
|
#
|
28
28
|
# if static (class-level) feature
|
@@ -51,7 +51,7 @@ module CIM
|
|
51
51
|
protected
|
52
52
|
def initialize type, name, qualifiers = nil
|
53
53
|
# :notnew:
|
54
|
-
@type =
|
54
|
+
@type = CIM::Type.normalize type
|
55
55
|
super name, qualifiers
|
56
56
|
end
|
57
57
|
#
|
data/lib/cim/method.rb
CHANGED
@@ -14,21 +14,25 @@ module CIM
|
|
14
14
|
# For data members, see Property.
|
15
15
|
#
|
16
16
|
class Method < CIM::ClassFeature
|
17
|
-
attr_reader :parameters
|
18
17
|
#
|
19
18
|
# Create a Method with return type (Type) and name (String), optional Qualifiers and parameters (Property)
|
20
19
|
#
|
21
20
|
# call-seq:
|
22
|
-
# Method.new(:
|
23
|
-
# Method.new(:
|
24
|
-
# Method.new(:
|
21
|
+
# Method.new(:boolean, "do_something")
|
22
|
+
# Method.new(:boolean, "do_something", qualifiers)
|
23
|
+
# Method.new(:boolean, "do_something", qualifiers, parameters)
|
25
24
|
#
|
26
25
|
def initialize type, name, qualifiers = nil, parameters = nil
|
27
|
-
parameters = nil if parameters.kind_of?(::Enumerable) && parameters.empty?
|
28
26
|
@parameters = parameters
|
29
27
|
super type,name,qualifiers
|
30
28
|
end
|
31
29
|
#
|
30
|
+
# parameters accessor
|
31
|
+
#
|
32
|
+
def parameters
|
33
|
+
@parameters || []
|
34
|
+
end
|
35
|
+
#
|
32
36
|
# Makes a Method recognizable in the set of Class features.
|
33
37
|
#
|
34
38
|
def method?
|
@@ -38,7 +42,7 @@ module CIM
|
|
38
42
|
# returns a string representation in MOF syntax format
|
39
43
|
#
|
40
44
|
def to_s
|
41
|
-
p =
|
45
|
+
p = parameters.join(", ")
|
42
46
|
"#{super}(#{p})"
|
43
47
|
end
|
44
48
|
end
|
data/lib/cim/named_element.rb
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
#
|
8
8
|
# Licensed under the Ruby license
|
9
9
|
#
|
10
|
+
|
10
11
|
module CIM
|
11
12
|
#
|
12
13
|
# The NamedElement is a basic building block for the CIM schema, acting as a base class
|
@@ -22,28 +23,19 @@ module CIM
|
|
22
23
|
def initialize name, qualifiers = nil
|
23
24
|
raise "NamedElement must have a name" unless name
|
24
25
|
@name = name.to_s
|
25
|
-
|
26
|
-
unless qualifiers.is_a?(QualifierSet)
|
27
|
-
if qualifiers.kind_of?(::Enumerable) && qualifiers.empty?
|
28
|
-
qualifiers = nil
|
29
|
-
else
|
30
|
-
qualifiers = QualifierSet.new qualifiers
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
@qualifiers = qualifiers
|
26
|
+
@qualifiers = (qualifiers) ? CIM::QualifierSet.normalize(qualifiers) : CIM::QualifierSet.new
|
35
27
|
end
|
36
28
|
#
|
37
29
|
# Add a Qualifier to the NamedElements qualifiers
|
38
30
|
#
|
39
31
|
def << qualifier
|
40
|
-
@qualifiers << (
|
32
|
+
@qualifiers << CIM::Qualifier.normalize(qualifier)
|
41
33
|
end
|
42
34
|
#
|
43
35
|
# Check if a Qualifier is included
|
44
36
|
#
|
45
37
|
def include? qualifier
|
46
|
-
@qualifiers.include?
|
38
|
+
@qualifiers.include? qualifier
|
47
39
|
end
|
48
40
|
alias includes? include?
|
49
41
|
#
|
@@ -54,12 +46,5 @@ module CIM
|
|
54
46
|
s << "[#{@qualifiers.join(', ')}]\n " if @qualifiers
|
55
47
|
s << "#{@name}"
|
56
48
|
end
|
57
|
-
private
|
58
|
-
def normalize qualifier
|
59
|
-
unless qualifier.is_a?(CIM::Qualifier)
|
60
|
-
qualifier = Qualifier.new(qualifier)
|
61
|
-
end
|
62
|
-
qualifier
|
63
|
-
end
|
64
49
|
end
|
65
50
|
end
|
data/lib/cim/property.rb
CHANGED
@@ -19,9 +19,9 @@ module CIM
|
|
19
19
|
# Create a Property with type (Type) and name (String), optional QualifierSet and default value
|
20
20
|
#
|
21
21
|
# call-seq:
|
22
|
-
# Property.new(:
|
23
|
-
# Property.new(:
|
24
|
-
# Property.new(:
|
22
|
+
# Property.new(:boolean, "flag")
|
23
|
+
# Property.new(:boolean, "flag", qualifier_set)
|
24
|
+
# Property.new(:boolean, "flag", qualifier_set, true)
|
25
25
|
#
|
26
26
|
def initialize type, name, qualifier_set=nil, default=nil
|
27
27
|
@default = default
|
data/lib/cim/qualifier.rb
CHANGED
@@ -15,6 +15,10 @@ module CIM
|
|
15
15
|
# Qualifier can be seen as an instance of QualifierDeclaration
|
16
16
|
#
|
17
17
|
class Qualifier
|
18
|
+
def self.normalize type
|
19
|
+
(type.is_a? self) ? type : self.new(type)
|
20
|
+
end
|
21
|
+
|
18
22
|
attr_reader :declaration, :value, :flavor
|
19
23
|
#
|
20
24
|
# call-seq:
|
@@ -73,8 +77,8 @@ module CIM
|
|
73
77
|
def to_s
|
74
78
|
s = "#{@declaration.name.capitalize}"
|
75
79
|
case @value
|
76
|
-
when nil
|
77
|
-
when Array
|
80
|
+
when nil
|
81
|
+
when Array
|
78
82
|
s << " {#{@value.join(', ')}}"
|
79
83
|
else
|
80
84
|
s << "(#{@value.inspect})"
|
@@ -22,7 +22,7 @@ module CIM
|
|
22
22
|
#
|
23
23
|
# A QualifierDeclaration declares a qualifier by
|
24
24
|
# name:: (String)
|
25
|
-
# type:: (Type) (defaults to
|
25
|
+
# type:: (Type) (defaults to boolean)
|
26
26
|
# default value:: (Variant) (defaults to false)
|
27
27
|
# scopes:: (QualifierScopes) (where the qualifier can be used)
|
28
28
|
# flavor:: (QualifierFlavors) (how the qualifier is applied)
|
@@ -34,7 +34,7 @@ module CIM
|
|
34
34
|
#
|
35
35
|
# Create a new QualifierDeclaration
|
36
36
|
#
|
37
|
-
def initialize name, type = :
|
37
|
+
def initialize name, type = :boolean, default = false, scopes = nil, flavors = nil
|
38
38
|
@type = (type.kind_of? Type) ? type : Type.new(type)
|
39
39
|
@default = (default.nil? || default.is_a?(CIM::Variant)) ? default : CIM::Variant.new(@type, default)
|
40
40
|
@scopes = scopes
|
@@ -32,9 +32,8 @@ module CIM
|
|
32
32
|
# tosubclass:: The qualifier is inherited by any subclass (default: true)
|
33
33
|
# translatable:: Marks a qualifier value for localization (default: false)
|
34
34
|
#
|
35
|
-
class QualifierFlavors
|
35
|
+
class QualifierFlavors < ::Array
|
36
36
|
FLAVORS = [:amended, :enableoverride, :disableoverride, :restricted, :toinstance, :tosubclass, :translatable]
|
37
|
-
attr_reader :flavors
|
38
37
|
#
|
39
38
|
# Create QualifierFlavors with an initial flavor. More flavors can be added through the << method.
|
40
39
|
#
|
@@ -46,7 +45,6 @@ module CIM
|
|
46
45
|
# The flavor can be named as a string or a symbol.
|
47
46
|
#
|
48
47
|
def initialize *flavors
|
49
|
-
@flavors = []
|
50
48
|
flavors.flatten.each do |flavor|
|
51
49
|
self << flavor
|
52
50
|
end
|
@@ -63,16 +61,10 @@ module CIM
|
|
63
61
|
# Raises QualifierFlavorError if its not an allowed flavor
|
64
62
|
#
|
65
63
|
def << flavor
|
66
|
-
|
64
|
+
super(normalize flavor)
|
67
65
|
self
|
68
66
|
end
|
69
67
|
#
|
70
|
-
# Number of flavors in the set
|
71
|
-
#
|
72
|
-
def size
|
73
|
-
@flavors.size
|
74
|
-
end
|
75
|
-
#
|
76
68
|
# Check if a specific flavor is included in the set
|
77
69
|
#
|
78
70
|
# call-seq:
|
@@ -83,14 +75,14 @@ module CIM
|
|
83
75
|
# Raises QualifierFlavorError if its not an allowed flavor
|
84
76
|
#
|
85
77
|
def include? flavor
|
86
|
-
|
78
|
+
super(normalize flavor)
|
87
79
|
end
|
88
80
|
alias includes? include?
|
89
81
|
#
|
90
82
|
# returns a string representation in MOF syntax format
|
91
83
|
#
|
92
84
|
def to_s
|
93
|
-
"Flavor(#{
|
85
|
+
"Flavor(#{self.join(', ')})"
|
94
86
|
end
|
95
87
|
private
|
96
88
|
#
|
data/lib/cim/qualifier_scopes.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
module CIM
|
11
11
|
|
12
|
-
class
|
12
|
+
class QualifierScopeError < ArgumentError
|
13
13
|
#
|
14
14
|
# Raised if wrong Scope passed
|
15
15
|
#
|
@@ -22,9 +22,8 @@ module CIM
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
class QualifierScopes
|
25
|
+
class QualifierScopes < ::Array
|
26
26
|
META_ELEMENTS = [ :schema, :class, :association, :indication, :qualifier, :property, :reference, :method, :parameter, :any ]
|
27
|
-
attr_reader :elements
|
28
27
|
#
|
29
28
|
# call-seq:
|
30
29
|
# QualifierScopes.new => qualifier_scopes
|
@@ -35,7 +34,6 @@ module CIM
|
|
35
34
|
# raises QualifierScopesError
|
36
35
|
#
|
37
36
|
def initialize *elements
|
38
|
-
@elements = []
|
39
37
|
elements.flatten.each do |element|
|
40
38
|
self << element
|
41
39
|
end
|
@@ -49,7 +47,7 @@ module CIM
|
|
49
47
|
# raises QualifierScopesError
|
50
48
|
#
|
51
49
|
def << element
|
52
|
-
|
50
|
+
self.push(normalize element)
|
53
51
|
self
|
54
52
|
end
|
55
53
|
#
|
@@ -61,26 +59,21 @@ module CIM
|
|
61
59
|
# raises QualifierScopesError
|
62
60
|
#
|
63
61
|
def include? element
|
64
|
-
|
62
|
+
super(normalize element)
|
65
63
|
end
|
66
64
|
alias includes? include?
|
67
|
-
|
68
|
-
# Number of scopes
|
69
|
-
#
|
70
|
-
def size
|
71
|
-
@elements.size
|
72
|
-
end
|
65
|
+
|
73
66
|
#
|
74
67
|
# returns a string representation in MOF syntax format
|
75
68
|
#
|
76
69
|
def to_s
|
77
|
-
"Scope(#{
|
70
|
+
"Scope(#{self.join(', ')})"
|
78
71
|
end
|
79
72
|
private
|
80
73
|
def normalize element
|
81
74
|
element.downcase! if element.is_a?(String)
|
82
75
|
e = element.to_sym
|
83
|
-
raise
|
76
|
+
raise QualifierScopeError.new(element) unless META_ELEMENTS.include?(e)
|
84
77
|
e
|
85
78
|
end
|
86
79
|
end
|
data/lib/cim/qualifier_set.rb
CHANGED
@@ -12,17 +12,24 @@ module CIM
|
|
12
12
|
# Set of Qualifier
|
13
13
|
#
|
14
14
|
class QualifierSet < ::Array
|
15
|
+
def self.normalize type
|
16
|
+
(type.is_a? self) ? type : self.new(type)
|
17
|
+
end
|
18
|
+
|
19
|
+
|
15
20
|
def initialize *args
|
16
21
|
super 0
|
17
22
|
args.flatten.each do |q|
|
18
23
|
case q
|
19
|
-
when QualifierDeclaration
|
20
|
-
|
24
|
+
when QualifierDeclaration
|
25
|
+
q = Qualifier.new q
|
26
|
+
when Qualifier
|
27
|
+
# nothing
|
21
28
|
else
|
22
29
|
q = Qualifier.new(QualifierDeclaration.new q)
|
23
30
|
end
|
24
31
|
self << q
|
25
|
-
end
|
32
|
+
end if args
|
26
33
|
end
|
27
34
|
#
|
28
35
|
# check if qualifier exists
|
@@ -51,9 +58,7 @@ module CIM
|
|
51
58
|
q == qualifier.declaration
|
52
59
|
when CIM::QualifierDeclaration
|
53
60
|
q == qualifier
|
54
|
-
when String
|
55
|
-
q.declaration == qualifier
|
56
|
-
when Symbol
|
61
|
+
when String, Symbol
|
57
62
|
q.declaration == qualifier
|
58
63
|
else
|
59
64
|
raise "Unknown parameter in #{self.class}[]"
|
data/lib/cim/type.rb
CHANGED
@@ -23,22 +23,29 @@ module CIM
|
|
23
23
|
# uint64:: Unsigned 64-bit integer
|
24
24
|
# sint64:: Signed 64-bit integer
|
25
25
|
# string:: UCS-2 string
|
26
|
-
#
|
26
|
+
# boolean:: Boolean
|
27
27
|
# real32:: IEEE 4-byte floating-point
|
28
28
|
# real64:: IEEE 8-byte floating-point
|
29
|
-
#
|
29
|
+
# dateTime:: A string containing a date-time
|
30
30
|
# reference:: Strongly typed reference
|
31
31
|
# char16:: 16-bit UCS-2 character
|
32
|
-
# datetime:: Timestamp
|
33
32
|
# void:: -- allowed for WMI only
|
34
33
|
#
|
35
34
|
#
|
36
35
|
class Type
|
37
|
-
|
36
|
+
def self.normalize type
|
37
|
+
(type.is_a? self) ? type : self.new(type)
|
38
|
+
end
|
39
|
+
|
40
|
+
TYPES = [:null,:void,:boolean,:char16,:string,:uint8,:sint8,:uint16,:sint16,:uint32,:sint32,:uint64,:sint64,:real32,:real64,:dateTime,:class,:reference,:array]
|
41
|
+
NORMALIZE = {
|
42
|
+
:bool => :boolean,
|
43
|
+
:datetime => :dateTime
|
44
|
+
}
|
38
45
|
MATCHES = {
|
39
46
|
:null => [],
|
40
47
|
:void => [], # WMI
|
41
|
-
:
|
48
|
+
:boolean => [],
|
42
49
|
:char16 => [ :null, :string ],
|
43
50
|
:string => [ :null ],
|
44
51
|
:uint8 => [ :null ],
|
@@ -51,7 +58,7 @@ module CIM
|
|
51
58
|
:sint64 => [ :null, :sint8, :sint16, :sint32 ],
|
52
59
|
:real32 => [ :null ],
|
53
60
|
:real64 => [ :null, :real32 ],
|
54
|
-
:
|
61
|
+
:dateTime => [ :null ],
|
55
62
|
:class => [ :null ],
|
56
63
|
:reference => [ :null ],
|
57
64
|
:array => [ :null ]
|
@@ -60,13 +67,17 @@ module CIM
|
|
60
67
|
#
|
61
68
|
# Basic types are created by-symbol or by-name
|
62
69
|
#
|
63
|
-
# CIM::Type.new(:
|
70
|
+
# CIM::Type.new(:boolean) == CIM::Type.new("boolean")
|
64
71
|
#
|
65
72
|
def initialize type
|
66
73
|
type.downcase! if type.is_a? String
|
67
74
|
@type = type.to_sym
|
75
|
+
@type = NORMALIZE[@type] || @type
|
68
76
|
raise TypeError.new("#{type}") unless TYPES.include? @type
|
69
77
|
end
|
78
|
+
def array?
|
79
|
+
false
|
80
|
+
end
|
70
81
|
#
|
71
82
|
# returns a string representation in MOF syntax format
|
72
83
|
#
|
@@ -84,38 +95,49 @@ module CIM
|
|
84
95
|
#
|
85
96
|
def == t
|
86
97
|
case t
|
87
|
-
when Type
|
88
|
-
when Symbol
|
89
|
-
when String
|
98
|
+
when Type then t.type == @type
|
99
|
+
when Symbol then t == @type
|
100
|
+
when String then t.downcase == @type.to_s
|
90
101
|
else
|
91
102
|
false
|
92
103
|
end
|
93
104
|
end
|
94
105
|
private
|
95
106
|
def matches_value type,value
|
96
|
-
|
107
|
+
# puts "matches_value >#{type}<{#{type.class}}.matches_value?>#{value.inspect}<{#{value.class}}"
|
108
|
+
if value.class === Class
|
109
|
+
return case value.to_s
|
110
|
+
when "NilClass" then type == :null
|
111
|
+
when "FalseClass", "TrueClass" then type == :boolean
|
112
|
+
when "Integer", "Fixnum" then [:uint8,:sint8,:uint16,:sint16,:uint32,:sint32,:uint64,:sint64].include? type
|
113
|
+
when "Float" then [:real32, :real64].include? type
|
114
|
+
when "String" then type == :string
|
115
|
+
when "Array" then type.array?
|
116
|
+
else
|
117
|
+
false
|
118
|
+
end
|
119
|
+
end
|
97
120
|
case value
|
98
121
|
when NilClass
|
99
122
|
true
|
100
123
|
when FalseClass, TrueClass
|
101
|
-
type == :
|
102
|
-
when Integer
|
124
|
+
type == :boolean
|
125
|
+
when Integer, Fixnum
|
103
126
|
case type
|
104
|
-
when :uint8
|
105
|
-
when :sint8
|
106
|
-
when :uint16
|
107
|
-
when :sint16
|
108
|
-
when :uint32
|
109
|
-
when :sint32
|
110
|
-
when :uint64
|
111
|
-
when :sint64
|
127
|
+
when :uint8 then (0..255) === value
|
128
|
+
when :sint8 then (-128..127) === value
|
129
|
+
when :uint16 then (0..65535) === value
|
130
|
+
when :sint16 then (-32768..32767) === value
|
131
|
+
when :uint32 then (0..4294967295) === value
|
132
|
+
when :sint32 then (-2147483648..2147483647) === value
|
133
|
+
when :uint64 then (0..18446744073709551615) === value
|
134
|
+
when :sint64 then (-9223372036854775808..9223372036854775807) === value
|
112
135
|
else
|
113
136
|
false
|
114
137
|
end
|
115
138
|
when Float
|
116
139
|
case type
|
117
|
-
when :real32:
|
118
|
-
when :real64: true
|
140
|
+
when :real32, :real64 then true
|
119
141
|
else
|
120
142
|
false
|
121
143
|
end
|
@@ -162,6 +184,9 @@ module CIM
|
|
162
184
|
@size = size
|
163
185
|
super type
|
164
186
|
end
|
187
|
+
def array?
|
188
|
+
true
|
189
|
+
end
|
165
190
|
#
|
166
191
|
# An array is equal to any other array, regardless of the enclosed type
|
167
192
|
#
|
data/lib/cim/variant.rb
CHANGED
@@ -31,13 +31,13 @@ module CIM
|
|
31
31
|
def == v
|
32
32
|
# $stderr.puts "<#{@type}>#{self} == #{v.class}"
|
33
33
|
case v
|
34
|
-
when NilClass
|
35
|
-
when FalseClass
|
36
|
-
when TrueClass
|
37
|
-
when String
|
38
|
-
when Integer
|
39
|
-
when Float
|
40
|
-
when CIM::Variant
|
34
|
+
when NilClass then @type == :null && @value.nil?
|
35
|
+
when FalseClass then @type == :boolean && !@value
|
36
|
+
when TrueClass then @type == :boolean && @value
|
37
|
+
when String then @type == :string && @value == v
|
38
|
+
when Integer then @type == :int && @value == v
|
39
|
+
when Float then @type == :real && @value == v
|
40
|
+
when CIM::Variant then @type == v.type && @value == v.value
|
41
41
|
else
|
42
42
|
false
|
43
43
|
end
|
data/test/test_method.rb
CHANGED
@@ -15,10 +15,10 @@ class MethodTest < Test::Unit::TestCase
|
|
15
15
|
assert_equal false, m.to_s.empty?
|
16
16
|
end
|
17
17
|
def test_nodesc
|
18
|
-
m = CIM::Method.new :
|
18
|
+
m = CIM::Method.new :boolean, "Foo"
|
19
19
|
assert m
|
20
20
|
assert_equal "Foo", m.name
|
21
|
-
assert_equal m.type, :
|
21
|
+
assert_equal m.type, :boolean
|
22
22
|
# assert_equal nil, m.description
|
23
23
|
end
|
24
24
|
def test_raise
|
data/test/test_property.rb
CHANGED
@@ -5,7 +5,7 @@ require "cim"
|
|
5
5
|
|
6
6
|
class PropertyTest < Test::Unit::TestCase
|
7
7
|
def test_init
|
8
|
-
p = CIM::Property.new :string, "String", CIM::QualifierDeclaration.new(:key, :
|
8
|
+
p = CIM::Property.new :string, "String", CIM::QualifierDeclaration.new(:key, :boolean), CIM::QualifierDeclaration.new(:description, :string, "This is a string", :class)
|
9
9
|
assert p
|
10
10
|
assert p.is_a? CIM::Property
|
11
11
|
assert_equal "String", p.name
|
data/test/test_qualifier.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__),"..","lib")
|
2
|
+
|
3
|
+
require "test/unit"
|
4
|
+
require "cim"
|
5
|
+
|
6
|
+
class QualifierFlavorsTest < Test::Unit::TestCase
|
7
|
+
def test_new
|
8
|
+
assert CIM::QualifierFlavors.new
|
9
|
+
f = CIM::QualifierFlavors.new(:enableoverride)
|
10
|
+
assert f
|
11
|
+
assert_equal 1,f.size
|
12
|
+
assert f.include? :enableoverride
|
13
|
+
end
|
14
|
+
def test_raise
|
15
|
+
assert_raise CIM::QualifierFlavorError do
|
16
|
+
CIM::QualifierFlavors.new(:unknown)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__),"..","lib")
|
2
|
+
|
3
|
+
require "test/unit"
|
4
|
+
require "cim"
|
5
|
+
|
6
|
+
class QualifierScopesTest < Test::Unit::TestCase
|
7
|
+
def test_new
|
8
|
+
assert CIM::QualifierScopes.new
|
9
|
+
s = CIM::QualifierScopes.new(:association)
|
10
|
+
assert s
|
11
|
+
assert_equal 1,s.size
|
12
|
+
assert s.include? :association
|
13
|
+
end
|
14
|
+
def test_raise
|
15
|
+
assert_raise CIM::QualifierScopeError do
|
16
|
+
CIM::QualifierScopes.new(:unknown)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/test/test_qualifier_set.rb
CHANGED
@@ -5,11 +5,11 @@ require "cim"
|
|
5
5
|
|
6
6
|
class QualifierSetTest < Test::Unit::TestCase
|
7
7
|
def setup
|
8
|
-
|
8
|
+
qboolean = CIM::QualifierDeclaration.new("flag")
|
9
9
|
qint = CIM::QualifierDeclaration.new("value", :uint32)
|
10
10
|
qstring = CIM::QualifierDeclaration.new("description", :string, "This is a description")
|
11
11
|
@qualifiers = CIM::QualifierSet.new
|
12
|
-
@qualifiers << CIM::Qualifier.new(
|
12
|
+
@qualifiers << CIM::Qualifier.new(qboolean)
|
13
13
|
@qualifiers << CIM::Qualifier.new(qint)
|
14
14
|
@qualifiers << CIM::Qualifier.new(qstring)
|
15
15
|
end
|
@@ -18,22 +18,22 @@ class QualifierSetTest < Test::Unit::TestCase
|
|
18
18
|
end
|
19
19
|
def test_prefill
|
20
20
|
q = CIM::QualifierSet.new "a", :b
|
21
|
-
|
21
|
+
assert_equal 2, q.size
|
22
22
|
assert q.include?( "a" )
|
23
|
-
assert q.include?( "b", :
|
23
|
+
assert q.include?( "b", :boolean )
|
24
24
|
end
|
25
25
|
def test_include
|
26
26
|
assert @qualifiers.include?( :flag )
|
27
27
|
assert @qualifiers.include?( "flag" )
|
28
|
-
assert @qualifiers.include?( "flag", :
|
29
|
-
assert @qualifiers.include?( "flag", "
|
28
|
+
assert @qualifiers.include?( "flag", :boolean )
|
29
|
+
assert @qualifiers.include?( "flag", "boolean" )
|
30
30
|
assert !@qualifiers.include?( "flag", :string )
|
31
31
|
end
|
32
32
|
def test_access
|
33
33
|
assert @qualifiers[:flag]
|
34
34
|
assert @qualifiers["flag"]
|
35
|
-
assert @qualifiers["flag", :
|
36
|
-
assert @qualifiers["flag", "
|
35
|
+
assert @qualifiers["flag", :boolean]
|
36
|
+
assert @qualifiers["flag", "boolean"]
|
37
37
|
assert !@qualifiers["flag", :string]
|
38
38
|
end
|
39
39
|
end
|
data/test/test_type.rb
CHANGED
@@ -8,10 +8,26 @@ class TypeTest < Test::Unit::TestCase
|
|
8
8
|
t = CIM::Type.new :null
|
9
9
|
assert t
|
10
10
|
assert_equal "null", t.to_s
|
11
|
+
assert !t.array?
|
11
12
|
end
|
12
13
|
def test_raise
|
13
14
|
assert_raise TypeError do
|
14
15
|
t = CIM::Type.new :foo
|
15
16
|
end
|
16
17
|
end
|
18
|
+
def test_alias
|
19
|
+
assert_equal CIM::Type.new(:bool), CIM::Type.new(:boolean)
|
20
|
+
assert_equal CIM::Type.new(:datetime), CIM::Type.new(:dateTime)
|
21
|
+
end
|
22
|
+
def test_normalize
|
23
|
+
assert_equal CIM::Type.new(:null), CIM::Type.normalize(:null)
|
24
|
+
assert_equal CIM::Type.normalize(:null), CIM::Type.normalize(CIM::Type.new(:null))
|
25
|
+
end
|
26
|
+
def test_matches
|
27
|
+
assert CIM::Type.new(:null).matches? nil
|
28
|
+
assert CIM::Type.new(:uint64).matches? 1
|
29
|
+
assert CIM::Type.new(:uint64).matches? Integer
|
30
|
+
assert CIM::Type.new(:real32).matches? 3.1415
|
31
|
+
assert CIM::Type.new(:string).matches? String
|
32
|
+
end
|
17
33
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.5.0
|
7
|
+
- 1
|
8
|
+
- 3
|
9
|
+
version: "1.3"
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- "Klaus K\xC3\xA4mpf"
|
@@ -15,10 +14,37 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date:
|
17
|
+
date: 2012-03-13 00:00:00 +01:00
|
19
18
|
default_executable:
|
20
|
-
dependencies:
|
21
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rake
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: bundler
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
22
48
|
description: |-
|
23
49
|
Instances of Cim classes are used to define a CIM
|
24
50
|
schema, often represented as a .mof file. See
|
@@ -41,10 +67,8 @@ files:
|
|
41
67
|
- Rakefile
|
42
68
|
- cim.gemspec
|
43
69
|
- lib/cim.rb
|
44
|
-
- lib/cim/association.rb
|
45
70
|
- lib/cim/class.rb
|
46
71
|
- lib/cim/class_feature.rb
|
47
|
-
- lib/cim/indication.rb
|
48
72
|
- lib/cim/instance.rb
|
49
73
|
- lib/cim/method.rb
|
50
74
|
- lib/cim/named_element.rb
|
@@ -64,6 +88,8 @@ files:
|
|
64
88
|
- test/test_method.rb
|
65
89
|
- test/test_property.rb
|
66
90
|
- test/test_qualifier.rb
|
91
|
+
- test/test_qualifier_flavors.rb
|
92
|
+
- test/test_qualifier_scopes.rb
|
67
93
|
- test/test_qualifier_set.rb
|
68
94
|
- test/test_reference.rb
|
69
95
|
- test/test_type.rb
|
@@ -97,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
123
|
requirements: []
|
98
124
|
|
99
125
|
rubyforge_project: cim
|
100
|
-
rubygems_version: 1.5.
|
126
|
+
rubygems_version: 1.5.0
|
101
127
|
signing_key:
|
102
128
|
specification_version: 3
|
103
129
|
summary: A pure-Ruby implementation of the CIM meta model
|
@@ -106,6 +132,8 @@ test_files:
|
|
106
132
|
- test/test_method.rb
|
107
133
|
- test/test_property.rb
|
108
134
|
- test/test_qualifier.rb
|
135
|
+
- test/test_qualifier_flavors.rb
|
136
|
+
- test/test_qualifier_scopes.rb
|
109
137
|
- test/test_qualifier_set.rb
|
110
138
|
- test/test_reference.rb
|
111
139
|
- test/test_type.rb
|
data/lib/cim/association.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# cim/association.rb - class CIM::Association
|
3
|
-
#
|
4
|
-
# A pure-Ruby implementation of the CIM meta model.
|
5
|
-
#
|
6
|
-
# Copyright (c) 2010 Klaus Kämpf <kkaempf@suse.de>
|
7
|
-
#
|
8
|
-
# Licensed under the Ruby license
|
9
|
-
#
|
10
|
-
module CIM
|
11
|
-
#
|
12
|
-
# An Association is a Class with the :association Qualifier
|
13
|
-
#
|
14
|
-
# Only such a class can have Reference properties
|
15
|
-
#
|
16
|
-
class Association < Class
|
17
|
-
#
|
18
|
-
# Create Association class
|
19
|
-
#
|
20
|
-
# call-seq:
|
21
|
-
# Association.new("AssocClass")
|
22
|
-
# Association.new("AssocClass", qualifiers)
|
23
|
-
# Association.new("AssocClass", qualifiers, "assoc_class")
|
24
|
-
# Association.new("AssocClass", qualifiers, "assoc_class", "SuperClass")
|
25
|
-
# Association.new("AssocClass", qualifiers, "assoc_class", "SuperClass", features)
|
26
|
-
#
|
27
|
-
def initialize name, qualifiers = nil, alias_name = nil, superclass = nil, features = nil
|
28
|
-
raise "Association needs 'association' qualifier" unless qualifiers.include?(:association, :bool)
|
29
|
-
super name, qualifiers, alias_name, superclass, features
|
30
|
-
end
|
31
|
-
#
|
32
|
-
# true if class has associations (association provider)
|
33
|
-
#
|
34
|
-
def association?
|
35
|
-
true
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/cim/indication.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# cim/indication.rb - class CIM::Indication
|
3
|
-
#
|
4
|
-
# A pure-Ruby implementation of the CIM meta model.
|
5
|
-
#
|
6
|
-
# Copyright (c) 2010 Klaus Kämpf <kkaempf@suse.de>
|
7
|
-
#
|
8
|
-
# Licensed under the Ruby license
|
9
|
-
#
|
10
|
-
module CIM
|
11
|
-
#
|
12
|
-
# Indication is a Class whose Instances are sending asynchronous notifications
|
13
|
-
#
|
14
|
-
class Indication < Class
|
15
|
-
#
|
16
|
-
# true if class has indications (indication provider)
|
17
|
-
#
|
18
|
-
def indication?
|
19
|
-
true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|