Sha256: e2f93a66bbaf4007364ab63f5da2b9aa780f445baad02f743140e1fe0106b2f6

Contents?: true

Size: 1.22 KB

Versions: 5

Compression:

Stored size: 1.22 KB

Contents

require 'psych'
require 'pathname'
require 'forwardable'

module Canals
  class Session
    include Enumerable
    extend Forwardable

    def initialize
      @session = load_session(session_file)
    end

    def_delegator :@session, :[]

    def each(&block)
      @session.each(&block)
    end

    def empty?
      @session.empty?
    end

    def add(session, save=true)
      @session.push(session)
      save! if save
    end

    def del(name, save=true)
      @session.delete_if{ |s| s[:name] == name }
      save! if save
    end

    def get(session_id)
      case session_id
      when Numeric
        @session.find{ |s| s[:pid] == session_id }
      when String
        @session.find{ |s| s[:name] == session_id }
      end
    end

    def save!
      FileUtils.mkdir_p(session_file.dirname)
      File.open(session_file, 'w') do |file|
        file.write(Psych.dump(@session))
      end
    end

    private

    def session_file
      file = File.join(Dir.home, '.canals/session')
      Pathname.new(file)
    end

    def load_session(_session_file)
      valid_file = _session_file && _session_file.exist? && !_session_file.size.zero?
      return [] if !valid_file
      return Psych.load_file(_session_file)
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
canals-0.8.4 lib/canals/session.rb
canals-0.8.3 lib/canals/session.rb
canals-0.8.2 lib/canals/session.rb
canals-0.8.1 lib/canals/session.rb
canals-0.8.0 lib/canals/session.rb