module Taxon::Index

Public Instance Methods

add(index, record, ignore=ignore_keys) click to toggle source
# File lib/taxon/index.rb, line 37
def add(index, record, ignore=ignore_keys)
  if nothing?(index.index_targets)
    unique_insert(index, record, ignore) if record?(record, index.index_keys)
  else
    unique_insert(index, record, ignore) if record?(record, index.index_targets)
  end
end
ignore_keys() click to toggle source
# File lib/taxon/index.rb, line 53
def ignore_keys
  [:uuid, :UUID, :id, :Id, :ID]
end
index(preds) click to toggle source
# File lib/taxon/index.rb, line 8
def index(preds)
  ind = Array.new
  setup_index_keys(ind, preds)
  setup_index_targets(ind, preds)
  ind
end
index?(data) click to toggle source
# File lib/taxon/index.rb, line 31
def index?(data)
  data.is_a?(Array) &&
    data.respond_to?(:index_keys) &&
      data.respond_to?(:index_targets)
end
is_unique_entry(entry, record, ignore=ignore_keys) click to toggle source
# File lib/taxon/index.rb, line 49
def is_unique_entry(entry, record, ignore=ignore_keys)
  keys = (entry.keys - ignore).any?{|i| entry[i] != record[i]}
end
setup_index_keys(index, preds) click to toggle source
# File lib/taxon/index.rb, line 15
def setup_index_keys(index, preds)
  if Guard.record_keys?(preds)
    index.define_singleton_method(:index_keys) {preds}
  elsif Guard.record_target?(self, preds)
    index.define_singleton_method(:index_keys) {preds.keys}
  end
end
setup_index_targets(index, targets) click to toggle source
# File lib/taxon/index.rb, line 23
def setup_index_targets(index, targets)
  if Guard.record_keys?(targets)
    index.define_singleton_method(:index_targets) {}
  elsif Guard.record_target?(self, targets)
    index.define_singleton_method(:index_targets) {targets}
  end
end
unique_insert(index, record, ignore=ignore_keys) click to toggle source
# File lib/taxon/index.rb, line 45
def unique_insert(index, record, ignore=ignore_keys)
  index.all?{|e| is_unique_entry(e, record, ignore)} ? index.push(record) : index
end