Class: Cerberus::Status

Inherits:
Object
  • Object
show all
Defined in:
lib/cerberus/status.rb

Overview

Fields that are contained in status file

successful_build_timestamp
timestamp
successful (true mean previous build was successful, otherwise - false)
revision
brokeness
successful_build_revision

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(param) ⇒ Status

Returns a new instance of Status.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/cerberus/status.rb', line 14

def initialize(param)
  if param.is_a? Hash
    @hash = param
    @current_build_successful = @hash['state']
    @already_kept = true
  else
    @path = param
    value = File.exists?(@path) ? YAML.load(IO.read(@path)) : nil
  
    @hash =
    case value
    when String
      value = %w(succesful successful setup).include?(value) #fix typo in status values
      {'successful' => value}
    when nil
      {}
    else
      value
    end
  
    @already_kept = false
  end

  @revision = @hash['revision']
  @successful_build_revision = @hash['successful_build_revision']
  @previous_build_successful = @hash['successful']
  @previous_brokeness = @hash['brokeness']

  # Create some convenience methods to access status
  @hash.keys.each { |key| self.class.send( :define_method, key ) { @hash[key] } }
end

Instance Attribute Details

#current_brokenessObject (readonly)

Returns the value of attribute current_brokeness.



12
13
14
# File 'lib/cerberus/status.rb', line 12

def current_brokeness
  @current_brokeness
end

#current_build_successfulObject (readonly)

Returns the value of attribute current_build_successful.



12
13
14
# File 'lib/cerberus/status.rb', line 12

def current_build_successful
  @current_build_successful
end

#previous_brokenessObject (readonly)

Returns the value of attribute previous_brokeness.



12
13
14
# File 'lib/cerberus/status.rb', line 12

def previous_brokeness
  @previous_brokeness
end

#previous_build_successfulObject (readonly)

Returns the value of attribute previous_build_successful.



12
13
14
# File 'lib/cerberus/status.rb', line 12

def previous_build_successful
  @previous_build_successful
end

#revisionObject (readonly)

Returns the value of attribute revision.



12
13
14
# File 'lib/cerberus/status.rb', line 12

def revision
  @revision
end

#successful_build_revisionObject (readonly)

Returns the value of attribute successful_build_revision.



12
13
14
# File 'lib/cerberus/status.rb', line 12

def successful_build_revision
  @successful_build_revision
end

Class Method Details

.read(file_name) ⇒ Object



46
47
48
# File 'lib/cerberus/status.rb', line 46

def self.read(file_name)
  Status.new(file_name)
end

Instance Method Details

#current_stateObject



79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/cerberus/status.rb', line 79

def current_state
  raise "Invalid project state. Before calculating status please do keeping of it." unless @already_kept

  if @current_build_successful
    if @previous_build_successful.nil?
      :setup
    else
      @previous_build_successful ? :successful : :revival
    end
  else
    @previous_build_successful ? :failed : :broken
  end
end

#keep(build_successful, revision, brokeness) ⇒ Object



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

def keep(build_successful, revision, brokeness)
  raise 'Status could be kept only once. Please try to reread status file.' if @already_kept

  @current_brokeness = brokeness
  @current_build_successful = build_successful

  hash = {'successful' => @current_build_successful, 'timestamp' => Time.now, 'revision' => revision, 'brokeness' => brokeness}
  if build_successful
    hash['successful_build_timestamp'] = Time.now
    hash['successful_build_revision'] = revision
  else
    hash['successful_build_timestamp'] = @hash['successful_build_timestamp']
    hash['successful_build_revision'] = @hash['successful_build_revision']
  end

  File.open(@path, "w+", 0777) { |file| file.write(YAML.dump(hash)) }

  @already_kept = true
end

#previous_build_failed?Boolean

Returns:

  • (Boolean)


70
71
72
73
74
75
76
77
# File 'lib/cerberus/status.rb', line 70

def previous_build_failed?
  # if @previous_build_successful.nil?
  #   return false
  # else
  #   ( :setup == current_state ) ? false : !@previous_build_successful
  # end
  @previous_build_successful.nil? ? false : !@previous_build_successful
end