Class: Ops::Revision

Inherits:
Object
  • Object
show all
Defined in:
lib/ops/revision.rb

Instance Method Summary collapse

Constructor Details

#initialize(new_headers = {}, opts = Ops.config) ⇒ Revision

Returns a new instance of Revision.



3
4
5
6
7
# File 'lib/ops/revision.rb', line 3

def initialize(new_headers={}, opts = Ops.config)
  @file_root = opts.file_root.to_s # convert to string in case they pass us a Pathname
  @environment = opts.environment
  @headers = new_headers
end

Instance Method Details

#chomp(file) ⇒ Object



57
58
59
# File 'lib/ops/revision.rb', line 57

def chomp(file)
  File.read(file).chomp
end

#current_dirObject



39
40
41
# File 'lib/ops/revision.rb', line 39

def current_dir
  file_root.split('/').last
end

#deploy_dateObject



93
94
95
96
97
98
99
100
101
# File 'lib/ops/revision.rb', line 93

def deploy_date
  @deploy_date ||= if version_file?
                     get_time version_file
                   elsif development?
                     'Live'
                   else
                     'Unknown (VERSION file is missing)'
                   end
end

#development?Boolean

Returns:



73
74
75
# File 'lib/ops/revision.rb', line 73

def development?
  environment == 'development'
end

#environmentObject



69
70
71
# File 'lib/ops/revision.rb', line 69

def environment
  @environment
end

#file_rootObject



65
66
67
# File 'lib/ops/revision.rb', line 65

def file_root
  @file_root
end

#get_previous_by_timeObject



23
24
25
# File 'lib/ops/revision.rb', line 23

def get_previous_by_time
  get_previous_versions.sort { |a, b| a[:time] <=> b[:time] }
end

#get_previous_versionsObject



27
28
29
30
31
32
33
# File 'lib/ops/revision.rb', line 27

def get_previous_versions
  Dir["#{path}/../*"].each_with_object([]) do |dir, array|
    next if dir =~ /#{current_dir}$/
    version, revision = File.join(dir, 'VERSION'), File.join(dir, 'REVISION')
    array << stats_hash(version: version, revision: revision) if File.exists?(version) && File.exists?(revision)
  end
end

#get_revision(file) ⇒ Object



53
54
55
# File 'lib/ops/revision.rb', line 53

def get_revision(file)
  chomp file
end

#get_time(file) ⇒ Object



61
62
63
# File 'lib/ops/revision.rb', line 61

def get_time(file)
  File.stat(file).mtime
end

#get_version(file) ⇒ Object



49
50
51
# File 'lib/ops/revision.rb', line 49

def get_version(file)
  chomp(file).gsub('^{}', '')
end

#headersObject



113
114
115
# File 'lib/ops/revision.rb', line 113

def headers
  @headers.select{|k,v| k.match(/^[-A-Z_].*$/) }
end

#last_commitObject



103
104
105
106
107
108
109
110
111
# File 'lib/ops/revision.rb', line 103

def last_commit
  @last_commit ||= if revision_file?
                     chomp revision_file
                   elsif development? && `git show` =~ /^commit (.*)$/
                     $1
                   else
                     'Unknown (REVISION file is missing)'
                   end
end

#pathObject



35
36
37
# File 'lib/ops/revision.rb', line 35

def path
  File.absolute_path file_root
end

#previous_versionsObject



19
20
21
# File 'lib/ops/revision.rb', line 19

def previous_versions
  @previous_versions ||= get_previous_by_time
end

#revision_fileObject



85
86
87
# File 'lib/ops/revision.rb', line 85

def revision_file
  @revision_file ||= File.join(file_root, 'REVISION')
end

#revision_file?Boolean

Returns:



89
90
91
# File 'lib/ops/revision.rb', line 89

def revision_file?
  File.exists? revision_file
end

#stats_hash(files) ⇒ Object



43
44
45
46
47
# File 'lib/ops/revision.rb', line 43

def stats_hash(files)
  { version:  get_version(files[:version]),
    revision: get_revision(files[:revision]),
    time:     get_time(files[:revision]) }
end

#version_fileObject



77
78
79
# File 'lib/ops/revision.rb', line 77

def version_file
  @version_file ||= File.join(file_root, 'VERSION')
end

#version_file?Boolean

Returns:



81
82
83
# File 'lib/ops/revision.rb', line 81

def version_file?
  File.exists? version_file
end

#version_or_branchObject



9
10
11
12
13
14
15
16
17
# File 'lib/ops/revision.rb', line 9

def version_or_branch
  @version ||= if version_file?
                 chomp(version_file).gsub('^{}', '')
               elsif development? && `git branch` =~ /^\* (.*)$/
                 $1
               else
                 'Unknown (VERSION file is missing)'
               end
end