Class: Enviera::Utils

Inherits:
Object
  • Object
show all
Defined in:
lib/enviera/utils.rb

Class Method Summary collapse

Class Method Details

.camelcase(string) ⇒ Object



18
19
20
21
# File 'lib/enviera/utils.rb', line 18

def self.camelcase string
  return string if string !~ /_/ && string =~ /[A-Z]+.*/
  string.split('_').map{|e| e.capitalize}.join
end

.colorize(message, color) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/enviera/utils.rb', line 108

def self.colorize message, color
  suffix = "\e[0m"
  prefix = case color
  when :red
    "\e[31m"
  when :green
    "\e[32m"
  when :blue
    "\e[34m"
  else #:white
    "\e[0m"
  end
  "#{prefix}#{message}#{suffix}"
end

.confirm?(message) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
12
13
14
15
16
# File 'lib/enviera/utils.rb', line 9

def self.confirm? message
  result = ask("#{message} (y/N): ")
  if result.downcase == "y" or result.downcase == "yes"
    true
  else
    false
  end
end

.debug(messageinfo) ⇒ Object



91
92
93
# File 'lib/enviera/utils.rb', line 91

def self.debug messageinfo
  self.print_message({ :message => self.structure_message( messageinfo ), :enviera_loglevel => :debug, :cli_color => :green, :threshold => 1 })
end

.find_all_subclasses_of(args) ⇒ Object



53
54
55
56
57
58
59
60
61
# File 'lib/enviera/utils.rb', line 53

def self.find_all_subclasses_of args
  parent_class = args[ :parent_class ]
  constants = parent_class.constants
  candidates = []
  constants.each do | candidate |
    candidates << candidate.to_s.split('::').last if parent_class.const_get(candidate).class.to_s == "Class"
  end
  candidates
end

.find_closest_class(args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/enviera/utils.rb', line 28

def self.find_closest_class args
  parent_class = args[ :parent_class ]
  class_name = args[ :class_name ]
  constants = parent_class.constants
  candidates = []
  constants.each do | candidate |
    candidates << candidate.to_s if candidate.to_s.downcase == class_name.downcase
  end
  if candidates.count > 0
    parent_class.const_get candidates.first
  else
    nil
  end
end

.info(messageinfo) ⇒ Object



87
88
89
# File 'lib/enviera/utils.rb', line 87

def self.info messageinfo
  self.print_message({ :message => self.structure_message( messageinfo ), :enviera_loglevel => :debug, :cli_color => :white, :threshold => 0 })
end


99
100
101
102
103
104
105
106
# File 'lib/enviera/utils.rb', line 99

def self.print_message( args )
  message        = args[:message] ||= ""
  enviera_loglevel = args[:enviera_loglevel] ||= :debug
  cli_color      = args[:cli_color] ||= :blue
  threshold      = args[:threshold]

  STDERR.puts self.colorize( message, cli_color ) if threshold.nil? or Enviera.verbosity_level > threshold
end

.read_passwordObject



5
6
7
# File 'lib/enviera/utils.rb', line 5

def self.read_password
  ask("Enter password: ") {|q| q.echo = "*" }
end

.require_dir(classdir) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'lib/enviera/utils.rb', line 43

def self.require_dir classdir
  num_class_hierarchy_levels = self.to_s.split("::").count - 1
  root_folder = File.dirname(__FILE__) + "/" + Array.new(num_class_hierarchy_levels).fill("..").join("/")
  class_folder = root_folder + "/" + classdir
  Dir[File.expand_path("#{class_folder}/*.rb")].uniq.each do |file|
    self.trace "Requiring file: #{file}"
    require file
  end
end

.snakecase(string) ⇒ Object



23
24
25
26
# File 'lib/enviera/utils.rb', line 23

def self.snakecase string
  return string if string !~ /[A-Z]/
  string.split(/(?=[A-Z])/).collect {|x| x.downcase}.join("_")
end

.structure_message(messageinfo) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/enviera/utils.rb', line 63

def self.structure_message messageinfo
  message = {:from => "enviera-core"}
  case messageinfo.class.to_s
  when 'Hash'
    message.merge!(messageinfo)
  else
    message.merge!({:msg => messageinfo.to_s})
  end
  message[:prefix] = "[#{message[:from]}]"
  message[:spacer] = " #{' ' * message[:from].length} "
  formatted_output = message[:msg].split("\n").each_with_index.map do |line, index|
    if index == 0
      "#{message[:prefix]} #{line}"
    else
      "#{message[:spacer]} #{line}"
    end
  end
  formatted_output.join "\n"
end

.trace(messageinfo) ⇒ Object



95
96
97
# File 'lib/enviera/utils.rb', line 95

def self.trace messageinfo
  self.print_message({ :message => self.structure_message( messageinfo ), :enviera_loglevel => :debug, :cli_color => :blue, :threshold => 2 })
end

.warn(messageinfo) ⇒ Object



83
84
85
# File 'lib/enviera/utils.rb', line 83

def self.warn messageinfo
  self.print_message({ :message => self.structure_message( messageinfo ), :enviera_loglevel => :warn, :cli_color => :red })
end