Sha256: 4c5262f1e79eb60e3d271c0db8e3e544a3f44857749ddfa2acf31e37e8a11dcd

Contents?: true

Size: 1.41 KB

Versions: 207

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

module Motor
  module Assets
    InvalidPathError = Class.new(StandardError)

    ASSETS_PATH = Pathname.new(__dir__).join('../../ui/dist')
    MANIFEST_PATH = ASSETS_PATH.join('manifest.json')
    DEV_SERVER_URL = 'http://localhost:9090/'

    CACHE_STORE =
      if Rails.env.production?
        ActiveSupport::Cache::MemoryStore.new(size: 5.megabytes)
      else
        ActiveSupport::Cache::NullStore.new
      end

    module_function

    def manifest
      CACHE_STORE.fetch('manifest') do
        JSON.parse(MANIFEST_PATH.read)
      end
    end

    def icons
      manifest.select do |k, v|
        !k.ends_with?('.gz') && v.starts_with?('icons/') && v.exclude?('DS_Store')
      end.keys
    end

    def asset_path(path)
      Motor::Admin.routes.url_helpers.motor_asset_path(manifest[path])
    end

    def load_asset(filename, gzip: false)
      if Motor.development?
        load_from_dev_server(filename)
      else
        load_from_disk(filename, gzip: gzip)
      end
    end

    def load_from_disk(filename, gzip:)
      filename += '.gz' if gzip

      raise InvalidPathError if filename.include?('..')

      path = ASSETS_PATH.join(filename)

      raise InvalidPathError unless path.to_s.starts_with?(ASSETS_PATH.to_s)

      path.read
    end

    def load_from_dev_server(filename)
      uri = URI(DEV_SERVER_URL + filename)

      Net::HTTP.get_response(uri).body
    end
  end
end

Version data entries

207 entries across 207 versions & 7 rubygems

Version Path
motor-admin-0.4.36 lib/motor/assets.rb
motor-admin-0.4.35 lib/motor/assets.rb
motor-admin-0.4.34 lib/motor/assets.rb
motor-admin-0.4.33 lib/motor/assets.rb
motor-admin-0.4.32 lib/motor/assets.rb
motor-admin-0.4.31 lib/motor/assets.rb
motor-admin-0.4.30 lib/motor/assets.rb
motor-admin-0.4.29 lib/motor/assets.rb
motor-admin-0.4.28 lib/motor/assets.rb
motor-admin-cstham8-0.4.35 lib/motor/assets.rb
motor-admin-cstham8-0.4.34 lib/motor/assets.rb
motor-admin-cstham8-0.4.33 lib/motor/assets.rb
motor-admin-cstham8-0.4.32 lib/motor/assets.rb
motor-admin-cstham8-0.4.31 lib/motor/assets.rb
motor-admin-cstham8-0.4.30 lib/motor/assets.rb
motor-admin-cstham8-0.4.29 lib/motor/assets.rb
motor-admin-cstham8-0.4.28 lib/motor/assets.rb
motor-admin-cstham8-0.4.27 lib/motor/assets.rb
motor-admin-0.4.27 lib/motor/assets.rb
motor-admin-unosquare-0.4.28 lib/motor/assets.rb