puppet-strings 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +18 -3
  3. data/Gemfile +3 -2
  4. data/Rakefile +5 -0
  5. data/lib/puppet-strings.rb +10 -1
  6. data/lib/puppet-strings/describe.rb +68 -0
  7. data/lib/puppet-strings/json.rb +0 -38
  8. data/lib/puppet-strings/markdown/base.rb +18 -16
  9. data/lib/puppet-strings/markdown/templates/function.erb +26 -0
  10. data/lib/puppet-strings/markdown/templates/resource_type.erb +4 -0
  11. data/lib/puppet-strings/tasks/generate.rb +7 -1
  12. data/lib/puppet-strings/version.rb +1 -1
  13. data/lib/puppet-strings/yard/code_objects/class.rb +1 -1
  14. data/lib/puppet-strings/yard/code_objects/defined_type.rb +1 -1
  15. data/lib/puppet-strings/yard/code_objects/function.rb +3 -3
  16. data/lib/puppet-strings/yard/code_objects/plan.rb +1 -1
  17. data/lib/puppet-strings/yard/code_objects/provider.rb +1 -1
  18. data/lib/puppet-strings/yard/code_objects/type.rb +3 -2
  19. data/lib/puppet-strings/yard/handlers.rb +1 -0
  20. data/lib/puppet-strings/yard/handlers/ruby/base.rb +11 -0
  21. data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +1 -9
  22. data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +1 -9
  23. data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +1 -1
  24. data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +130 -0
  25. data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +56 -0
  26. data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +3 -115
  27. data/lib/puppet-strings/yard/parsers/json/parser.rb +3 -1
  28. data/lib/puppet-strings/yard/tags/overload_tag.rb +1 -1
  29. data/lib/puppet-strings/yard/util.rb +48 -0
  30. data/lib/puppet/face/strings.rb +66 -1
  31. data/spec/fixtures/unit/markdown/output.md +64 -0
  32. data/spec/fixtures/unit/markdown/output_with_plan.md +64 -0
  33. data/spec/spec_helper.rb +1 -0
  34. data/spec/unit/puppet-strings/describe_spec.rb +141 -0
  35. data/spec/unit/puppet-strings/json_spec.rb +65 -11
  36. data/spec/unit/puppet-strings/markdown_spec.rb +13 -0
  37. data/spec/unit/puppet-strings/yard/handlers/json/task_handler_spec.rb +4 -12
  38. data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +1 -1
  39. data/spec/unit/puppet-strings/yard/handlers/ruby/rsapi_handler_spec.rb +21 -0
  40. data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +26 -0
  41. data/spec/unit/puppet-strings/yard/parsers/json/parser_spec.rb +5 -3
  42. metadata +7 -6
  43. data/spec/fixtures/unit/json/output.json +0 -660
  44. data/spec/fixtures/unit/json/output_with_plan.json +0 -697
  45. data/spec/fixtures/unit/json/output_without_puppet_function.json +0 -480
@@ -22,7 +22,7 @@ class PuppetStrings::Yard::CodeObjects::Type < PuppetStrings::Yard::CodeObjects:
22
22
  # Represents a resource type parameter.
23
23
  class Parameter
24
24
  attr_reader :name, :values, :aliases
25
- attr_accessor :docstring, :isnamevar, :default, :data_type
25
+ attr_accessor :docstring, :isnamevar, :default, :data_type, :required_features
26
26
 
27
27
  # Initializes a resource type parameter or property.
28
28
  # @param [String] name The name of the parameter or property.
@@ -63,6 +63,7 @@ class PuppetStrings::Yard::CodeObjects::Type < PuppetStrings::Yard::CodeObjects:
63
63
  hash[:data_type] = data_type unless data_type.empty?
64
64
  hash[:aliases] = aliases unless aliases.empty?
65
65
  hash[:isnamevar] = true if isnamevar
66
+ hash[:required_features] = required_features if required_features
66
67
  hash[:default] = default if default
67
68
  hash
68
69
  end
@@ -140,7 +141,7 @@ class PuppetStrings::Yard::CodeObjects::Type < PuppetStrings::Yard::CodeObjects:
140
141
  hash[:name] = name
141
142
  hash[:file] = file
142
143
  hash[:line] = line
