class Elm::Dependencies

Get files in dependencies from an Elm file or code

Public Class Methods

from_content(content) click to toggle source
# File lib/elm/dependencies.rb, line 42
def self.from_content(content)
  dep = new.init content
  only_existing_files dep.dependencies
end
from_file(file) click to toggle source
# File lib/elm/dependencies.rb, line 35
def self.from_file(file)
  # Error if not exists
  dep = new.init File.read(file), [File.dirname(file)]
  only_existing_files dep.dependencies
end
new() click to toggle source
# File lib/elm/dependencies.rb, line 77
def initialize
  self
end
only_existing_files(dependencies) click to toggle source
# File lib/elm/dependencies.rb, line 48
def self.only_existing_files(dependencies)
  dependencies
end

Public Instance Methods

dependencies() click to toggle source
# File lib/elm/dependencies.rb, line 70
def dependencies
  extract_dependencies(@content).uniq
end
init(content) click to toggle source
# File lib/elm/dependencies.rb, line 53
def init(content)
  init content, find_dirs

  self
end

Private Instance Methods

extract_dependencies(src) click to toggle source
# File lib/elm/dependencies.rb, line 97
def extract_dependencies(src)
  deps = []
  src.each_line do |l|
    next unless l =~ /^import[[:blank:]]+([\w.]+)/
    file = import_to_file Regexp.last_match(1)
    if file.is_a? DependencyFound
      deps << file.path
      deps.concat extract_dependencies(file.content)
    end
  end
  deps
end
find_dirs() click to toggle source
# File lib/elm/dependencies.rb, line 82
def find_dirs
  if File.exist? 'elm-package.json'
    read_elm_package_source_dirs
  else
    ['']
  end
end
import_to_file(directive) click to toggle source
# File lib/elm/dependencies.rb, line 111
def import_to_file(directive)
  relatives = @dirs.map { |dir| to_relative_file(dir, to_path(directive)) }
  files = relatives.select { |path| File.exist? path }
  if files.empty?
    DependencyNotFound.new
  else
    DependencyFound.new files.first
  end
end
read_elm_package_source_dirs() click to toggle source
# File lib/elm/dependencies.rb, line 91
def read_elm_package_source_dirs
  config = JSON.parse(File.read('elm-package.json'))
  config['source-directories']
end
to_path(directive) click to toggle source
# File lib/elm/dependencies.rb, line 122
def to_path(directive)
  directive.tr('.', '/') + '.elm'
end
to_relative_file(dir, directive) click to toggle source
# File lib/elm/dependencies.rb, line 127
def to_relative_file(dir, directive)
  File.join(dir, directive).gsub(%r{^/}, '')
end