module Mystic::Model::ClassMethods

Public Instance Methods

create(params={}) click to toggle source
# File lib/mystic/model.rb, line 114
def create params={}, opts={}
  res = Mystic.execute insert_sql(params, opts.merge({ :return_rows => true }))
                  return res if res.is_a? String
                  res.first rescue nil
end
delete(params={}) click to toggle source
# File lib/mystic/model.rb, line 126
def delete params={}, opts={}
                  res = Mystic.execute delete_sql(params, opts)
  return res.first if !opts[:plural] && !res.nil?
  res
end
delete_sql(params={}) click to toggle source
# File lib/mystic/model.rb, line 91
def delete_sql params={}, opts={}
  return "" if params.empty?
                  
                  sym_opts = opts.symbolize

                  wrapper_sql(
                          :sql => "DELETE FROM #{table_name} WHERE #{params.sqlize*' AND '}",
                          :return_rows => sym_opts[:return_rows],
                          :return_json => sym_opts[:return_json],
    :plural => sym_opts.member?(:plural) ? sym_opts[:plural] : true
                  )
end
exec_func(funcname, *params) click to toggle source
# File lib/mystic/model.rb, line 132
def exec_func funcname, *params
        Mystic.execute function_sql(false, funcname, *params)
end
exec_func_rows(funcname, *params) click to toggle source
# File lib/mystic/model.rb, line 136
def exec_func_rows funcname, *params
        Mystic.execute function_sql(true, funcname, *params)
end
fetch(params={}) click to toggle source
# File lib/mystic/model.rb, line 108
def fetch params={}, opts={}
  res = select params, opts.merge({:count => 1, :fetch => true})
                  return res if res.is_a? String
                  res.first rescue nil
end
function_sql(returns_rows, funcname, *params) click to toggle source
# File lib/mystic/model.rb, line 42
def function_sql returns_rows, funcname, *params
                  "SELECT #{returns_rows ? "* FROM" : ""} #{funcname}(#{params.sqlize*','})"
end
insert_sql(params={}) click to toggle source
# File lib/mystic/model.rb, line 78
def insert_sql params={}, opts={}
                  return "" if params.empty?

                  sym_opts = opts.symbolize
                  
                  wrapper_sql(
                          :sql => "INSERT INTO #{table_name} (#{params.keys*','}) VALUES (#{params.values.sqlize*','})",
                          :return_rows => sym_opts[:return_rows],
                          :return_json => sym_opts[:return_json],
    :plural => sym_opts.member?(:plural) ? sym_opts[:plural] : true
                  )
end
select(params={}) click to toggle source
# File lib/mystic/model.rb, line 104
def select params={}, opts={}
  Mystic.execute select_sql(params, opts)
end
select_sql(params={}) click to toggle source
# File lib/mystic/model.rb, line 46
def select_sql params={}, opts={}
                  sym_opts = opts.symbolize
  count = sym_opts[:count] || 0
                  where = params.sqlize

                  sql = []
                  sql << "SELECT #{visible_cols*','} FROM #{table_name}"
                  sql << "WHERE #{where*' AND '}" if where.count > 0
                  sql << "LIMIT #{count.to_i}" if count > 0
                  
                  wrapper_sql(
                          :sql => sql.join(' '),
                          :return_rows => true,
                          :return_json => sym_opts[:return_json],
                          :plural => sym_opts[:fetch] == false
                  )
end
table_name() click to toggle source
# File lib/mystic/model.rb, line 10
def table_name
  to_s.split("::").last.downcase
end
update(where={}) click to toggle source
# File lib/mystic/model.rb, line 120
def update where={}, set={}, opts={}
  res = Mystic.execute update_sql(where, set, opts.merge({ :return_rows => true }))
  return res.first unless opts[:plural]
  res
end
update_sql(where={}) click to toggle source
# File lib/mystic/model.rb, line 64
def update_sql where={}, set={}, opts={}
  return "" if where.empty?
  return "" if set.empty?
                  
                  sym_opts = opts.symbolize
                  
                  wrapper_sql(
                          :sql => "UPDATE #{table_name} SET #{set.sqlize*','} WHERE #{where.sqlize*' AND '}",
                          :return_rows => sym_opts[:return_rows],
                          :return_json => sym_opts[:return_json],
    :plural => sym_opts.member?(:plural) ? sym_opts[:plural] : true
                  )
end
visible_cols() click to toggle source
# File lib/mystic/model.rb, line 14
def visible_cols
        ["*"]
end
wrapper_sql(opts={}) click to toggle source
# File lib/mystic/model.rb, line 18
        def wrapper_sql opts={}
                sym_opts = opts.symbolize

                sql = sym_opts[:sql] || "SELECT 1"
                op = sql.split(/\s+/,2).first.upcase
                return_rows = sym_opts[:return_rows] || false
                return_json = sym_opts[:return_json] || false
                return_rows = true if return_json
                plural = opts[:plural] && op != "INSERT"
                
                sql << " RETURNING #{visible_cols*','}" if return_rows && op != "SELECT"

return sql unless return_json

                s = []
                        s << "WITH res AS (#{sql}) SELECT"
                        s << "array_to_json(array_agg(res))" if plural
                        s << "row_to_json(res)" unless plural
                        s << "AS #{Mystic::JSON_COL}"
                        s << "FROM res"
s << "LIMIT 1" unless plural
                s*' '
        end