143
- hash[:docstring] = PuppetStrings::Json.docstring_to_hash(docstring)
144
+ hash[:docstring] = PuppetStrings::Yard::Util.docstring_to_hash(docstring)
144
145
  hash[:properties] = properties.map(&:to_hash) if properties && !properties.empty?
145
146
  hash[:parameters] = parameters.map(&:to_hash) if parameters && !parameters.empty?
146
147
  hash[:features] = features.map(&:to_hash) if features && !features.empty?
@@ -3,6 +3,7 @@ module PuppetStrings::Yard::Handlers
3
3
  # The module for custom Ruby YARD handlers.
4
4
  module Ruby
5
5
  require 'puppet-strings/yard/handlers/ruby/type_handler'
6
+ require 'puppet-strings/yard/handlers/ruby/type_extras_handler'
6
7
  require 'puppet-strings/yard/handlers/ruby/rsapi_handler'
7
8
  require 'puppet-strings/yard/handlers/ruby/provider_handler'
8
9
  require 'puppet-strings/yard/handlers/ruby/function_handler'
@@ -33,6 +33,17 @@ class PuppetStrings::Yard::Handlers::Ruby::Base < YARD::Handlers::Ruby::Base
33
33
  end
34
34
 
35
35
  source
36
+ when :regexp_literal
37
+ node.source
36
38
  end
37
39
  end
40
+
41
+ def get_name(statementobject, statementtype)
42
+ parameters = statementobject.parameters(false)
43
+ raise YARD::Parser::UndocumentableError, "Expected at least one parameter to #{statementtype} at #{statementobject.file}:#{statementobject.line}." if parameters.empty?
44
+ name = node_as_string(parameters.first)
45
+ raise YARD::Parser::UndocumentableError, "Expected a symbol or string literal for first parameter but found '#{parameters.first.type}' at #{statement.file}:#{statement.line}." unless name
46
+ name
47
+ end
48
+
38
49
  end
@@ -35,7 +35,7 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
35
35
  # Create and register the function object
36
36
  is_3x = module_name == 'Puppet::Parser::Functions' || module_name == 'newfunction'
37
37
  object = PuppetStrings::Yard::CodeObjects::Function.new(
38
- get_name,
38
+ get_name(statement, 'Puppet::Functions.create_function'),
39
39
  is_3x ? PuppetStrings::Yard::CodeObjects::Function::RUBY_3X : PuppetStrings::Yard::CodeObjects::Function::RUBY_4X
40
40
  )
41
41
  object.source = statement
@@ -68,14 +68,6 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
68
68
  end
69
69
 
70
70
  private
71
- def get_name
72
- parameters = statement.parameters(false)
73
- raise YARD::Parser::UndocumentableError, "Expected at least one parameter to Puppet::Functions.create_function at #{statement.file}:#{statement.line}." if parameters.empty?
74
- name = node_as_string(parameters.first)
75
- raise YARD::Parser::UndocumentableError, "Expected a symbol or string literal for first parameter but found '#{parameters.first.type}' at #{statement.file}:#{statement.line}." unless name
76
- name
77
- end
78
-
79
71
  def add_tags(object)
80
72
  log.warn "Missing documentation for Puppet function '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty? && object.tags.empty?
81
73
  log.warn "The docstring for Puppet 4.x function '#{object.name}' contains @param tags near #{object.file}:#{object.line}: parameter documentation should be made on the dispatch call." unless object.tags(:param).empty?
@@ -24,7 +24,7 @@ class PuppetStrings::Yard::Handlers::Ruby::ProviderHandler < PuppetStrings::Yard
24
24
  raise YARD::Parser::UndocumentableError, "Could not determine the resource type name for the provider defined at #{statement.file}:#{statement.line}." unless type_name
25
25
 
26
26
  # Register the object
27
- object = PuppetStrings::Yard::CodeObjects::Provider.new(type_name, get_name)
27
+ object = PuppetStrings::Yard::CodeObjects::Provider.new(type_name, get_name(statement, "'provide'"))
28
28
  register object
29
29
 
30
30
  # Extract the docstring
@@ -41,14 +41,6 @@ class PuppetStrings::Yard::Handlers::Ruby::ProviderHandler < PuppetStrings::Yard
41
41
  end
