Sha256: 054fed011ca2066c76e3857bfd692bbd786592a8ab7217df750f39e704e8c02e

Contents?: true

Size: 1.33 KB

Versions: 23

Compression:

Stored size: 1.33 KB

Contents

module Xampl

  require "fileutils"
  require "fsdb"
  require "xamplr/persister/caching"

  class FSDBPersister < AbstractCachingPersister

    def initialize(name=nil, format=nil, root=File.join(".", "repo-fsdb"))
      super(root, name, format)

      @db = FSDB::Database[@root_dir]
      @db_lock = "lock"
      @db[@db_lock] = @db_lock
    end

    def FSDBPersister.kind
      :fsdb
    end

    def kind
      FSDBPersister.kind
    end

    def rollback_cleanup
      super
      @db.clear_cache
    end

    def do_sync_write
      @db.edit(@db_lock){ | lock |
        @changed.each { | xampl, ignore | write(xampl) }
      }
    end

    def place_name(klass, id, type=".txt")
      place = File.join(klass.name.split("::"), "#{id}#{type}")
      return place
    end

    def write(xampl)
      raise XamplException.new(:no_index_so_no_persist) unless xampl.get_the_index
      #return false unless xampl.get_the_index

      place = place_name(xampl.class, xampl.get_the_index)
      @db[place] = represent(xampl)

      @write_count = @write_count + 1
      xampl.changes_accepted
      return true
    end

    def read_representation(klass, pid)
      place = place_name(klass, pid)
      representation = @db.edit(@db_lock){ | lock | @db[place] }
      return representation
    end
  end

  Xampl.register_persister_kind(FSDBPersister)
end

Version data entries

23 entries across 23 versions & 2 rubygems

Version Path
hutch-xamplr-1.0.0 lib/xamplr/persister/fsdb.rb
hutch-xamplr-1.0.1 lib/xamplr/persister/fsdb.rb
hutch-xamplr-1.0.2 lib/xamplr/persister/fsdb.rb
hutch-xamplr-1.0.3 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.0.4 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.0.5 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.1.0 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.1.1 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.1.2 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.1.4 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.2.0 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.0 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.1 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.10 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.11 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.12 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.13 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.14 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.3 lib/xamplr/obsolete/fsdb.rb
hutch-xamplr-1.3.8 lib/xamplr/obsolete/fsdb.rb