Sha256: 88d1d8e526bfe0dc3aca524e102e8fa5aaeb00fe5408dfb63fc28372d053318c

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

require 'yaml'

module Technologist
  class FrameworkDetector
    FRAMEWORK_RULES = File.expand_path('../frameworks.yml',  __FILE__)

    def initialize(repository)
      @repository = repository
    end

    def primary_frameworks
      matched_frameworks.map do |technology|
        # it's either the primary value defined in the yaml
        # or the technology itself
        rules[technology]['primary'] || technology
      end.uniq
    end

    def secondary_frameworks
      matched_frameworks.map do |technology|
        # it's a secondary if a primary is defined in the yaml
        rules[technology]['primary'] && technology
      end.compact
    end

    private

    attr_reader :repository

    def rules
      @rules ||= YAML.load_file(FRAMEWORK_RULES)
    end

    def matched_frameworks
      @frameworks ||=
        begin
          rules.map do |technology, definition|
            definition['rules'].map do |rule|
              if rule.matches?(technology, repository)
                technology
              end
            end
          end.flatten.compact
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
technologist-0.3.0 lib/technologist/framework_detector.rb