Screencast: Refactoring und Dynamic Delegator

Code Refactoring ist der Prozess bei dem ein Programm modifiziert (optimiert, verbessert) wird ohne sein Verhalten nach aussen zu verändern. Diese Woche zeigt Ryan wie Refactoring eingesetzt werden kann und wie man Dynamic Delegator in Active Recors nutzt.

 

Download:

Download (11.2 MB, 7:58)
Alternativer Download für iPod & Apple TV (10.9 MB, 7:58)

 

Resourcen:

 

Quellcode:

# rails console
Product.search({}).class
Object.instance_methods
BasicObject.instance_methods

# products_controller.rb
@products = Product.search(params)

# models/product.rb
def self.search(params)
  products = scope_builder
  products.where("name like ?", "%" + params[:name] + "%") if params[:name]
  products.where("price >= ?", params[:price_gt]) if params[:price_gt]
  products.where("price <= ?", params[:price_lt]) if params[:price_lt]
  products
end

def self.scope_builder
  DynamicDelegator.new(scoped)
end

# lib/dynamic_delegator.rb
class DynamicDelegator < BasicObject
  def initialize(target)
    @target = target
  end

  def method_missing(*args, &block)
    result = @target.send(*args, &block)
    @target = result if result.kind_of? @target.class
    result
  end
end

Eingestellt am 03.05.2010 um 10:55

Kategorie: Tutorials

Be Sociable, Share!

Kommentare für diesen Artikel wurden geschlossen.

Suchen auf rubyonrails.de

Aktuelle Rails Version + Abhängigkeiten:

Gem rails-3.0.0
actionmailer (= 3.0.0, runtime)
actionpack (= 3.0.0, runtime)
activerecord (= 3.0.0, runtime)
activeresource (= 3.0.0, runtime)
activesupport (= 3.0.0, runtime)
bundler (~> 1.0.0, runtime)
railties (= 3.0.0, runtime)

Rails auf Rubyforge
Rails auf Github