Class: Projects

Inherits:
Hash
  • Object
show all
Defined in:
lib/base/projects.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Hash

#execute, #to_html

Constructor Details

#initialize(dev = nil) ⇒ Projects

Returns a new instance of Projects.



13
14
15
16
17
# File 'lib/base/projects.rb', line 13

def initialize dev=nil
  @dev=dev
  @dev=Dev.new if @dev.nil?
  open
end

Instance Attribute Details

#devObject

Returns the value of attribute dev.



11
12
13
# File 'lib/base/projects.rb', line 11

def dev
  @dev
end

Class Method Details

.currentObject



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/base/projects.rb', line 98

def self.current
  project=nil
  url=Git.remote_origin
  url=Svn.url if url.length==0
  if(Rake.application.original_dir.include?('/wrk/') &&
       url.length > 0)
    project=Project.new(url)
    fullname=Rake.application.original_dir.gsub("#{Environment.dev_root}/wrk/",'')
    project[:fullname] = name if(name.length>0 && !name.include?(Environment.dev_root))
    if(defined?(PROJECTS))
      PROJECTS[name]=project if(!PROJECTS.has_key?(name))
      project.each{|k,v|PROJECTS[name][k]=v}
      PROJECTS.save
    else
      project[:fullname]=name
    end
  end      
  project
end

.user_projects_filenameObject



93
94
95
96
# File 'lib/base/projects.rb', line 93

def self.user_projects_filename
  FileUtils.mkdir_p("#{Environment.dev_root}/data") if(!File.exists?("#{Environment.dev_root}/data"))
  "#{Environment.dev_root}/data/PROJECTS.json"
end

Instance Method Details

#add(args) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
# File 'lib/base/projects.rb', line 125

def add args
  if(args.length > 1)
    project=Project.new(args[1])
    project[:fullname] = args[2] if args.length > 2
    if(project.fullname.length > 0 && !self.has_key?(project.fullname))
  puts "adding #{project.fullname}"
  self[project.fullname]=project
  self.save #Projects.user_projects_filename

end
    end
end

#filenameObject



19
20
21
# File 'lib/base/projects.rb', line 19

def filename
  "#{@dev.get_env('DEV_ROOT')}/data/Projects.json"
end

#import(pattern = '') ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/base/projects.rb', line 137

def import pattern=''
  wrk="#{Environment.dev_root}/wrk"
  if File.exists?(wrk)
     Dir.chdir(wrk) do
         Dir.glob('**/rakefile.rb').each{|rakefile|
           rakedir=File.dirname(rakefile)
           url = Project.get_url rakedir
           #puts "checking #{url}"

           project = Project.new(Project.get_url(rakedir))
           project[:fullname]=Project.get_fullname rakedir if(project.fullname.include?(':'))
           if(pattern.length==0 || project.fullname.include?(pattern))
             if(project.fullname.length > 0 && !self.has_key?(project.fullname))
                 puts "importing #{project.fullname}"
                 self[project.fullname]=project
               end
           end
         }
     end
     self.save Projects.user_projects_filename
    end
end

#list(filter = '') ⇒ Object



44
45
46
47
48
# File 'lib/base/projects.rb', line 44

def list filter=''
  self.each{|k,v|
    puts "#{v.status} #{k}" if(filter.length == 0 || k.include?(filter))
  }
end

#make(args) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/base/projects.rb', line 50

def make args
  filter=''
  filter=args[1] if !args.nil? && args.length > 0
  self.each{|k,v|
    if filter.nil? || filter.length==0 || k.include?(filter)
      tag=v.latest_tag
      if(tag.length > 0)
         logfile="#{Environment.dev_root}/log/#{v.fullname}/#{tag}/#{Environment.user}@#{Environment.machine}.json"
         if(!File.exists?(logfile))
           puts "making #{k} #{tag}" if(!File.exists?(logfile))
           rake_default=v.make tag
           puts rake_default.summary if !rake_default.nil?
         else
            rake_default=v.make tag
            puts rake_default.summary if !rake_default.nil? && rake_default[:exit_code] != 0
         end
        end
      end
  }
end

#openObject



36
37
38
39
40
41
42
# File 'lib/base/projects.rb', line 36

def open
  if File.exists? filename
    #@filename=filename if filename.length > 0

    JSON.parse(IO.read(filename)).each{|k,v| self[k]=v}
    update_state
    end
end

#pullObject



118
119
120
# File 'lib/base/projects.rb', line 118

def pull
  self.each{|k,v| v.pull if v.respond_to?("pull".to_sym)}
end

#rakeObject



121
122
123
# File 'lib/base/projects.rb', line 121

def rake
  self.each{|k,v| v.rake if v.respond_to?("rake".to_sym)}
end

#saveObject



31
32
33
34
# File 'lib/base/projects.rb', line 31

def save
  Dir.make File.dirname(filename) if !File.exists? File.dirname(filename)
  File.open(filename,'w'){|f|f.write(JSON.pretty_generate(self))}
end

#update(args) ⇒ Object



82
83
84
85
86
87
88
89
90
91
# File 'lib/base/projects.rb', line 82

def update args
  filter=''
  filter=args[1] if !args.nil? && args.length > 0
  self.each{|k,v|
    if filter.nil? || filter.length==0 || k.include?(filter)
      puts "updating #{v.fullname}"
      v.update
      end
  }
end

#update_stateObject



23
24
25
26
27
28
29
# File 'lib/base/projects.rb', line 23

def update_state
  self.each{|k,v|
    self[k]=Project.new(v) if(v.is_a?(String))
    self[k]=Project.new(v) if(!v.is_a?(Project) && v.is_a?(Hash))
    self[k][:fullname]=k
  }
end

#work(args) ⇒ Object



71
72
73
74
75
76
77
78
79
80
# File 'lib/base/projects.rb', line 71

def work args
  filter=nil
  filter=args[1] if !args.nil? && args.length > 0
  self.each{|k,v|
    if filter.nil? || filter.length==0 || k.to_s.include?(filter)
      last_work_time=nil
      v.work
      end
  }
end