Class: Puppet::ModuleTool::Metadata Private

Inherits:
Object
  • Object
show all
Includes:
Network::FormatSupport
Defined in:
lib/puppet/module_tool/metadata.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

This class provides a data structure representing a module’s metadata.

API:

  • private

Constant Summary collapse

DEFAULTS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

API:

  • private

{
  'name'          => nil,
  'version'       => nil,
  'author'        => nil,
  'summary'       => nil,
  'license'       => 'Apache-2.0',
  'source'        => '',
  'project_page'  => nil,
  'issues_url'    => nil,
  'dependencies'  => Set.new.freeze,
  'data_provider' => nil,
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Network::FormatSupport

included, #mime, #render, #support_format?, #to_msgpack, #to_pson

Constructor Details

#initializeMetadata

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Metadata.

API:

  • private



30
31
32
33
# File 'lib/puppet/module_tool/metadata.rb', line 30

def initialize
  @data = DEFAULTS.dup
  @data['dependencies'] = @data['dependencies'].dup
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Expose any metadata keys as callable reader methods.

API:

  • private



112
113
114
115
# File 'lib/puppet/module_tool/metadata.rb', line 112

def method_missing(name, *args)
  return @data[name.to_s] if @data.key? name.to_s
  super
end

Instance Attribute Details

#module_nameObject Also known as: name

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



15
16
17
# File 'lib/puppet/module_tool/metadata.rb', line 15

def module_name
  @module_name
end

Instance Method Details

#add_dependency(name, version_requirement = nil, repository = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Validates the name and version_requirement for a dependency, then creates the Dependency and adds it. Returns the Dependency that was added.

Raises:

API:

  • private



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/puppet/module_tool/metadata.rb', line 66

def add_dependency(name, version_requirement=nil, repository=nil)
  validate_name(name)
  validate_version_range(version_requirement) if version_requirement

  dup = @data['dependencies'].find { |d| d.full_module_name == name && d.version_requirement != version_requirement }
  raise ArgumentError, _("Dependency conflict for %{module_name}: Dependency %{name} was given conflicting version requirements %{version_requirement} and %{dup_version}. Verify that there are no duplicates in the metadata.json.") % { module_name: full_module_name, name: name, version_requirement: version_requirement, dup_version: dup.version_requirement } if dup

  dep = Dependency.new(name, version_requirement, repository)
  @data['dependencies'].add(dep)

  dep
end

#dashed_nameObject Also known as: full_module_name

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a filesystem-friendly version of this module name.

API:

  • private



36
37
38
# File 'lib/puppet/module_tool/metadata.rb', line 36

def dashed_name
  @data['name'].tr('/', '-') if @data['name']
end

#dependenciesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



87
88
89
# File 'lib/puppet/module_tool/metadata.rb', line 87

def dependencies
  @data['dependencies'].to_a
end

#descriptionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Deprecated.

Provides an accessor for the now defunct ‘description’ property. This addresses a regression in Puppet 3.6.x where previously valid templates referring to the ‘description’ property were broken.

API:

  • private



83
84
85
# File 'lib/puppet/module_tool/metadata.rb', line 83

def description
  @data['description']
end

#release_nameObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a string that uniquely represents this version of this module.

API:

  • private



41
42
43
44
# File 'lib/puppet/module_tool/metadata.rb', line 41

def release_name
  return nil unless @data['name'] && @data['version']
  [ dashed_name, @data['version'] ].join('-')
end

#to_hashObject Also known as: to_data_hash

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a hash of the module’s metadata. Used by Puppet’s automated serialization routines.

See Also:

API:

  • private



95
96
97
# File 'lib/puppet/module_tool/metadata.rb', line 95

def to_hash
  @data
end

#to_jsonObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



100
101
102
103
104
105
106
107
108
109
# File 'lib/puppet/module_tool/metadata.rb', line 100

def to_json
  data = @data.dup.merge('dependencies' => dependencies)

  contents = data.keys.map do |k|
    value = (Puppet::Util::Json.dump(data[k], :pretty => true) rescue data[k].to_json)
    %Q("#{k}": #{value})
  end

  "{\n" + contents.join(",\n").gsub(/^/, '  ') + "\n}\n"
end

#update(data) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Merges the current set of metadata with another metadata hash. This method also handles the validation of module names and versions, in an effort to be proactive about module publishing constraints.

API:

  • private



52
53
54
55
56
57
58
59
60
61
# File 'lib/puppet/module_tool/metadata.rb', line 52

def update(data)
  process_name(data) if data['name']
  process_version(data) if data['version']
  process_source(data) if data['source']
  process_data_provider(data) if data['data_provider']
  merge_dependencies(data) if data['dependencies']

  @data.merge!(data)
  return self
end