Parent

Included Modules

Class/Module Index [+]

Quicksearch

Ruote::HashStorage

An in-memory storage.

Useful for testing or for transient engines.

Attributes

h[R]

Public Class Methods

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

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

  @options = options

  purge!
    # which initializes @h

  replace_engine_configuration(options)
end

Public Instance Methods

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

  @h[type] = {}
end
delete(doc) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 102
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

    return prev if prev['_rev'] != drev

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

    nil # success
  end
end
get(type, key) click to toggle source
# File lib/ruote/storage/hash_storage.rb, line 95
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 124
def get_many(type, key=nil, opts={})

  # NOTE : no dup here for now

  synchronize do

    docs = if key
      keys = Array(key).map { |k| k.is_a?(String) ? "!#{k}" : k }
      @h[type].values.select { |doc| key_match?(type, keys, doc) }
    else
      @h[type].values
    end

    return docs.size if opts[:count]

    docs = docs.sort_by { |d| d['_id'] }
    docs = docs.reverse if opts[:descending]

    skip = opts[:skip] || 0
    limit = opts[:limit] || docs.size

    docs[skip, limit]
  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 151
def ids(type)

  @h[type].keys.sort
end
purge!() click to toggle source

Purges the storage completely.

# File lib/ruote/storage/hash_storage.rb, line 176
def purge!

  @h = ]

    variables

    msgs
    expressions
    errors
    schedules
    configurations
    workitems

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

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

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

  synchronize do

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

    if pre && pre['_rev'] != doc['_rev']
      return pre
    end

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

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

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

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

    nil
  end

#rescue => e
#  puts "=" * 80
#  File.open('doc.json', 'wb') do |f|
#    f.puts Rufus::Json.pretty_encode(doc)
#  end
#  raise e
end
shutdown() click to toggle source

Shuts this storage down.

# File lib/ruote/storage/hash_storage.rb, line 208
def shutdown

  # nothing to do
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.