Sha256: fc780544f111216a6f60613fb797f33cdce09c47004b720370396519a57f1398

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

module Roll

  #--
  # TODO: Use POM? If available?
  #--
  class Metadata

    #TODO: hide most methods

    attr :location

    #
    def initialize(location)
      @location = location
      @cache = {}
    end

    # Get library name.
    def name
      @cache[:name] ||= read('name')
    end

    # Get library version. 
    #--
    # TODO: handle VERSION file
    # TODO: handle YAML
    #++
    def version
      @cache[:version] ||= Version.new(read(:version))
    end

    # Get library active state.
    def active
      return @cache[:active] if @cache.key?(:active)
      @cache[:active] = (
        case read(:active).to_s.downcase
        when 'false', 'no'
          false
        else
          true
        end
      )
    end

    # Get library release date. 
    #--
    # TODO: default date to what?
    #++
    def released
      @cache[:released] ||= read(:released) || "1900-01-01"
    end

    # Get library loadpath.
    def loadpath
      @cache[:loadpath] ||= (
        val = read(:loadpath).to_s.strip.split(/\s*\n/)  # TODO: handle YAML
        val = ['lib'] if val.empty?
        val
      )
    end

    #
    def requires
      @cache[:requires] ||= (
        if entry = read(:requires)
          entry.strip.split("\n").map do |line|
            line.strip.split(/\s+/)
          end
        else
          []
        end
      )
    end

    #
    def method_missing(name, *args)
      if @cache.key?(name)
        @cache[name]
      else
        @cache[name] = read(name)
      end
    end

  private

    #
    def read(name)
      file = Dir[File.join(location, "{meta,.meta}", name.to_s)].first
      if file
        text = File.read(file)
        if text =~ /^---/
          require_yaml
          YAML.load(text)
        else
          text.strip
        end
      else
        nil
      end
    end

    #
    def require_yaml
      @require_yaml ||=(
        require 'yaml'
        true
      )
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
roll-1.1.0 lib/roll/metadata.rb