Parent

Included Modules

Class/Module Index [+]

Quicksearch

Ruote::HashStorage

An in-memory storage.

Attributes

h[R]

Public Class Methods

new(options={}) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 42
def initialize (options={})

  super()
    # since were including MonitorMixin, this super() is necessary

  purge!

  put(options.merge('type' => 'configurations', '_id' => 'engine'))
end

Public Instance Methods

add_type(type) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 165
def add_type (type)

  @h[type] = {}
end
delete(doc) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 92
def delete (doc)

  drev = doc['_rev']

  raise ArgumentError.new("can't delete doc without _rev") unless drev

  synchronize do

    prev = get(doc['type'], doc['_id'])

    return true if prev.nil?

    doc['_rev'] ||= 0

    if prev['_rev'] == drev

      @h[doc['type']].delete(doc['_id'])

      nil

    else

      prev
    end
  end
end
dump(type) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 175
def dump (type)

  s = "=== #{type} ===\n"

  @h[type].inject(s) do |s1, (k, v)|
    s1 << "\n"
    s1 << "#{k} :\n"
    v.keys.sort.inject(s1) do |s2, k1|
      s2 << "  #{k1} => #{v[k1].inspect}\n"
    end
  end
end
get(type, key) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 85
def get (type, key)

  synchronize do
    Ruote.fulldup(@h[type][key])
  end
end
get_many(type, key=nil, opts={}) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 119
def get_many (type, key=nil, opts={})

  # NOTE : no dup here for now

  synchronize do

    docs = key ?
      @h[type].values.select { |doc| doc['_id'].match(key) } :
      @h[type].values

    if l = opts[:limit]
      docs[0, l]
    else
      docs
    end
  end
end
ids(type) click to toggle source

Returns a sorted list of all the ids for a given type.

# File lib/ruote/storage/hash_storage.rb, line 139
def ids (type)

  @h[type].keys.sort
end
purge!() click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 144
def purge!

  @h = ]

    variables

    msgs
    expressions
    errors
    schedules
    configurations
    workitems

  ].inject({}) { |h, k|
    h[k] = {}
    h
  }

  @h['configurations']['engine'] = @options
end
purge_type!(type) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 170
def purge_type! (type)

  @h[type] = {}
end
put(doc, opts={}) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 52
def put (doc, opts={})

  i = @h.size

  synchronize do

    pre = get(doc['type'], doc['_id'])

    #if pre && ( ! opts[:update_rev]) && pre['_rev'] != doc['_rev']
    if pre && pre['_rev'] != doc['_rev']
      return pre
    end

    if pre.nil? && doc['_rev']
      return true
    end

    doc = if opts[:update_rev]
      doc['_rev'] = pre ? pre['_rev'] : -1
      doc
    else
      doc.merge('_rev' => doc['_rev'] || -1)
    end

    doc['put_at'] = Ruote.now_to_utc_s
    doc['_rev'] = doc['_rev'] + 1

    @h[doc['type']][doc['_id']] = Rufus::Json.dup(doc)

    nil
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.