lib/docman/info.rb in docman-0.0.5 vs lib/docman/info.rb in docman-0.0.6
- old
+ new
@@ -1,48 +1,102 @@
+require 'docman/context'
+
module Docman
class Info < Hash
+ include Docman::Context
+
+ attr_accessor :need_rebuild
+
def initialize(hash = {})
super
hash.each_pair do |k, v|
self[k] = v
end
- self['build_type'] = self['docroot_config'].deploy_target['builders'][self['type']]['type']
+ self['build_type'] = self['docroot_config'].deploy_target['builders'][self['type']]['handler']
+ @need_rebuild = Hash.new
end
def version
self['states'][self['state']].nil? ? nil : self['states'][self['state']]['version']
end
def version_type
self['states'][self['state']].nil? ? nil : self['states'][self['state']]['type']
end
+ def describe(type = 'short')
+ properties_info(%w(name type build_type))
+ end
+
def write_info(result)
to_save = {}
to_save['state'] = self['state']
to_save['version_type'] = self.version_type unless self.version_type.nil?
to_save['version'] = self.version unless self.version.nil?
- # to_save['ref'] = result
+ to_save['result'] = result
to_save['type'] = self['type']
to_save['build_type'] = self['build_type']
File.open(File.join(self['full_build_path'], 'info.yaml'), 'w') {|f| f.write to_save.to_yaml}
+ to_save
end
def need_rebuild?
- return TRUE if Docman::Application.instance.options[:force]
- return TRUE unless File.directory? self['full_build_path']
- info_filename = File.join(self['full_build_path'], 'info.yaml')
- return TRUE unless File.file?(info_filename)
- version = YAML::load_file(info_filename)
- return TRUE if version['type'] != self['type']
- return TRUE if version['build_type'] != self['build_type']
+ return @need_rebuild[self['state']] if not @need_rebuild.nil? and @need_rebuild.has_key? self['state'] and not @need_rebuild[self['state']].nil?
+ @need_rebuild[self['state']] = _need_rebuild?
+ if @need_rebuild[self['state']]
+ set_rebuild_recursive(self, true)
+ end
+ @need_rebuild[self['state']]
+ end
+
+ def set_rebuild_recursive(obj, value)
+ obj.need_rebuild[self['state']] = value
+ if obj.has_key?('children')
+ obj['children'].each do |info|
+ set_rebuild_recursive(info, value)
+ end
+ end
+ end
+
+ def _need_rebuild?
+ return true if Docman::Application.instance.force?
+ return true unless File.directory? self['full_build_path']
+ v = stored_version
+ return true unless v
+ return true if v['type'] != self['type']
+ return true if v['build_type'] != self['build_type']
+ return true if (not v['version'].nil? and v['version'] != self.version)
+ return true if (not v['version_type'].nil? and v['version_type'] != self.version_type)
+ unless v['state'].nil?
+ return true if v['state'] != self['state']
+ end
false
end
+ def stored_version
+ info_filename = File.join(self['full_build_path'], 'info.yaml')
+ return false unless File.file?(info_filename)
+ YAML::load_file(info_filename)
+ end
+
def state=(state)
self['state'] = state
+ end
+
+ def disabled?
+ unless self['status'].nil?
+ return self['status'] == 'disabled'
+ end
+ false
+ end
+
+ def commands(type, hook)
+ if self.has_key? 'actions' and self['actions'].has_key? type and self['actions'][type].has_key? hook
+ return self['actions'][type][hook]
+ end
+ []
end
end
end
\ No newline at end of file