Class: Genprovider::RDoc

Inherits:
Object
  • Object
show all
Defined in:
lib/genprovider/rdoc.rb

Instance Method Summary collapse

Constructor Details

#initialize(c, out) ⇒ RDoc

generate provider code for class ‘c’



136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/genprovider/rdoc.rb', line 136

def initialize c, out
  @klass = c
  @out = out
  @out.puts "= Documentation for #{c.name}"
  each_parent do |k|
	@out.puts "* #{k.name}"
  end
  doc_class
  each_parent do |k|
	doc_class k
  end
end

Instance Method Details

#description(element) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/genprovider/rdoc.rb', line 11

def description element
  p = element.qualifiers["description", :string]
  return unless p
  p.value.split("\n").each do |l|
	@out.puts l
	@out.puts
  end
end

#doc_class(c = nil) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/genprovider/rdoc.rb', line 109

def doc_class c = nil
  c = @klass unless c
  @out.puts "= #{c.name}"
  description c
  
  if c.superclass
	@out.puts
	@out.puts "=== Superclass: #{c.superclass}"
  end

  doc_features "==Properties", c.features, CIM::Property
  doc_features "==References", c.features, CIM::Reference
  doc_features "==Methods", c.features, CIM::Method
end

#doc_feature(feature) ⇒ Object

make feature doc



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/genprovider/rdoc.rb', line 24

def doc_feature feature
  k = feature.key? ? " [Key]" : nil
  @out.puts "== #{feature.name} : #{feature.type.to_s}#{k}"
  description feature
  @out.puts
  vm = feature.qualifiers["valuemap"]
  vs = feature.qualifiers["values"]
  if vm && vs
	@out.puts "* Mapped values"
	vm = vm.value
	vs = vs.value
	loop do
	  m = vm.shift
	  s = vs.shift
	  @out.puts "  * #{m} -> #{s}"
	  break if vm.empty? || vs.empty?
	end
  end
  feature.qualifiers.each do |q|
	n = q.name.downcase
	next if n == "description"
	next if n == "values" || n == "valuemap"
	@out.puts "* #{q}"
  end
  @out.puts

  return unless feature.method?
  args = nil
  feature.parameters.each do |p|
	args ||= []
	if p.qualifiers.include?(:out,:bool)
	  args << "#{p.name.decamelize}_out"
	else
	  args << p.name.decamelize
	end
  end
  n = feature.name.decamelize
  @out.puts "* #{n}(#{args})"
end

#doc_features(header, features, match) ⇒ Object

generate provider code for features matching match



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/genprovider/rdoc.rb', line 92

def doc_features header, features, match
  features.each do |f|
	next unless f.instance_of? match
	if header
#	  @out.puts header
	  header = nil
	end
	case f
	when CIM::Property then doc_property f
	when CIM::Reference then doc_reference f
	when CIM::Method then doc_method f
	else
	  raise "Unknown feature class #{f.class}"
	end
  end
end

#doc_method(method) ⇒ Object

generate code for method



84
85
86
# File 'lib/genprovider/rdoc.rb', line 84

def doc_method method
  doc_feature method
end

#doc_property(property) ⇒ Object

generate code for property



68
69
70
# File 'lib/genprovider/rdoc.rb', line 68

def doc_property property
  doc_feature property
end

#doc_reference(reference) ⇒ Object

generate code for reference



76
77
78
# File 'lib/genprovider/rdoc.rb', line 76

def doc_reference reference
  doc_feature reference
end

#each_parentObject



124
125
126
127
128
129
130
# File 'lib/genprovider/rdoc.rb', line 124

def each_parent
  parent = @klass.parent
  while parent
	yield parent
	parent = parent.parent
  end
end