module StatsCloud::AssetsHelper

This helper works to gather and merge the configuration from files.

Private Instance Methods

array_fields() click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 118
def array_fields
  %w[dashboards]
end
asset_selector_matches(filename, asset_selector) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 10
def asset_selector_matches(filename, asset_selector)
  includes = asset_selector["include"]
  excludes = asset_selector["exclude"]
  process_match(includes, filename) && !process_match(excludes, filename)
end
collect_statscloud_assets(config, source_mappings, dir = ".") click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 16
def collect_statscloud_assets(config, source_mappings, dir = ".")
  asset_selector = get_checked_asset_selector(config)
  process_files(dir, config, source_mappings, asset_selector)
end
get_checked_asset_selector(config) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 27
def get_checked_asset_selector(config)
  asset_selector = config["assetSelector"] || {
    "include" => ['.*\.statscloud.yml'], "exclude" => []
  }
  asset_selector["include"] = put_to_array_if_needed(asset_selector["include"])
  asset_selector["exclude"] = put_to_array_if_needed(asset_selector["exclude"])
  asset_selector
end
get_config_from_file(file) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 36
def get_config_from_file(file)
  return ::YAML.load_file(file) if File.exist?(file)

  {}
end
it_config_file?(file_name, asset_selector) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 97
def it_config_file?(file_name, asset_selector)
  File.stat(file_name).file? && asset_selector_matches(file_name, asset_selector)
end
it_directory?(file_name, entry) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 93
def it_directory?(file_name, entry)
  File.directory?(file_name) && !not_required_directory.include?(entry)
end
it_not_empty_array?(extra_config, field) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 101
def it_not_empty_array?(extra_config, field)
  extra_config[field]&.kind_of?(Array) && extra_config[field].length.positive?
end
join_configs(config, extra_config, source_mappings, file_name) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 21
def join_configs(config, extra_config, source_mappings, file_name)
  process_array_fields(config, extra_config, source_mappings, file_name)
  process_object_fields(config, extra_config, source_mappings, file_name)
  process_value_fields(config, extra_config)
end
not_required_directory() click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 114
def not_required_directory
  %w[. ..]
end
object_fields() click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 122
def object_fields
  %w[metrics admins alerts]
end
process_array_fields(config, extra_config, source_mappings, file_name) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 61
def process_array_fields(config, extra_config, source_mappings, file_name)
  array_fields.each do |array_field|
    next unless it_not_empty_array?(extra_config, array_field)

    config[array_field] ||= []
    source_mappings[array_field.to_sym].push(source_map_index(config, extra_config, array_field, file_name))
    config[array_field] = config[array_field].concat(extra_config[array_field])
  end
end
process_files(dir, config, source_mappings, asset_selector) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 42
def process_files(dir, config, source_mappings, asset_selector)
  entries = Dir.entries(dir)
  entries.reduce({}) do |_config, entry|
    file_name = File.join(dir, entry)
    if it_directory?(file_name, entry)
      collect_statscloud_assets(config, source_mappings, file_name)
    elsif it_config_file?(file_name, asset_selector)
      extra_config = get_config_from_file(file_name)
      join_configs(config, extra_config, source_mappings, file_name)
    end
  end
end
process_match(list, filename) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 55
def process_match(list, filename)
  list&.reduce(false) do |match, pattern|
    match || Regexp.new(pattern).match(filename)
  end
end
process_object_fields(config, extra_config, source_mappings, file_name) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 71
def process_object_fields(config, extra_config, source_mappings, file_name)
  object_fields.each do |object_field|
    next unless extra_config[object_field]&.kind_of?(Hash)

    source_mappings[object_field.to_sym].push(
      fields: extra_config[object_field].keys,
      sourceFile: file_name
    )
    config[object_field] = (config[object_field] || {}).merge(extra_config[object_field])
  end
end
process_value_fields(config, extra_config) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 83
def process_value_fields(config, extra_config)
  value_fields.each do |field|
    config[field] = extra_config[field] if config[field].nil? && !extra_config[field].nil?
  end
end
put_to_array_if_needed(object) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 89
def put_to_array_if_needed(object)
  object.is_a?(Array) ? object : [object].compact
end
source_map_index(config, extra_config, array_field, file_name) click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 105
def source_map_index(config, extra_config, array_field, file_name)
  start_index = config[array_field].length
  {
    startIndex: start_index,
    endIndex: start_index + extra_config[array_field].length - 1,
    sourceFile: file_name
  }
end
value_fields() click to toggle source
# File lib/statscloud/helpers/statscloud_client/assets_helper.rb, line 126
def value_fields
  %w[token application environment endpoint assetSelector propagateErrors
     passwordProtect retention flushIntervalInSeconds diskSize plugins]
end