# frozen_string_literal: true

# These helper methods allow devs to customise which javascript/CSS manifest file to load
# in the application layout. By setting `config.action_view.javascript_manifest_resolver`
# or `config.action_view.stylesheet_manifest_resolver` to a callable object (anything
# that responds to `#call()`) in application.rb, you can change the behaviour for your
# own deployment.
#
# Examples:
#
#  ##
#  # in application.rb
#
#  ##
#  # This will load `myapp.com.css`, if available, for requests to `myapp.com`.
#  #
#  config.action_view.stylesheet_manifest_resolver = lambda do |request|
#    "#{request.host}.css"
#  end
#
#  ##
#  # This will load `mainapp.css`, if available, for all requests
#
#  config.action_view.stylesheet_manifest_resolver = lambda do |request|
#    "mainapp.css"
#  end
#
#  ##
#  # This will load whatever MyCustomResolver returns when called:
#
#  class MyCustomResolver
#
#    def call(request)
#      # compute things...
#      return string
#    end
#
#  end
#
#  config.action_view.stylesheet_manifest_resolver = MyCustomResolver.new
#
module ManifestsHelper

  # The name of the default asset manifest files.
  DEFAULT = "application"

  # The name of the javascript manifest file to load. Defaults to application.js
  #
  # Returns String
  def javascript_manifest_file
    if Rails.application.config.action_view.javascript_manifest_resolver
      Rails.application.config.action_view.javascript_manifest_resolver.call(request)
    else
      DEFAULT
    end
  end

  # The name of the stylesheet manifest file to load. Defaults to application.css
  #
  # Returns String
  def stylesheet_manifest_file
    if Rails.application.config.action_view.stylesheet_manifest_resolver
      Rails.application.config.action_view.stylesheet_manifest_resolver.call(request)
    else
      DEFAULT
    end
  end

end
