class TpCommon::AssetsLoader

Constants

LoaderConfiguration

Public Class Methods

[](package_name) click to toggle source
# File lib/tp_common/assets_loader.rb, line 36
def self.[](package_name)
  package_name = package_name.to_sym

  unless packages.key?(package_name)
    if @config.autoload
      load(package_name)
    else
      raise PackageIsNotLoaded.new("Package #{package_name} is not loaded yet.")
    end
  end

  packages[package_name]
end
asset_root_path() click to toggle source
# File lib/tp_common/assets_loader.rb, line 50
def self.asset_root_path
  @config.asset_root_path
end
build(package_name, external_manifest_file) click to toggle source
# File lib/tp_common/assets_loader.rb, line 22
def self.build(package_name, external_manifest_file)
  # TODO: Implement
  # Skip if "/public/#{package_name}" exists
  # Download manifest.json from #{external_manifest_file}?version=#{@config.version}
  #                        to "/public/#{package_name}/assets/manifest.json"
  # Validate "/public/#{package_name}/assets/manifest.json"
end
clear!() click to toggle source

Clear all config + loaded package Use for test only, but feel free to use in app if need

# File lib/tp_common/assets_loader.rb, line 13
def self.clear!
  @config = LoaderConfiguration.new(false, '/public', :latest)
  @packages = {}
end
configure() { |config| ... } click to toggle source
# File lib/tp_common/assets_loader.rb, line 18
def self.configure
  yield(config)
end
load(package_name) click to toggle source
# File lib/tp_common/assets_loader.rb, line 30
def self.load(package_name)
  package_name = package_name.to_sym
  packages[package_name] = new(package_name)
  packages
end
new(package_name) click to toggle source
# File lib/tp_common/assets_loader.rb, line 68
def initialize(package_name)
  @package_name = package_name.to_sym
  file_path = File.join(self.class.asset_root_path, @package_name.to_s, 'assets', 'manifest.json')

  @manifest = begin
                JSON.parse(File.read(file_path))
              rescue SystemCallError
                raise ManifestNotFound.new(
                  "Unable to load manifest file for package #{@package_name} at: #{file_path}"
                )
              rescue StandardError
                raise ManifestFileBroken.new("Manifest file for package #{@package_name} is unable to load")
              end
  return true
end

Private Class Methods

config() click to toggle source
# File lib/tp_common/assets_loader.rb, line 62
def self.config
  @config ||= new_config
end
new_config() click to toggle source
# File lib/tp_common/assets_loader.rb, line 58
def self.new_config
  LoaderConfiguration.new(false, '/public', :latest)
end
packages() click to toggle source
# File lib/tp_common/assets_loader.rb, line 54
def self.packages
  @packages ||= {}
end

Public Instance Methods

[](asset_name) click to toggle source
# File lib/tp_common/assets_loader.rb, line 84
def [](asset_name)
  @manifest[asset_name].tap do |asset|
    if asset.nil?
      raise AssetNotFound.new("Asset #{@package_name}/#{asset_name} is not found.")
    end
  end
end