require 'delegate'
require 'gem2rpm/configuration'
require 'gem2rpm/gem/dependency'
require 'gem2rpm/helpers'

module Gem2Rpm
  class Specification < SimpleDelegator
    BLANK_RE = /\A[[:space:]]*\z/

    # A long description of gem wrapped to 78 characters.
    def description
      d = super.to_s.chomp
      d = summary.to_s.chomp if d.empty?
      d.gsub!(/([^.!?])\Z/, "\\1.")
      Helpers.word_wrap(d, 78) + "\n"
    end

    # The URL of this gem's home page
    def homepage
      h = super
      h = nil if h && BLANK_RE =~ h
      h
    end

    # A list of Gem::Dependency objects this gem depends on (includes every
    # runtime or development dependency).
    def dependencies
      super.map { |d| Gem2Rpm::Dependency.new d }
    end

    # List of dependencies that are used for development.
    def development_dependencies
      super.map { |d| Gem2Rpm::Dependency.new d }
    end

    # The license(s) for the library. Each license must be a short name,
    # no more than 64 characters. Returns empty array if RubyGems does not
    # provide the field.
    def licenses
      super
    rescue
      []
    end

    # List of dependencies that will automatically be activated at runtime.
    def runtime_dependencies
      super.map { |d| Gem2Rpm::Dependency.new d }
    end

    # The version of Ruby required by the gem. Returns array with
    # empty string if the method is not provided by RubyGems yet.
    def required_ruby_version
      @required_ruby_version ||= begin
        Helpers.requirement_versions_to_rpm(super)
      rescue
        ['']
      end
    end

    # The RubyGems version required by gem. For RubyGems < 0.9.5 returns only
    # array with empty string. However, this should happen only in rare cases.
    def required_rubygems_version
      @required_rubygems_version ||= begin
        Helpers.requirement_versions_to_rpm(super)
      rescue
        ['']
      end
    end
  end
end
