Sha256: b9e2575b88e072f602f636ddb640de711fcf7271a0dc70e04ecc565d74c537cf

Contents?: true

Size: 1.28 KB

Versions: 41

Compression:

Stored size: 1.28 KB

Contents

require 'fileutils'
require 'pstore'

module BooticCli

  class Store
    VERSION = 1
    DEFAULT_NAMESPACE = 'production'.freeze
    DIRNAME   = '.bootic'.freeze
    FILE_NAME = 'store.pstore'.freeze

    def initialize(base_dir: ENV['HOME'], dir: DIRNAME, namespace: DEFAULT_NAMESPACE)
      @base_dir = File.join(base_dir, dir)
      @namespace = namespace
      FileUtils.mkdir_p @base_dir
    end

    def []=(k, v)
      hash = store[namespace] || {}
      hash[k] = v
      store[namespace] = hash
    end

    def [](k)
      hash = store[namespace] || {}
      hash[k]
    end

    def transaction(&block)
      store.transaction(&block)
    end

    def erase
      FileUtils.rm_rf base_dir
    end

    def needs_upgrade?
      transaction do
        store['version'].to_i < VERSION
      end
    end

    def upgrade!
      return unless needs_upgrade?

      transaction do
        current_values = {}
        store.roots.each do |r|
          v = store[r]
          store.delete(r)
          current_values[r] = v
        end

        current_values.each do |k, v|
          self[k] = v
        end

        store['version'] = VERSION
      end
    end

    private

    attr_reader :base_dir, :namespace

    def store
      @store ||= PStore.new(File.join(base_dir, FILE_NAME))
    end
  end

end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
bootic_cli-1.2.0 lib/bootic_cli/store.rb
bootic_cli-1.1.0 lib/bootic_cli/store.rb
bootic_cli-1.0.0 lib/bootic_cli/store.rb
bootic_cli-0.9.6 lib/bootic_cli/store.rb
bootic_cli-0.9.5 lib/bootic_cli/store.rb
bootic_cli-0.9.4 lib/bootic_cli/store.rb
bootic_cli-0.9.3 lib/bootic_cli/store.rb
bootic_cli-0.9.2 lib/bootic_cli/store.rb
bootic_cli-0.9.1 lib/bootic_cli/store.rb
bootic_cli-0.9.0 lib/bootic_cli/store.rb
bootic_cli-0.8.2 lib/bootic_cli/store.rb
bootic_cli-0.8.1 lib/bootic_cli/store.rb
bootic_cli-0.8.0 lib/bootic_cli/store.rb
bootic_cli-0.7.3 lib/bootic_cli/store.rb
bootic_cli-0.7.2 lib/bootic_cli/store.rb
bootic_cli-0.7.1 lib/bootic_cli/store.rb
bootic_cli-0.7.0 lib/bootic_cli/store.rb
bootic_cli-0.6.7 lib/bootic_cli/store.rb
bootic_cli-0.6.6 lib/bootic_cli/store.rb
bootic_cli-0.6.5 lib/bootic_cli/store.rb