42
42
 
43
43
  private
44
- def get_name
45
- parameters = statement.parameters(false)
46
- raise YARD::Parser::UndocumentableError, "Expected at least one parameter to 'provide' at #{statement.file}:#{statement.line}." if parameters.empty?
47
- name = node_as_string(parameters.first)
48
- raise YARD::Parser::UndocumentableError, "Expected a symbol or string literal for first parameter but found '#{parameters.first.type}' at #{statement.file}:#{statement.line}." unless name
49
- name
50
- end
51
-
52
44
  def register_provider_docstring(object)
53
45
  # Walk the tree searching for assignments or calls to desc/doc=
54
46
  statement.traverse do |child|
@@ -71,7 +71,7 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
71
71
  array_from_node(node)
72
72
  when :var_ref
73
73
  var_ref_from_node(node)
74
- when :symbol, :symbol_literal, :label, :dyna_symbol, :string_literal
74
+ when :symbol, :symbol_literal, :label, :dyna_symbol, :string_literal, :regexp_literal
75
75
  node_as_string(node)
76
76
  else
77
77
  raise_parse_error("unexpected construct #{node.type}")
@@ -0,0 +1,130 @@
1
+ require 'puppet-strings/yard/handlers/ruby/base'
2
+
3
+ class PuppetStrings::Yard::Handlers::Ruby::TypeBase < PuppetStrings::Yard::Handlers::Ruby::Base
4
+ protected
5
+ def get_type_yard_object(name)
6
+ #Have to guess the path - if we create the object to get the true path from the code,
7
+ #it also shows up in the .at call - self registering?
8
+ guess_path = "puppet_types::#{name}"
9
+ object = YARD::Registry.at(guess_path)
10
+
11
+ return object unless object.nil?
12
+
13
+ #Didn't find, create instead
14
+ object = PuppetStrings::Yard::CodeObjects::Type.new(name)
15
+ register object
16
+ object
17
+ end
18
+
19
+ def find_docstring(node, kind)
20
+ # Walk the tree searching for assignments or calls to desc/doc=
21
+ node.traverse do |child|
22
+ if child.type == :assign
23
+ ivar = child.jump(:ivar)
24
+ next unless ivar != child && ivar.source == '@doc'
25
+ docstring = node_as_string(child[1])
26
+ log.error "Failed to parse docstring for #{kind} near #{child.file}:#{child.line}." and return nil unless docstring
27
+ return PuppetStrings::Yard::Util.scrub_string(docstring)
28
+ elsif child.is_a?(YARD::Parser::Ruby::MethodCallNode)
29
+ # Look for a call to a dispatch method with a block
30
+ next unless child.method_name &&
31
+ (child.method_name.source == 'desc' || child.method_name.source == 'doc=') &&
32
+ child.parameters(false).count == 1
33
+
34
+ docstring = node_as_string(child.parameters[0])
35
+ log.error "Failed to parse docstring for #{kind} near #{child.file}:#{child.line}." and return nil unless docstring
36
+ return PuppetStrings::Yard::Util.scrub_string(docstring)
37
+ end
38
+ end
39
+ log.warn "Missing a description for #{kind} at #{node.file}:#{node.line}."
40
+ nil
41
+ end
42
+
43
+ def create_parameter(name, node)
44
+ parameter = PuppetStrings::Yard::CodeObjects::Type::Parameter.new(name, find_docstring(node, "Puppet resource parameter '#{name}'"))
45
+ set_values(node, parameter)
46
+ parameter
47
+ end
48
+
49
+ def create_property(name, node)
50
+ property = PuppetStrings::Yard::CodeObjects::Type::Property.new(name, find_docstring(node, "Puppet resource property '#{name}'"))
51
+ set_values(node, property)
52
+ property
53
+ end
54
+
55
+ def set_values(node, object)
56
+ return unless node.block && node.block.count >= 2
57
+
58
+ node.block[1].children.each do |child|
59
+ next unless child.is_a?(YARD::Parser::Ruby::MethodCallNode) && child.method_name
60
+
61
+ method_name = child.method_name.source
62
+ parameters = child.parameters(false)
63
+
64
+ if method_name == 'newvalue'
65
+ next unless parameters.count >= 1
66
+ object.add(node_as_string(parameters[0]) || parameters[0].source)
67
+ elsif method_name == 'newvalues'
68
+ parameters.each do |p|
69
+ object.add(node_as_string(p) || p.source)
70
+ end
71
+ elsif method_name == 'aliasvalue'
72
+ next unless parameters.count >= 2
73
+ object.alias(node_as_string(parameters[0]) || parameters[0].source, node_as_string(parameters[1]) || parameters[1].source)
74
+ elsif method_name == 'defaultto'
75
+ next unless parameters.count >= 1
76
+ object.default = node_as_string(parameters[0]) || parameters[0].source
77
+ elsif method_name == 'isnamevar'
78
+ object.isnamevar = true
79
+ elsif method_name == 'defaultvalues' && object.name == 'ensure'
80
+ object.add('present')
81
+ object.add('absent')
82
+ object.default = 'present'
83
+ end
84
+ end
85
+
86
+ parameters = node.parameters(false)
87
+
88
+ if parameters.count >= 2
89
+ kvps = parameters[1].find_all { |kvp| kvp.count == 2 }
90
+ required_features_kvp = kvps.find { |kvp| node_as_string(kvp[0]) == 'required_features' }
91
+ object.required_features = node_as_string(required_features_kvp[1]) unless required_features_kvp.nil?
92
+ end
93
+
94
+ if object.is_a? PuppetStrings::Yard::CodeObjects::Type::Parameter
95
+ # Process the options for parameter base types
96
+ if parameters.count >= 2
97
+ parameters[1].each do |kvp|
98
+ next unless kvp.count == 2
99
+ next unless node_as_string(kvp[0]) == 'parent'
100
+ if kvp[1].source == 'Puppet::Parameter::Boolean'
101
+ object.add('true') unless object.values.include? 'true'
102
+ object.add('false') unless object.values.include? 'false'
103
+ object.add('yes') unless object.values.include? 'yes'
104
+ object.add('no') unless object.values.include? 'no'
105
+ end
106
+ break
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ def set_default_namevar(object)
113
+ return unless object.properties || object.parameters
114
+ default = nil
115
+ if object.properties
116
+ object.properties.each do |property|
117
+ return nil if property.isnamevar
118
+ default = property if property.name == 'name'
119
+ end
120
+ end
121
+ if object.parameters
122
+ object.parameters.each do |parameter|
123
+ return nil if parameter.isnamevar
124
+ default ||= parameter if parameter.name == 'name'
125
+ end
126
+ end
127
+ default.isnamevar = true if default
128
+ end
129
+ end
130
+
@@ -0,0 +1,56 @@
1
+ require 'puppet-strings/yard/handlers/helpers'
2
+ require 'puppet-strings/yard/handlers/ruby/type_base'
3
+ require 'puppet-strings/yard/code_objects'
4
+ require 'puppet-strings/yard/util'
5
+
6
+ # Implements the handler for Puppet resource type newparam/newproperty calls written in Ruby.
7
+ class PuppetStrings::Yard::Handlers::Ruby::TypeExtrasHandler < PuppetStrings::Yard::Handlers::Ruby::TypeBase
8
+ # The default docstring when ensurable is used without given a docstring.
9
+ DEFAULT_ENSURABLE_DOCSTRING = 'The basic property that the resource should be in.'.freeze
10
+
11
+ namespace_only
12
+ handles method_call(:newparam)
13
+ handles method_call(:newproperty)
14
+
15
+ process do
16
+
17
+ # Our entry point is a type newproperty/newparam compound statement like this:
18
+ # "Puppet::Type.type(:file).newparam(:content) do"
19
+ # We want to
20
+ # Verify the structure
21
+ # Capture the three parameters (e.g. type: 'file', newproperty or newparam?, name: 'source')
22
+ # Proceed with collecting data
23
+ # Either decorate an existing type object or store for future type object parsing
24
+
25
+ # Only accept calls to Puppet::Type.type(<type>).newparam/.newproperty
26
+ # e.g. "Puppet::Type.type(:file).newparam(:content) do" would yield:
27
+ # module_name: "Puppet::Type"
28
+ # method1_name: "type"
29
+ # typename: "file"
30
+ # method2_name: "newparam"
31
+ # propertyname: "content"
32
+
33
+ return unless (statement.count > 1) && (statement[0].children.count > 2)
34
+ module_name = statement[0].children[0].source
35
+ method1_name = statement[0].children[1].source
36
+ return unless (module_name == 'Puppet::Type' || module_name == 'Type') && method1_name == 'type'
37
+
38
+ typename = get_name(statement[0], 'Puppet::Type.type')
39
+ method2_name = caller_method
40
+ propertyname = get_name(statement, "Puppet::Type.type().#{method2_name}")
41
+
42
+ typeobject = get_type_yard_object(typename)
43
+
44
+ # node - what should it be here?
45
+ node = statement #?? not sure... test...
46
+
47
+ if method2_name == 'newproperty'
48
+ typeobject.add_property(create_property(propertyname, node))
49
+ elsif method2_name == 'newparam'
50
+ typeobject.add_parameter(create_parameter(propertyname, node))
51
+ end
52
+
53
+ # Set the default namevar
54
+ set_default_namevar(typeobject)
55
+ end
56
+ end
@@ -1,10 +1,10 @@
1
1
  require 'puppet-strings/yard/handlers/helpers'
