class ElmInRails::Transformer

Public Class Methods

new(options = {}) click to toggle source
# File lib/elm_in_rails/transformer.rb, line 5
def initialize(options = {})
  @options = options
end

Public Instance Methods

call(input) click to toggle source
# File lib/elm_in_rails/transformer.rb, line 9
def call(input)
  input_file = input[:filename]
  dependencies = Set.new input[:dependencies]

  compiled_elm =
    Dir.chdir(elm_package_root(input_file)) do
      ::Elm::Compiler.compile(input_file)
    end

  Dir.glob("#{input[:load_path]}/**/*.elm")
    .reject { |dep| dep.include? 'elm-stuff' }
    .each do |dep|
      _, deps = input[:environment].resolve! dep
      dependencies.merge deps
    end

  { data: compiled_elm,
    dependencies: dependencies }
end

Private Instance Methods

elm_package_root(file) click to toggle source
# File lib/elm_in_rails/transformer.rb, line 31
def elm_package_root(file)
  dir = Pathname.new(file).dirname
  loop do
    elm_package = dir + "elm-package.json"
    return dir.to_s if elm_package.exist?

    fail "Could not find elm-package.json" if dir.to_s == "/"
    dir = dir.parent
  end
end