class Docman::Info

Attributes

build_mode[RW]
need_rebuild[RW]
state_name[RW]

Public Class Methods

new(hash = {}) click to toggle source
Calls superclass method
# File lib/docman/info.rb, line 10
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']]['handler'] unless self['docroot_config'].deploy_target.nil?
  @need_rebuild = Hash.new
  @changed = Hash.new
  @state_name = nil
  unless self['docroot_config'].deploy_target.nil?
    if self.has_key? 'states'
      self['states'].each_pair do |name, state|
        if state.has_key?('source') and (not state.has_key?('type') or (state.has_key?('type') and state['type'] == 'external_source'))
          if state['source']['type'] == :retrieve_from_repo
            @state_name = name
            repo = state['source']['repo'] == :project_repo ? self['repo'] : state['source']['repo']
            external_state_info = read_yaml_from_file(repo, self['states_path'], state['source']['branch'], state['source']['file'])
            state.deep_merge! external_state_info unless external_state_info.nil? or state.nil?
          end
        end
      end
    end
  end
end

Public Instance Methods

_need_rebuild?() click to toggle source
# File lib/docman/info.rb, line 106
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)
  @changed[@state_name] = true if (not v['version'].nil? and v['version'] != version)
  return true if (not v['version_type'].nil? and v['version_type'] != version_type)
  unless v['state'].nil?
    # return true if v['state'] != @state_name
    @changed[@state_name] = true if v['state'] != @state_name
  end
  false
end
changed?() click to toggle source
# File lib/docman/info.rb, line 78
def changed?
  #TODO: need refactor
  return @changed[@state_name] if not @changed.nil? and @changed.has_key? @state_name and not @changed[@state_name].nil?
  @changed[@state_name] = false
  if need_rebuild?
    @changed[@state_name] = true
  end
  @changed[@state_name]
end
commands(type, hook) click to toggle source
# File lib/docman/info.rb, line 163
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
describe(type = 'short') click to toggle source
# File lib/docman/info.rb, line 53
def describe(type = 'short')
  properties_info(%w(name type build_type))
end
disabled?() click to toggle source
# File lib/docman/info.rb, line 156
def disabled?
  unless self['status'].nil?
    return self['status'] == 'disabled'
  end
  false
end
environment_name() click to toggle source
# File lib/docman/info.rb, line 170
def environment_name
  self['docroot_config'].deploy_target['states'][@state_name] unless self['docroot_config'].deploy_target.nil?
end
info_dir(path = nil) click to toggle source
# File lib/docman/info.rb, line 127
def info_dir(path = nil)
  File.join(
      path.nil? ? self['full_build_path'] : path,
      environment_name() == 'local' ? '.docman' : ''
  )
end
info_file(path = nil) click to toggle source

TODO: make default with lazy initialize

# File lib/docman/info.rb, line 135
def info_file(path = nil)
  File.join(info_dir(path), 'info.yaml')
end
info_file_yaml() click to toggle source
# File lib/docman/info.rb, line 139
def info_file_yaml
  file = info_file
  File.file?(file) ? YAML::load_file(file) : nil
end
need_rebuild?() click to toggle source
# File lib/docman/info.rb, line 88
def need_rebuild?
  return @need_rebuild[@state_name] if not @need_rebuild.nil? and @need_rebuild.has_key? @state_name and not @need_rebuild[@state_name].nil?
  @need_rebuild[@state_name] = _need_rebuild?
  if @need_rebuild[@state_name]
    set_rebuild_recursive(self, true)
  end
  @need_rebuild[@state_name]
end
read_yaml_from_file(repo, path, version, filename) click to toggle source
# File lib/docman/info.rb, line 35
def read_yaml_from_file(repo, path, version, filename)
  GitUtil.get(repo, path, 'branch', version, true, 1, true)
  filepath = File.join(path, filename)
  return YAML::load_file(filepath) if File.file? filepath
  nil
rescue StandardError => e
  raise "Error in info file: #{filepath}, #{e.message}"
end
set_rebuild_recursive(obj, value) click to toggle source
# File lib/docman/info.rb, line 97
def set_rebuild_recursive(obj, value)
  obj.need_rebuild[@state_name] = value
  if obj.has_key?('children')
    obj['children'].each do |info|
      set_rebuild_recursive(info, value)
    end
  end
end
state(options = {}) click to toggle source
# File lib/docman/info.rb, line 144
def state(options = {})
  states(options)[@state_name]
end
states(options = {}) click to toggle source
# File lib/docman/info.rb, line 148
def states(options = {})
  if options[:type] == 'root' and (self['type'] == 'root_chain' or self['type'] == 'single')
    self['root_repo_states']
  else
    self['states']
  end
end
stored_version() click to toggle source
# File lib/docman/info.rb, line 123
def stored_version
  info_file_yaml
end
version(options = {}) click to toggle source
# File lib/docman/info.rb, line 44
def version(options = {})
  state(options).nil? ? nil : state(options)['version']
end
version_type(options = {}) click to toggle source
# File lib/docman/info.rb, line 48
def version_type(options = {})
  return self['version_type'] if self.key? 'version_type'
  return state(options).nil? ? nil : state(options)['type']
end
write_info(result) click to toggle source
# File lib/docman/info.rb, line 57
def write_info(result)
  to_save = {}
  to_save['state'] = @state_name
  to_save['version_type'] = self.version_type unless self.version_type.nil?
  to_save['version'] = self.version unless self.version.nil?
  to_save['result'] = result
  to_save['provider'] = self['provider'] unless self['provider'].nil?
  to_save['type'] = self['type']
  to_save['build_type'] = self['build_type']
  FileUtils::mkdir_p info_dir unless File.directory? info_dir

  # Create local git ignored .docman dir for info file
  if environment_name() == 'local'
    gitignore_file = File.join(info_dir, '.gitignore')
    File.open(gitignore_file, 'w') {|f| f.write '*'} unless File.file? gitignore_file
  end
  File.open(info_file, 'w') {|f| f.write to_save.to_yaml}
  #end
  to_save
end