Sha256: 222f4687c9ad727f3f7aa160c8691f2344ba1102e18f4b6fb6c346eff1965e67

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

require 'env_paths/version'
require 'tmpdir'
require 'etc'

module EnvPaths
  OSData = Struct.new(:data, :config, :cache, :log, :temp)
  HOMEDIR = Dir.home

  module Linux
    def self.config(app_name)
      OSData.new(
        File.join(ENV.fetch('XDG_DATA_HOME', File.join(HOMEDIR, '.local', 'share')), app_name),
        File.join(ENV.fetch('XDG_CONFIG_HOME', File.join(HOMEDIR, '.config')), app_name),
        File.join(ENV.fetch('XDG_CACHE_HOME', File.join(HOMEDIR, '.cache')), app_name),
        # https://wiki.debian.org/XDGBaseDirectorySpecification#state
        File.join(ENV.fetch('XDG_STATE_HOME', File.join(HOMEDIR, '.local', 'state')), app_name),
        File.join(Dir.tmpdir, Etc.getlogin, app_name)
      )
    end
  end

  module Windows
    def self.config(app_name)
      app_data = ENV.fetch('LOCALAPPDATA', File.join(HOMEDIR, 'AppData', 'Local'))

      OSData.new(
        File.join(app_data, app_name, 'Data'),
        File.join(app_data, app_name, 'Config'),
        File.join(app_data, app_name, 'Cache'),
        File.join(app_data, app_name, 'Log'),
        File.join(Dir.tmpdir, app_name)
      )
    end
  end

  module MacOs
    def self.config(app_name)
      library = File.join(Dir.home, 'Library')

      OSData.new(
        File.join(library, 'Application Support', app_name),
        File.join(library, 'Preferences', app_name),
        File.join(library, 'Caches', app_name),
        File.join(library, 'Logs', app_name),
        File.join(Dir.tmpdir, app_name)
      )
    end
  end

  def self._platform
    RUBY_PLATFORM
  end

  def self.get(app_name, opts = {})
    suffix = opts.fetch(:suffix, 'ruby')
    app_name += "-#{suffix}" unless opts[:suffix] == false
    case _platform.downcase
    when /win32/
      Windows.config(app_name)
    when /darwin/
      MacOs.config(app_name)
    else
      Linux.config(app_name)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
env_paths-1.0.0 lib/env_paths.rb