55502f40dc8b7c769880b10874abc9d0

As you see, Event.queue self, :new_video, { :object_key => self._object_key, :object_data => self._render }
is the same for both conditions.

if self.is_a?(Dog)
    with_new_options do
      $options << :Dog_videos
      Event.queue self, :new_video, { :object_key => self._object_key, :object_data => self._render }
    end
  elsif self.is(Cat)
     with_new_options do
      $options << :Cat_videos
      Event.queue self, :new_video, { :object_key => self._object_key, :object_data => self._render }
    end
  end

Refactorings

No refactoring yet !

64b27848ca865636f5ed2b1d0cb54b36

Anthony Cook

September 30, 2011, September 30, 2011 09:22, permalink

No rating. Login to rate!

Yes, this could be made even smaller, but this is the best balance between readability and DRY, we're not writing perl.

with_new_options do

  if self.is_a?(Dog)
    $options << :Dog_videos
  elsif self.is(Cat)
    $options << :Cat_videos
  end

  Event.queue self, :new_video, { :object_key => self._object_key, :object_data => self._render }
end
0a751997387c6914b174b7f0a81d9d4b

Jeremy

September 30, 2011, September 30, 2011 18:26, permalink

No rating. Login to rate!

Assuming your just checking for Dog or Cat class, this is more compact.

with_new_options do
  $options <<  "#{self.class}_videos".to_sym

  Event.queue self, :new_video, { :object_key => self._object_key, :object_data => self._render }
end
0a751997387c6914b174b7f0a81d9d4b

Jeremy

September 30, 2011, September 30, 2011 18:26, permalink

No rating. Login to rate!

Assuming your just checking for Dog or Cat class, this is more compact.

with_new_options do
  $options <<  "#{self.class}_videos".to_sym

  Event.queue self, :new_video, { :object_key => self._object_key, :object_data => self._render }
end
D85d44a0eca045f40e5a31449277c26c

Ben Marini

October 1, 2011, October 01, 2011 12:56, permalink

No rating. Login to rate!

Why not let your subclasses decide what options to add?

class Animal
  def queue_event
    with_new_options do
      $options << self.options
      Event.queue self, :new_video, { :object_key => self._object_key, :object_data => self._render }
    end
  end
end

class Dog < Animal
  def options
    :Dog_options
  end
end

class Cat < Animal
  def options
    :Cat_options
  end
end

Your refactoring





Format Copy from initial code

or Cancel