Class: Docman::Info

Inherits:
Hash
  • Object
show all
Includes:
Context
Defined in:
lib/docman/info.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logging

#log, logger, #logger, #prefix, #properties_info, #with_logging

Constructor Details

#initialize(hash = {}) ⇒ Info

Returns a new instance of Info.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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')
          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

Instance Attribute Details

#build_modeObject

Returns the value of attribute build_mode.



8
9
10
# File 'lib/docman/info.rb', line 8

def build_mode
  @build_mode
end

#need_rebuildObject

Returns the value of attribute need_rebuild.



8
9
10
# File 'lib/docman/info.rb', line 8

def need_rebuild
  @need_rebuild
end

#state_nameObject

Returns the value of attribute state_name.



8
9
10
# File 'lib/docman/info.rb', line 8

def state_name
  @state_name
end

Instance Method Details

#_need_rebuild?Boolean

Returns:

  • (Boolean)


97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/docman/info.rb', line 97

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?Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
76
77
# File 'lib/docman/info.rb', line 69

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) ⇒ Object



140
141
142
143
144
145
# File 'lib/docman/info.rb', line 140

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') ⇒ Object



52
53
54
# File 'lib/docman/info.rb', line 52

def describe(type = 'short')
  properties_info(%w(name type build_type))
end

#disabled?Boolean

Returns:

  • (Boolean)


133
134
135
136
137
138
# File 'lib/docman/info.rb', line 133

def disabled?
  unless self['status'].nil?
    return self['status'] == 'disabled'
  end
  false
end

#environment_nameObject



147
148
149
# File 'lib/docman/info.rb', line 147

def environment_name
  self['docroot_config'].deploy_target['states'][@state_name] unless self['docroot_config'].deploy_target.nil?
end

#need_rebuild?Boolean

Returns:

  • (Boolean)


79
80
81
82
83
84
85
86
# File 'lib/docman/info.rb', line 79

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) ⇒ Object



35
36
37
38
39
40
41
42
# 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) ⇒ Object



88
89
90
91
92
93
94
95
# File 'lib/docman/info.rb', line 88

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 = {}) ⇒ Object



121
122
123
# File 'lib/docman/info.rb', line 121

def state(options = {})
  states(options)[@state_name]
end

#states(options = {}) ⇒ Object



125
126
127
128
129
130
131
# File 'lib/docman/info.rb', line 125

def states(options = {})
  if options[:type] == 'root' and self['type'] == 'root_chain'
    self['root_repo_states']
  else
    self['states']
  end
end

#stored_versionObject

TODO: check if info.yaml needed for local state



115
116
117
118
119
# File 'lib/docman/info.rb', line 115

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

#version(options = {}) ⇒ Object



44
45
46
# File 'lib/docman/info.rb', line 44

def version(options = {})
  state(options).nil? ? nil : state(options)['version']
end

#version_type(options = {}) ⇒ Object



48
49
50
# File 'lib/docman/info.rb', line 48

def version_type(options = {})
  state(options).nil? ? nil : state(options)['type']
end

#write_info(result) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/docman/info.rb', line 56

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['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