2
- require 'puppet-strings/yard/handlers/ruby/base'
2
+ require 'puppet-strings/yard/handlers/ruby/type_base'
3
3
  require 'puppet-strings/yard/code_objects'
4
4
  require 'puppet-strings/yard/util'
5
5
 
6
6
  # Implements the handler for Puppet resource types written in Ruby.
7
- class PuppetStrings::Yard::Handlers::Ruby::TypeHandler < PuppetStrings::Yard::Handlers::Ruby::Base
7
+ class PuppetStrings::Yard::Handlers::Ruby::TypeHandler < PuppetStrings::Yard::Handlers::Ruby::TypeBase
8
8
  # The default docstring when ensurable is used without given a docstring.
9
9
  DEFAULT_ENSURABLE_DOCSTRING = 'The basic property that the resource should be in.'.freeze
10
10
 
@@ -17,8 +17,7 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeHandler < PuppetStrings::Yard::Ha
17
17
  module_name = statement[0].source
18
18
  return unless module_name == 'Puppet::Type' || module_name == 'Type'
19
19
 
20
- object = PuppetStrings::Yard::CodeObjects::Type.new(get_name)
21
- register object
20
+ object = get_type_yard_object(get_name(statement, 'Puppet::Type.newtype'))
22
21
 
23
22
  docstring = find_docstring(statement, "Puppet resource type '#{object.name}'")
