Skip to content

Instantly share code, notes, and snippets.

@efatsi
Created October 16, 2012 22:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save efatsi/3902392 to your computer and use it in GitHub Desktop.
Save efatsi/3902392 to your computer and use it in GitHub Desktop.
validates_presence_of :name, :if => :require_name, :on => :update
validates_presence_of :email, :if => :require_email, :on => :update
validates_presence_of :phone, :if => :require_phone, :on => :update
def method_missing(name)
if name.to_s =~ /require_\w+/
project.present? && project.send(name)
else
super
end
end
validates_presence_of :name, :if => :require_name, :on => :update
validates_presence_of :email, :if => :require_email, :on => :update
validates_presence_of :phone, :if => :require_phone, :on => :update
def require_name
project.require_name
end
def require_name
project.require_email
end
def require_email
project.require_phone
end
@brianjlandau
Copy link

delegate is the right choice here, but if that wasn't an option, this would be my preferred refactoring:

[:name, :email, :phone].each do |attribute|
  define_method("require_#{attribute}") do
    project.send("require_#{attribute}")
  end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment