Database-less ActiveRecord for Adauth

I’m using the Adauth gem to perform authentication against our Active Directory for a site that backs to an HBase cluster. At this point we’re not really concerned with storing additional user data, we just want the authentication functionality.

It’d be pretty easy to create a login form with no model except then I’d have to handle exceptional situations (validation!) outside of the typical flow which makes skipping the model ultimately just cost me extra time in the form of more work. I’m also using Formtastic, specifically Bootstrap-Formtastic, and I really like consistency in my application.

So based on this article I implemented a database-less ActiveRecord model so I could utilize semantic_form_for and remain consistent with the rest of my application.

#./app/controllers/sessions_controller.rb
class SessionsController < AdAuthController
  before_filter :check_authentication, :except => [ :new, :create, :destroy ]
  ⋮
  class LoginUser < ActiveRecord::Base
    validates :username, :presence => true
    validates :password, :presence => true

    def self.columns
      @columns ||= []
    end
    def self.column(name, sql_type = nil, default = nil, null = true)
      columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
    end

    column :username, :string
    column :password, :string
  end
end

And since I'm using an embedded class its important to remember to specify the correct symbol in the parameters:

#./app/controllers/sessions_controller.rb
  ⋮
  def create
    @login_user = LoginUser.new(params[:sessions_controller_login_user])
    ⋮
  end
  ⋮

Because we are backing to a HBase cluster I expect this isn't the last time I'll need to use this approach on our project.