24
23
  register_docstring(object, docstring, nil) if docstring
@@ -37,38 +36,6 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeHandler < PuppetStrings::Yard::Ha
37
36
  end
38
37
 
39
38
  private
40
- def get_name
41
- parameters = statement.parameters(false)
42
- raise YARD::Parser::UndocumentableError, "Expected at least one parameter to Puppet::Type.newtype at #{statement.file}:#{statement.line}." if parameters.empty?
43
- name = node_as_string(parameters.first)
44
- raise YARD::Parser::UndocumentableError, "Expected a symbol or string literal for first parameter but found '#{parameters.first.type}' at #{statement.file}:#{statement.line}." unless name
45
- name
46
- end
47
-
48
- def find_docstring(node, kind)
49
- # Walk the tree searching for assignments or calls to desc/doc=
50
- node.traverse do |child|
51
- if child.type == :assign
52
- ivar = child.jump(:ivar)
53
- next unless ivar != child && ivar.source == '@doc'
54
- docstring = node_as_string(child[1])
55
- log.error "Failed to parse docstring for #{kind} near #{child.file}:#{child.line}." and return nil unless docstring
56
- return PuppetStrings::Yard::Util.scrub_string(docstring)
57
- elsif child.is_a?(YARD::Parser::Ruby::MethodCallNode)
58
- # Look for a call to a dispatch method with a block
59
- next unless child.method_name &&
60
- (child.method_name.source == 'desc' || child.method_name.source == 'doc=') &&
61
- child.parameters(false).count == 1
62
-
63
- docstring = node_as_string(child.parameters[0])
64
- log.error "Failed to parse docstring for #{kind} near #{child.file}:#{child.line}." and return nil unless docstring
65
- return PuppetStrings::Yard::Util.scrub_string(docstring)
66
- end
67
- end
68
- log.warn "Missing a description for #{kind} at #{node.file}:#{node.line}."
69
- nil
70
- end
71
-
72
39
  def populate_type_data(object)
