Never been to TextSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

About this user

Kjell (misterk @forum.textdrive) http://station11.net

« Newer Snippets
Older Snippets »
2 total  XML / RSS feed 

Dynamic time based finder for ActiveRecord

I think it's pretty nice. Get all records within a railsified period of time (7.days.ago, 12.months.ago). I can do cool things like Workout.within_12_days or Workout.within_12_hours. Further conditions can be given as a hash, and will be transposed onto the end of the :conditions.

Workout.within_n_units(:user_id => 12) #-> Workout.find(:all, :conditions => 'created_at > n.units.ago and user_id = 12')


class Workout < ActiveRecord::Base
  class << self
    def within_n_temporal_units(number, units, further_conds={})
      conds = "created_at > '#{eval("#{number}.#{units}.ago").to_s(:db)}'"
      further_conds.each {|key, val| conds << " and #{key} = #{val}"}
      Workout.find(:all, :conditions => conds)
    end
    
    def method_missing(name, *args)
      return within_n_temporal_units($~[1], $~[2], args[0] || {}) if name.to_s =~ /within_(\d+)_(\w+)/
      raise NoMethodError, "undefined method `#{name}' for #{self}:Class"
    end
  end
end

Rails new/add/delete helper

Call: @registered_user_functions( @photo )@, get ( new | edit | delete ) links.
  def registered_user_functions( item = nil, show_new = true )
    # abstract name of html#id to update with javascript
    update_name = item.class.to_s.downcase
    if @session[:user]
      a = "( "
      a << link_to( 'new', :action => 'new' ) + " | " if show_new
      if item # is given to edit or destroy...
        a << link_to_remote( "edit",
              {:url => { :action => "edit", :id => item },
              {:href => url_for( :action => "edit", :id => item ) },
              :update => "#{update_name}-#{item.id}" } )
        a << " | "
        a << link_to_remote( "delete",
              {:url => { :action => "destroy", :id => item },
              {:href => url_for( :action => "destroy", :id => item ) },
              :update => "#{update_name}-#{item.id}",
              :confirm => "really delete this #{update_name}?" } )
      end
      a << " )"
    end
  end
« Newer Snippets
Older Snippets »
2 total  XML / RSS feed