Class: PuppetfileResolver::Models::ModuleSpecification

Inherits:
Object
  • Object
show all
Defined in:
lib/puppetfile-resolver/models/module_specification.rb

Direct Known Subclasses

MissingModuleSpecification

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ModuleSpecification

Returns a new instance of ModuleSpecification.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 12

def initialize(options = {})
  require 'semantic_puppet'

  @name = options[:name]
  @owner = options[:owner]
  # Munge the name
  # "puppetlabs/stdlib"
  # "puppetlabs-stdlib"
  # "puppetlabs-stdlib-1.0.0  ??"
  # "stdlib"
  unless @name.nil?
    result = @name.split('/', 2)
    if result.count > 1
      @owner = result[0]
      @name = result[1]
    else
      result = @name.split('-')
      if result.count > 1
        @owner = result[0]
        @name = result[1]
      end
    end
  end
  @origin = options[:origin]
  @dependencies = nil
  @metadata = options[:metadata]
  @resolver_flags = options[:resolver_flags].nil? ? [] : options[:resolver_flags]
  @version = ::SemanticPuppet::Version.parse(options[:version]) unless options[:version].nil?
end

Instance Attribute Details

#nameObject

origin attr same as R10K module :type



10
11
12
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 10

def name
  @name
end

#originObject

origin attr same as R10K module :type



10
11
12
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 10

def origin
  @origin
end

#ownerObject

origin attr same as R10K module :type



10
11
12
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 10

def owner
  @owner
end

#resolver_flagsObject

origin attr same as R10K module :type



10
11
12
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 10

def resolver_flags
  @resolver_flags
end

#versionObject

origin attr same as R10K module :type



10
11
12
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 10

def version
  @version
end

Instance Method Details

#dependencies(cache, resolver_ui) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 78

def dependencies(cache, resolver_ui)
  return @dependencies unless @dependencies.nil?

  return (@dependencies = []) if resolver_flags.include?(PuppetfileResolver::Puppetfile::DISABLE_ALL_DEPENDENCIES_FLAG)

  meta = (cache, resolver_ui)
  @dependencies = []
  unless meta[:dependencies].nil? || meta[:dependencies].empty?
    @dependencies = meta[:dependencies].map do |dep|
      ModuleDependency.new(
        name: dep[:name],
        version_requirement: dep[:version_requirement] || dep[:version_range] || '>= 0.0.0'
      )
    end
  end

  unless resolver_flags.include?(PuppetfileResolver::Puppetfile::DISABLE_PUPPET_DEPENDENCY_FLAG)
    puppet_requirement = nil
    unless meta[:requirements].nil? || meta[:requirements].empty? # rubocop:disable Style/IfUnlessModifier
      puppet_requirement = meta[:requirements].find { |req| req[:name] == 'puppet' && !req[:version_requirement].nil? }
    end
    if puppet_requirement.nil?
      @dependencies << PuppetDependency.new('>= 0')
    else
      @dependencies << PuppetDependency.new(puppet_requirement[:version_requirement])
    end
  end

  @dependencies
end

#from_hash!(hash) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 65

def from_hash!(hash)
  @name = hash['name']
  @owner = hash['owner']
  @origin = hash['origin']
  @version = ::SemanticPuppet::Version.parse(hash['version']) unless hash['version'].nil?
  self
end

#metadata(_cache, _resolver_ui) ⇒ Object



73
74
75
76
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 73

def (_cache, _resolver_ui)
  # TODO: Later on we could resolve the metadata lazily, but for now, no need
  @metadata
end

#to_json(*args) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 56

def to_json(*args)
  {
    'name'    => name,
    'owner'   => owner,
    'origin'  => origin,
    'version' => version.to_s
  }.to_json(args)
end

#to_sObject



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/puppetfile-resolver/models/module_specification.rb', line 42

def to_s
  prefix = case @origin
           when :forge
             'Forge'
           when :git
             'Git'
           when :local
             'Local'
           else
             'Unknown'
           end
  "#{prefix} #{owner}-#{name}-#{version}"
end