class Genprovider::Class
Public Class Methods
keyargs(c, out, first = true)
click to toggle source
# File lib/genprovider/class.rb, line 17 def self.keyargs c, out, first = true keyargs c.parent, first, out if c.parent c.each_key do |k| if first first = false else out.write ", " end out.write(k.name.decamelize) end end
mkdescription(out, element)
click to toggle source
# File lib/genprovider/class.rb, line 11 def self.mkdescription out, element p = element.qualifiers["description", :string] out.comment out.comment(p.value).comment if p end
new(c, out)
click to toggle source
generate provider code for class ācā
# File lib/genprovider/class.rb, line 165 def initialize c, out out.comment out.comment "Generated by genprovider" out.comment out.puts("require 'cmpi'").puts out.puts("module Cmpi").inc Genprovider::Class.mkdescription out, c if c.superclass out.puts "d = File.dirname(__FILE__)" out.puts "$: << d unless $:.include? d" out.puts "require '#{c.superclass.decamelize}'" end out.comment.comment "Properties:" all_features(c, :keys) { |comment| out.comment "[key] #{comment}" } all_features(c, :nokeys) { |comment| out.comment comment } out.comment out.printf("class #{c.name}") out.write(" < #{c.superclass}") if c.superclass out.puts.inc # class functions mkstatic c, out # initializer mkinitialize c, out # normal properties mkfeatures c.features, out, CIM::Property # reference properties mkfeatures c.features, out, CIM::Reference # methods mkfeatures c.features, out, CIM::Method out.end # class out.end # module end
Public Instance Methods
all_features(klass, option) { |"- #{type} #{name} (-> #{name})"| ... }
click to toggle source
yield class features recursively
which => nil : all :keys : keys only :nokeys : nokeys only
# File lib/genprovider/class.rb, line 151 def all_features(klass, option) while klass klass.features.each do |f| next if option == :nokeys && f.key? next if option == :keys && !f.key? yield "- #{f.type} #{f.name} (-> #{klass.name})" end klass = klass.parent end end
mkdef(out, feature)
click to toggle source
make feature definition
# File lib/genprovider/class.rb, line 68 def mkdef out, feature Genprovider::Class.mkdescription out, feature case feature when CIM::Property # skip when CIM::Reference then out.comment "Reference" when CIM::Method then out.comment "Method" else raise "Unknown feature class #{feature.class}" end out.comment feature.type.to_s + " : " + feature.name out.comment "*Key*" if feature.key? out.comment args = nil if feature.method? feature.parameters.each do |p| args ||= [] if p.qualifiers.include?(:out,:bool) args << "#{p.name.decamelize}_out" else args << p.name.decamelize end end end n = feature.name.decamelize out.def n, args out.puts "@#{n}" out.end if feature.property? && feature.qualifiers.include?(:write) out.def "#{n}=", "_arg" out.puts "@#{n} = _arg" out.end end end
mkfeatures(features, out, match)
click to toggle source
generate provider code for features matching match
# File lib/genprovider/class.rb, line 132 def mkfeatures features, out, match features.each do |f| next unless f.instance_of? match case f when CIM::Property then mkproperty f, out when CIM::Reference then mkreference f, out when CIM::Method then mkmethod f, out else raise "Unknown feature class #{f.class}" end end end
mkinitialize(c, out)
click to toggle source
make initializer
# File lib/genprovider/class.rb, line 33 def mkinitialize c, out out.def "initialize", "reference", "properties" if c.parent out.puts "super reference,properties" end out.end end
mkmethod(method, out)
click to toggle source
generate code for method
# File lib/genprovider/class.rb, line 124 def mkmethod method, out mkdef out, method end
mkproperty(property, out)
click to toggle source
generate code for property
# File lib/genprovider/class.rb, line 108 def mkproperty property, out mkdef out, property end
mkreference(reference, out)
click to toggle source
generate code for reference
# File lib/genprovider/class.rb, line 116 def mkreference reference, out mkdef out, reference end
mkstatic(c, out)
click to toggle source
make static methods
# File lib/genprovider/class.rb, line 46 def mkstatic c, out out.comment "each: yield CMPIObjectPath references" out.comment " full => false: set only key properties (instance name)" out.comment " true: with full information to create instances" out.def "self.each", "reference", "properties", "full = false" out.comment "Retrieve names, adapt reference, and yield CMPIObjectPath" out.comment out.comment "YOUR CODE HERE" out.comment out.end out.def "self.delete", "reference", "properties = nil" out.comment "Remove by reference" out.comment out.comment "YOUR CODE HERE" out.comment out.end end