class Webpacker::Configuration

def cache_manifest?

def cache_manifest?
  fetch(:cache_manifest)
end

def cache_path

def cache_path
  root_path.join(fetch(:cache_path))
end

def check_yarn_integrity=(value)

def check_yarn_integrity=(value)
  data[:check_yarn_integrity] = value
end

def check_yarn_integrity?

def check_yarn_integrity?
  fetch(:check_yarn_integrity)
end

def compile?

def compile?
  fetch(:compile)
end

def data

def data
  @data ||= load
end

def defaults

def defaults
  @defaults ||= \
    HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("../../install/config/webpacker.yml", __FILE__))[env])
end

def dev_server

def dev_server
  fetch(:dev_server)
end

def extensions

def extensions
  fetch(:extensions)
end

def extract_css?

def extract_css?
  fetch(:extract_css)
end

def fetch(key)

def fetch(key)
  data.fetch(key, defaults[key])
end

def initialize(root_path:, config_path:, env:)

def initialize(root_path:, config_path:, env:)
  @root_path = root_path
  @config_path = config_path
  @env = env
end

def load

def load
  YAML.load(config_path.read)[env].deep_symbolize_keys
rescue Errno::ENOENT => e
  raise "Webpacker configuration file not found #{config_path}. " \
        "Please run rails webpacker:install " \
        "Error: #{e.message}"
rescue Psych::SyntaxError => e
  raise "YAML syntax error occurred while parsing #{config_path}. " \
        "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
        "Error: #{e.message}"
end

def public_manifest_path

def public_manifest_path
  public_output_path.join("manifest.json")
end

def public_output_path

def public_output_path
  public_path.join(fetch(:public_output_path))
end

def public_path

def public_path
  root_path.join(fetch(:public_root_path))
end

def resolved_paths

def resolved_paths
  fetch(:resolved_paths)
end

def resolved_paths_globbed

def resolved_paths_globbed
  resolved_paths.map { |p| "#{p}/**/*" }
end

def source_entry_path

def source_entry_path
  source_path.join(fetch(:source_entry_path))
end

def source_path

def source_path
  root_path.join(fetch(:source_path))
end

def webpack_compile_output?

def webpack_compile_output?
  fetch(:webpack_compile_output)
end