andela-oojewale/matrack

View on GitHub
lib/orm/base_model.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Matrack
  class BaseModel < Queries
    def initialize(hash = {})
      hash.each_pair { |k,v| send("#{k}=", v) }
      self
    end

    @@query_string = ""

    class << self

      def create_table
        query_string = @@query_string.sub(/,[\s]$/,"")
        create_table_fields(table_name,query_string)
        @@query_string = ""
      end

      def property(name, type = "str", desc = {} )
        field_hash = { name => type }
        if verify_col_type(field_hash) == true
          db_str = DataUtility.type_mapper(field_hash)
          @@query_string += query_builder(db_str.keys, db_str.values,                              desc)
          @@query_string += ", " unless @@query_string == ""
          get_and_set_property(name)
        else
          puts db_error(verify_col_type(field_hash))
          exit
        end
      end

      def get_and_set_property(name)
        define_method(name) do
         instance_variable_get("@#{name}")
        end
        define_method("#{name}=") do |value|
          instance_variable_set("@#{name}", "#{value}")
        end
      end

      def create(field_hash)
        passwordify(field_hash)
        attributes = "#{field_hash.keys}".gsub(/:/, "").gsub(/\[|\]/,"")
        values = "#{field_hash.values}".gsub(/\[|\]/,"").gsub(/\"/,"'")
        db_conn.execute "INSERT INTO #{table_name} (#{attributes}) VALUES (#{
          values});"
      end

      def passwordify(field_hash)
        if field_hash.keys.include? :password
          hashed_pass = password_hash(field_hash[:password])
          field_hash[:password] = hashed_pass
        end
        field_hash
      end
    end
  end
end