Skip to content

Commit

Permalink
Merge pull request #194 from kris-bosland/pdoc-272-add-required-featu…
Browse files Browse the repository at this point in the history
…res-attribute

(PDOC-272) Add required features attribute
  • Loading branch information
scotje authored Apr 3, 2019
2 parents a2deef4 + b65018e commit a665166
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 5 deletions.
2 changes: 2 additions & 0 deletions lib/puppet-strings/describe.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ def self.show_one_type(resource_type, providers = false)
def self.show_one_parameter(parameter)
puts "\n- **%{name}**\n" % { name: parameter[:name] }
puts parameter[:description]
puts "Valid values are `%{values}`." % { values: parameter[:values].join("`, `") } unless parameter[:values].nil?
puts "Requires features %{required_features}." % { required_features: parameter[:required_features] } unless parameter[:required_features].nil?
end

def self.list_one_type(type)
Expand Down
4 changes: 4 additions & 0 deletions lib/puppet-strings/markdown/templates/resource_type.erb
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ Options:
<% if param[:default] -%>
Default value: <%= value_string(param[:default]) %>
<% end -%>
<% if param[:required_features] -%>
Required features: <%= param[:required_features] %>.

<% end -%>
<% end -%>
<% end -%>
3 changes: 2 additions & 1 deletion lib/puppet-strings/yard/code_objects/type.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class PuppetStrings::Yard::CodeObjects::Type < PuppetStrings::Yard::CodeObjects:
# Represents a resource type parameter.
class Parameter
attr_reader :name, :values, :aliases
attr_accessor :docstring, :isnamevar, :default, :data_type
attr_accessor :docstring, :isnamevar, :default, :data_type, :required_features

# Initializes a resource type parameter or property.
# @param [String] name The name of the parameter or property.
Expand Down Expand Up @@ -63,6 +63,7 @@ def to_hash
hash[:data_type] = data_type unless data_type.empty?
hash[:aliases] = aliases unless aliases.empty?
hash[:isnamevar] = true if isnamevar
hash[:required_features] = required_features if required_features
hash[:default] = default if default
hash
end
Expand Down
10 changes: 9 additions & 1 deletion lib/puppet-strings/yard/handlers/ruby/type_base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,17 @@ def set_values(node, object)
object.default = 'present'
end
end

parameters = node.parameters(false)

if parameters.count >= 2
kvps = parameters[1].find_all { |kvp| kvp.count == 2 }
required_features_kvp = kvps.find { |kvp| node_as_string(kvp[0]) == 'required_features' }
object.required_features = node_as_string(required_features_kvp[1]) unless required_features_kvp.nil?
end

if object.is_a? PuppetStrings::Yard::CodeObjects::Type::Parameter
# Process the options for parameter base types
parameters = node.parameters(false)
if parameters.count >= 2
parameters[1].each do |kvp|
next unless kvp.count == 2
Expand Down
3 changes: 2 additions & 1 deletion spec/fixtures/unit/json/output.json
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,8 @@
},
{
"name": "encryption_key",
"description": "The encryption key to use."
"description": "The encryption key to use.",
"required_features": "encryption"
},
{
"name": "encrypt",
Expand Down
3 changes: 2 additions & 1 deletion spec/fixtures/unit/json/output_with_plan.json
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,8 @@
},
{
"name": "encryption_key",
"description": "The encryption key to use."
"description": "The encryption key to use.",
"required_features": "encryption"
},
{
"name": "encrypt",
Expand Down
3 changes: 2 additions & 1 deletion spec/fixtures/unit/json/output_without_puppet_function.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,8 @@
},
{
"name": "encryption_key",
"description": "The encryption key to use."
"description": "The encryption key to use.",
"required_features": "encryption"
},
{
"name": "encrypt",
Expand Down
2 changes: 2 additions & 0 deletions spec/fixtures/unit/markdown/output.md
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,8 @@ The database server name.

The encryption key to use.

Required features: encryption.

##### `encrypt`

Valid values: `true`, `false`, yes, no
Expand Down
2 changes: 2 additions & 0 deletions spec/fixtures/unit/markdown/output_with_plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ The database server name.

The encryption key to use.

Required features: encryption.

##### `encrypt`

Valid values: `true`, `false`, yes, no
Expand Down
26 changes: 26 additions & 0 deletions spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,32 @@
end
end

describe 'parsing a type with a param with arguments' do
let(:source) { <<-SOURCE
Puppet::Type.newtype(:database) do
feature :encryption, 'The provider supports encryption.', methods: [:encrypt]
newparam(:encryption_key, :parent => Puppet::Parameter::Boolean, required_features: :encryption) do
desc 'The encryption key to use.'
defaultto false
end
end
SOURCE
}

it 'should correctly detect the required_feature' do
expect(subject.size).to eq(1)
object = subject.first
expect(object.parameters[0].required_features).to eq('encryption')
end

it 'should correctly detect a boolean parent' do
expect(subject.size).to eq(1)
object = subject.first
expect(object.parameters[0].default).to eq('false')
end
end

describe 'parsing a type definition' do
let(:source) { <<-SOURCE
# @!puppet.type.param [value1, value2] dynamic_param Documentation for a dynamic parameter.
Expand Down

0 comments on commit a665166

Please sign in to comment.