Sha256: 25fd0c6bd0c36f1ce3072aaf536c7e90535235561115f43c8a863cfbd4bc6be8

Contents?: true

Size: 1.37 KB

Versions: 7

Compression:

Stored size: 1.37 KB

Contents

require 'json'

module ProspectusPuppet
  DEP_REGEX = /^(\d+\.\d+)\.\d+$/
  DEP_FILTER = /^\d+\.\d+.\d+$/

  ##
  # Helper for automatically adding Puppet deps
  module Deps
    def extended(other) # rubocop:disable Metrics/MethodLength,Metrics/AbcSize
      dep_list = parse_deps

      other.deps do
        dep_list.each do |x|
          item do
            name x[:name]

            expected do
              github_tag
              repo x[:slug]
              regex(DEP_REGEX)
              filter(DEP_FILTER)
            end

            actual do
              static
              set x[:version]
            end
          end
        end
      end
    end

    private

    def parse_deps
      raw_deps.map do |dep|
        {
          name: parse_name(dep),
          slug: parse_slug(dep),
          version: parse_version(dep)
        }
      end
    end

    def parse_version(dep)
      dep['version_requirement'].sub(/\.x/, '')
    end

    def parse_slug(dep)
      parse_org(dep) + '/' + parse_name(dep)
    end

    def parse_name(dep)
      parse_prefix(dep) + '-' + dep['name'].split('/').last
    end

    def parse_prefix(dep)
      parse_org(dep) == 'puppetlabs' ? 'puppetlabs' : 'puppet'
    end

    def parse_org(dep)
      dep['name'].split('/').first
    end

    def raw_deps
      @raw_deps ||= JSON.parse(File.read('metadata.json'))['dependencies']
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
prospectus_puppet-0.0.7 lib/prospectus_puppet.rb
prospectus_puppet-0.0.6 lib/prospectus_puppet.rb
prospectus_puppet-0.0.5 lib/prospectus_puppet.rb
prospectus_puppet-0.0.4 lib/prospectus_puppet.rb
prospectus_puppet-0.0.3 lib/prospectus_puppet.rb
prospectus_puppet-0.0.2 lib/prospectus_puppet.rb
prospectus_puppet-0.0.1 lib/prospectus_puppet.rb