73
40
  # Traverse the block looking for properties/parameters/features
74
41
  block = statement.block
@@ -116,83 +83,4 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeHandler < PuppetStrings::Yard::Ha
116
83
  end
117
84
  end
118
85
  end
119
-
120
- def create_parameter(name, node)
121
- parameter = PuppetStrings::Yard::CodeObjects::Type::Parameter.new(name, find_docstring(node, "Puppet resource parameter '#{name}'"))
122
- set_values(node, parameter)
123
- parameter
124
- end
125
-
126
- def create_property(name, node)
127
- property = PuppetStrings::Yard::CodeObjects::Type::Property.new(name, find_docstring(node, "Puppet resource property '#{name}'"))
128
- set_values(node, property)
129
- property
130
- end
131
-
132
- def set_values(node, object)
133
- return unless node.block && node.block.count >= 2
134
-
135
- node.block[1].children.each do |child|
136
- next unless child.is_a?(YARD::Parser::Ruby::MethodCallNode) && child.method_name
137
-
138
- method_name = child.method_name.source
139
- parameters = child.parameters(false)
140
-
141
- if method_name == 'newvalue'
142
- next unless parameters.count >= 1
143
- object.add(node_as_string(parameters[0]) || parameters[0].source)
144
- elsif method_name == 'newvalues'
145
- parameters.each do |p|
146
- object.add(node_as_string(p) || p.source)
147
- end
148
- elsif method_name == 'aliasvalue'
149
- next unless parameters.count >= 2
150
- object.alias(node_as_string(parameters[0]) || parameters[0].source, node_as_string(parameters[1]) || parameters[1].source)
151
- elsif method_name == 'defaultto'
152
- next unless parameters.count >= 1
153
- object.default = node_as_string(parameters[0]) || parameters[0].source
154
- elsif method_name == 'isnamevar'
155
- object.isnamevar = true
156
- elsif method_name == 'defaultvalues' && object.name == 'ensure'
157
- object.add('present')
158
- object.add('absent')
159
- object.default = 'present'
160
- end
161
- end
162
- if object.is_a? PuppetStrings::Yard::CodeObjects::Type::Parameter
163
- # Process the options for parameter base types
164
- parameters = node.parameters(false)
165
- if parameters.count >= 2
166
- parameters[1].each do |kvp|
167
- next unless kvp.count == 2
168
- next unless node_as_string(kvp[0]) == 'parent'
169
- if kvp[1].source == 'Puppet::Parameter::Boolean'
170
- object.add('true') unless object.values.include? 'true'
171
- object.add('false') unless object.values.include? 'false'
172
- object.add('yes') unless object.values.include? 'yes'
173
- object.add('no') unless object.values.include? 'no'
174
- end
175
- break
176
- end
177
- end
178
- end
179
- end
180
-
181
- def set_default_namevar(object)
182
- return unless object.properties || object.parameters
183
- default = nil
184
- if object.properties
185
- object.properties.each do |property|
186
- return nil if property.isnamevar
187
- default = property if property.name == 'name'
188
- end
189
- end
190
- if object.parameters
191
- object.parameters.each do |parameter|
192
- return nil if parameter.isnamevar
193
- default ||= parameter if parameter.name == 'name'
194
- end
195
- end
196
- default.isnamevar = true if default
197
- end
198
86
  end
@@ -22,7 +22,9 @@ class PuppetStrings::Yard::Parsers::JSON::Parser < YARD::Parser::Base
22
22
  def parse
23
23
  begin
24
24
  json = JSON.parse(source)
25
- @statements.push(PuppetStrings::Yard::Parsers::JSON::TaskStatement.new(json, @source, @file))
25
+ # TODO: this should compare json to a Task metadata json-schema or perform some other hueristics
26
+ # to determine what type of statement it represents
27
+ @statements.push(PuppetStrings::Yard::Parsers::JSON::TaskStatement.new(json, @source, @file)) unless json.empty?
26
28
  rescue
27
29
  log.error "Failed to parse #{@file}: "
28
30
  @statements = []