module Databrain

Constants

VERSION

Public Class Methods

aevt(db) click to toggle source
# File lib/databrain.rb, line 54
def self.aevt(db)
  db.reduce({}) do |idx, (e, a, v)|
    idx[a] ? idx[a][e] = v : idx[a] = { e => v }
    idx
  end
end
eavt(db) click to toggle source
# File lib/databrain.rb, line 47
def self.eavt(db)
  db.reduce({}) do |idx, (e, a, v)|
    idx[e] ? idx[e][a] = v : idx[e] = { a => v }
    idx
  end
end
q(query, db) click to toggle source
# File lib/databrain.rb, line 8
def self.q(query, db)
  q_find = []
  _q_in = []
  q_where = []
 
  query = query.dup
  until (t = query.first).nil?
    case query.shift
    when :find
      q_find << query.shift until q_brake(query)
    when :where
      q_where << query.shift until q_brake(query)
    when :in
      raise "Term `in` not implemented yet"
    else
      raise "Wrong term: #{t}"
    end
  end

  eavt(db).reduce([]) do |result, (_e, av)|
    # _e - is entity id
    # av - is a map of attributes and values
    finded = q_where.reduce(q_find.dup) do |find, clause|
      _, a, v = *clause
      if v.is_a?(Symbol) && v[-1] == "?"
        i = find.index(v)
        print "find: #{find}\ni: #{i}\nav: #{av}\na: #{a}\nv: #{v}\n\n"
        find[i] = av[a]
      else
        break if v != av[a]
      end

      find
    end
    result << finded if finded
    result
  end
end
transact!(db, query) click to toggle source
# File lib/databrain.rb, line 6
def self.transact!(db, query); end

Private Class Methods

q_brake((nxt, _)) click to toggle source
# File lib/databrain.rb, line 63
def self.q_brake((nxt, _))
  [nil, :where, :in].include? nxt
end