Sha256: e4fa4ccede304e167923cf9510ce8a552ec5e4a436e7b23877d01ad26b8ff9dd

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module AboutPage
  class Dependencies < AboutPage::Configuration::Node
    delegate :each_pair, :to_xml, :to_json, :to => :to_h
    def to_h
      @dependencies ||= Hash[groups.collect { |group,deps| [group,Hash[deps.collect { |dep| [dep.name,dependency_hash(environment, dep.name)] }]] }]
    end

    private
    def environment
      @environment ||= Bundler.load
    end

    def groups
      @groups ||= environment.current_dependencies.group_by { |d| d.groups.first.to_s }
    end

    def dependency_version(env, key)
      spec = env.specs.find { |s| s.name == key }
      rev = spec.git_version
      rev.strip! unless rev.nil?
      location = [spec.source.options.values_at('path','uri').compact.first,rev].compact.join('@')
      [spec.version.to_s,location].compact.join(' ').strip
    end
    
    def dependency_hash(env, key, graph=nil)
      graph = Bundler::Graph.new(env,'/dev/null') if graph.nil?
      result = { :version => dependency_version(env, key) }
      deps = Hash[graph.relations[key].collect { |dep| [dep, dependency_hash(env, dep, graph)]}]
      result[:dependencies] = deps unless deps.empty?
      result
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
about_page-0.0.4 lib/about_page/dependencies.rb
about_page-0.0.3 lib/about_page/dependencies.rb
about_page-0.0.2 lib/about_page/dependencies.rb
about_page-0.0.1 lib/about_page/dependencies.rb