Sha256: 42a1728f3d7f92104a122c00a3ea1e2c120b0070ee3960755f214c22539d35ef

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

class Ginst::Project
  attr_reader :errors
  
  def errors
    @errors ||= {}
  end
  
  def valid?
    @errors = {}
    validate_name
    validate_dir
    validate_uniqueness
    @errors.empty?
  end
  
  def validate_dir
    self.dir = File.expand_path(self.dir)
    @repo = ::Grit::Repo.new(self.dir)
    true
  rescue ::Grit::NoSuchPathError
    @errors['dir'] = "#{self.dir} not found in #{`hostname`}."
    false
  rescue ::Grit::InvalidGitRepositoryError
    @errors['dir'] = "#{self.dir} is not a valid repo."
    false
  end
  
  def validate_name
    @errors["name"] = "Is needed" and return if self.name.nil?
    @errors["name"] = "Can't be blank" if self.name.empty?
  end
  
  def validate_uniqueness
    if self.name.kind_of? String
      projects = self.class.projects.dup
      projects.delete(self)
      unless projects.select{|p| p.name.slug == self.name.slug }.first.nil?
        @errors["name"] = "Name already taken" 
      end
    end

    if self.dir.kind_of? String
      projects = self.class.projects.dup
      projects.delete(self)
      unless projects.select{|p| p.dir == self.dir }.first.nil?
        @errors["dir"] = "There is already one project with the same directory" 
      end
    end
  end
  
  alias :save_without_validations :save
  def save
    if valid?
      save_without_validations
    else
      false
    end
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ginst-0.2.2 lib/ginst/project/validations.rb