Sha256: 17dc8121405d05b16fe93afcaac0b4bd2305d222059d7d782f1335dbcd5757b1

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

module Bibliothecary
  module Analyser
    def self.included(base)
      base.extend(ClassMethods)
    end
    module ClassMethods
      def parse_file(filename, contents)
        mapping.each do |regex, method_name|
          if filename.match(regex)
            return send(method_name, contents)
          end
        end
        return []
      end

      def match?(filename)
        mapping.keys.any?{|regex| filename.match(regex) }
      end

      def platform_name
        self.name.to_s.split('::').last.downcase
      end

      def analyse(folder_path, file_list)
        file_list.map do |path|
          filename = path.gsub(folder_path, '').gsub(/^\//, '')
          contents = File.open(path).read
          analyse_contents(filename, contents)
        end.compact
      end

      def analyse_contents(filename, contents)
        begin
          dependencies = parse_file(filename, contents)
          if dependencies.any?
            {
              platform: platform_name,
              path: filename,
              dependencies: dependencies
            }
          else
            nil
          end
        rescue
          nil
        end
      end

      def parse_ruby_manifest(manifest)
        manifest.dependencies.inject([]) do |deps, dep|
          deps.push({
            name: dep.name,
            requirement: dep.requirement.to_s,
            type: dep.type
          })
        end.uniq
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bibliothecary-5.0.1 lib/bibliothecary/analyser.rb
bibliothecary-5.0.0 lib/bibliothecary/analyser.rb