andela-oojewale/matrack

View on GitHub
lib/orm/data_manager.rb

Summary

Maintainability
A
45 mins
Test Coverage
require "sqlite3"
require "digest/sha1"

module Matrack
  class DataManager

    class << self
      def db_conn
        db = SQLite3::Database.new "#{APP_PATH}/db/app.sqlite3"
        db.results_as_hash = true
        db
      end

      def db_error(message)
        DataUtility.db_error(message)
      end

      def query_builder(name, type, desc)
        name = name.join
        type = type.join
        primary_key = "PRIMARY KEY" if desc[:primary_key] == true
        primary_key += " AUTOINCREMENT" if desc[:primary_key] == true &&
                                           type == "INTEGER"
        primary_key = primary_key ? primary_key : ""
        null_value = desc[:nullable].nil? ? "NULL" : "NOT NULL"
        null_value = "NOT NULL" if desc[:primary_key] == true
        "#{name} #{type} #{primary_key} #{null_value}"
      end

      def allowed_field_types
        ["int", "str", "time", "date"]
      end

      def create_table_fields(table_name, qry_str)
        begin
          db_conn.execute "CREATE TABLE IF NOT EXISTS #{table_name} (#{qry_str});"
        rescue
          puts db_error("Can not create table")
          exit
        end
      end

      def verify_col_type(field_hash)
        return true if valid_col_types?(field_hash)
        "Invalid column type(s) specified"
      end

      def valid_col_types?(field_hash)
        field_hash.values.all? { |val| allowed_field_types.include? val.to_s }
      end

      def password_hash(password)
        Digest::SHA1.hexdigest(password)
      end
    end
  end
end