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