forked from voxpupuli/hiera-eyaml
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.rb
More file actions
70 lines (59 loc) · 2.19 KB
/
Copy pathutils.rb
File metadata and controls
70 lines (59 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
require 'tempfile'
require 'fileutils'
require 'hiera/backend/eyaml/logginghelper'
class Hiera
module Backend
module Eyaml
class Utils
def self.camelcase(string)
return string if string !~ /_/ && string =~ /[A-Z]+.*/
string.split('_').map { |e| e.capitalize }.join
end
def self.snakecase(string)
return string unless /[A-Z]/.match?(string)
string.split(/(?=[A-Z])/).collect { |x| x.downcase }.join('_')
end
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
return unless candidates.count > 0
parent_class.const_get candidates.first
end
def self.require_dir(classdir)
num_class_hierarchy_levels = 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|
LoggingHelper.trace "Requiring file: #{file}"
require file
end
end
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).instance_of?(::Class)
end
candidates
end
def self.hiera?
'hiera'.eql? Eyaml::Options[:source]
end
def self.convert_to_utf_8(string)
orig_encoding = string.encoding
return string if orig_encoding == Encoding::UTF_8
string.dup.force_encoding(Encoding::UTF_8)
rescue EncodingError
warn "Unable to encode to \"Encoding::UTF_8\" using the original \"#{orig_encoding}\""
string
end
end
end
end
end