module Deface
  module Search
    module ClassMethods

      # finds all applicable overrides for supplied template
      #
      def find(details)
        return [] if self.all.empty? || details.empty?

        virtual_path = details[:virtual_path]
        return [] if virtual_path.nil?

        [/^\//, /\.\w+\z/].each { |regex| virtual_path.gsub!(regex, '') }

        result = []
        result << self.all[virtual_path.to_sym].try(:values)

        result.flatten.compact.sort_by &:sequence
      end

      # finds all overrides that are using a template / parital as there source
      #
      def find_using(virtual_path)
        self.all.map do |key, overrides_by_name|
          overrides_by_name.values.select do |override|
            [:template, :partial].include?(override.source_argument) && override.args[override.source_argument] == virtual_path
          end
        end.flatten
      end
    end
  end
end