Sha256: 541a797860fefb3586a960dac92c408e2f00590f2f305b8646001141fb9d5018

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

require 'singleton'

module T
  class RCFile
    include Singleton
    attr_reader :path
    FILE_NAME = '.trc'

    def initialize
      @path = File.join(File.expand_path("~"), FILE_NAME)
      @data = load_file
    end

    def [](username)
      profiles[username]
    end

    def []=(username, profile)
      profiles[username] ||= {}
      profiles[username].merge!(profile)
      write
    end

    def configuration
      @data['configuration']
    end

    def active_consumer_key
      profiles[active_profile[0]][active_profile[1]]['consumer_key'] if active_profile?
    end

    def active_consumer_secret
      profiles[active_profile[0]][active_profile[1]]['consumer_secret'] if active_profile?
    end

    def active_profile
      configuration['default_profile']
    end

    def active_profile=(profile)
      configuration['default_profile'] = [profile['username'], profile['consumer_key']]
      write
    end

    def active_secret
      profiles[active_profile[0]][active_profile[1]]['secret'] if active_profile?
    end

    def active_token
      profiles[active_profile[0]][active_profile[1]]['token'] if active_profile?
    end

    def delete
      File.delete(@path) if File.exist?(@path)
    end

    def empty?
      @data == default_structure
    end

    def load_file
      require 'yaml'
      YAML.load_file(@path)
    rescue Errno::ENOENT
      default_structure
    end

    def path=(path)
      @path = path
      @data = load_file
      @path
    end

    def profiles
      @data['profiles']
    end

    def reset
      self.send(:initialize)
    end

  private

    def active_profile?
      active_profile && profiles[active_profile[0]] && profiles[active_profile[0]][active_profile[1]]
    end

    def default_structure
      {'configuration' => {}, 'profiles' => {}}
    end

    def write
      require 'yaml'
      File.open(@path, File::RDWR|File::TRUNC|File::CREAT, 0600) do |rcfile|
        rcfile.write @data.to_yaml
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
t-1.0.1 lib/t/rcfile.rb