module Files::Dependencies

Public Class Methods

get_dependencies(file) click to toggle source

Takes in a file and returns all files that are dependents as an array of files without extension

# File lib/specss/files.rb, line 33
def self.get_dependencies(file)
  dependents = []
  # Get file name without extension and convert to camel case
  basename = File.basename(file, ".*")
  basename = basename.gsub(/(?:^|_)([a-z])/) do $1.upcase end

  # Get rubrowser output and parse for the relation data
  output = %x|rubrowser &|
  data = output.match(/var\s+data\s+=\s+(.*?);/m)[1].split('</script>')[0]
  data_hash = JSON.parse(data)
  relations = data_hash['relations']

  # Return dependents of input file
  dependents_data = relations.select { |i| i['resolved_namespace'] == basename }
  dependents_data.each do |d|
    filename = d['file']
    basename = File.basename(filename, ".*")
    next if basename.include? '_spec'
    dependents.push(basename) unless dependents.include? basename
  end
  dependents
end