Sha256: c59541e9be565cfe5fe0af4b11f209da64ff89c95f88e1f97c8c7a2adf34e371

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

class Ginst::Project

  class << self

    def projects
      @@projects
    end
    
    def save_all
      f = File.open(File.join(Ginst::Ginst.working_dir,'projects.yml'),'w')
      p = @@projects.dup.map do |p|
        p.send(:instance_variables).each do |var|
          p.send(:remove_instance_variable,var) unless %w(@name @dir @build_process).include? var
        end
        p
      end 
      f.write(p.to_yaml)
      f.close
      true
    end

    def load_projects
      projects = YAML::load(File.read(File.join(Ginst::Ginst.working_dir,'projects.yml')))
      projects = [] unless projects.kind_of? Array
      if projects.empty? || projects.map{|c| c.class}.uniq == [Ginst::Project]
        @@projects = projects
      else
        STDERR.write "There is an error in projects.yml"
        @@projects = []
      end
    rescue Errno::ENOENT
      @@projects = []
    end    
  end

  attr_accessor :name, :dir

  # Generate a new project
  #   Ginst::Project.new("name" => "My Super Project", "dir" => "asdf")
  def initialize(params = {})
    params.each{|k,v|  send("#{k}=".to_sym, v) }
    @errors = {}
  end

  def save
    if self.class.projects.select{|p| p == self}.empty?
      self.class.projects << self
    end
    self.class.save_all
  end
  
  def destroy
    unless self.class.projects.select{|p| p == self}.empty?
      self.class.projects.delete(self)
      self.class.save_all
    end
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

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