class GoodData::LCM2::Helpers
Constants
- ABORT_ON_ERROR_PARAM
- COLLECT_SYNCED_STATUS
- DEFAULT_NFS_DIRECTORY
- DEFAULT_TABLE_NAME
Public Class Methods
check_params(specification, params)
click to toggle source
# File lib/gooddata/lcm/helpers/check_helper.rb, line 16 def check_params(specification, params) specification.keys.each do |param_name| value = params.send(param_name) type = specification[param_name][:type] if value.nil? || (value.is_a?(String) && value.empty?) if !specification[param_name][:opts][:default].nil? if specification.select { |x| specification[x][:opts][:replacement] == param_name }.first.nil? params[param_name] = specification[param_name][:opts][:default] else GoodData.logger.warn "WARNING: Default value for parameter '#{param_name}' was not filled because deprecated parameter is used instead." end elsif specification[param_name][:opts][:required] fail_if_development "Mandatory parameter '#{param_name}' of type '#{type}' is not specified" end else if type.class.const_get(:CATEGORY) == :complex && !value.is_a?(Hash) fail_if_development "Expected parameter '#{param_name}' to be kind of '#{type}', got '#{value.class.name}'" end if specification[param_name][:opts][:deprecated] GoodData.logger.warn("WARNING: Parameter '#{param_name}' is deprecated. Please use '#{specification[param_name][:opts][:replacement]}' instead.") end unless type.check(value) fail_if_development "Parameter '#{param_name}' has invalid type, expected: #{type}, got #{value.class}" end end end end
collect_synced_status(params)
click to toggle source
# File lib/gooddata/lcm/helpers/check_helper.rb, line 50 def collect_synced_status(params) params.include?(COLLECT_SYNCED_STATUS) && to_bool(COLLECT_SYNCED_STATUS, params[COLLECT_SYNCED_STATUS]) end
continue_on_error(params)
click to toggle source
# File lib/gooddata/lcm/helpers/check_helper.rb, line 46 def continue_on_error(params) params.include?(ABORT_ON_ERROR_PARAM) && !to_bool(ABORT_ON_ERROR_PARAM, params[ABORT_ON_ERROR_PARAM]) end
delete_master_project_from_ads(release_table_name, ads_client, segment_id, removal_master_project_ids)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 43 def delete_master_project_from_ads(release_table_name, ads_client, segment_id, removal_master_project_ids) replacements = { table_name: release_table_name || DEFAULT_TABLE_NAME, segment_id: segment_id, master_project_ids: removal_master_project_ids.map { |x| "'#{x}'" } * ', ' } path = File.expand_path('../data/delete_from_lcm_release.sql.erb', __dir__) query = GoodData::Helpers::ErbHelper.template_file(path, replacements) ads_client.execute(query) end
fail_if_development(msg)
click to toggle source
# File lib/gooddata/lcm/helpers/safe_failure_helper.rb, line 9 def fail_if_development(msg) if ENV['RSPEC_ENV'] == 'test' fail msg else GoodData.logger.error msg end end
get_master_project_list_from_ads(release_table_name, ads_client, segment_id)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 29 def get_master_project_list_from_ads(release_table_name, ads_client, segment_id) replacements = { table_name: release_table_name || DEFAULT_TABLE_NAME, segment_id: segment_id } path = File.expand_path('../../data/select_from_lcm_release.sql.erb', __FILE__) query = GoodData::Helpers::ErbHelper.template_file(path, replacements) res = ads_client.execute_select(query) sorted = res.sort_by { |row| row[:version] } sorted end
get_master_project_list_from_nfs(domain_id, data_product_id, segment_id)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 56 def get_master_project_list_from_nfs(domain_id, data_product_id, segment_id) file_path = path_to_release_table_file(domain_id, data_product_id, segment_id) data = GoodData::Helpers::Csv.read_as_hash(file_path) sorted = data.sort_by { |master| master[:version] } sorted end
latest_master_project_from_ads(release_table_name, ads_client, segment_id)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 14 def latest_master_project_from_ads(release_table_name, ads_client, segment_id) sorted = get_master_project_list_from_ads(release_table_name, ads_client, segment_id) sorted.last end
latest_master_project_from_nfs(domain_id, data_product_id, segment_id)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 19 def latest_master_project_from_nfs(domain_id, data_product_id, segment_id) file_path = path_to_release_table_file(domain_id, data_product_id, segment_id) sorted = get_master_project_list_from_nfs(domain_id, data_product_id, segment_id) latest_master_project = sorted.last version_info = latest_master_project ? "master_pid=#{latest_master_project[:master_project_id]} version=#{latest_master_project[:version]}" : "" GoodData.gd_logger.info "Getting latest master project: file=#{file_path} domain=#{domain_id} data_product=#{data_product_id} segment=#{segment_id} #{version_info}" latest_master_project end
path_to_release_table_file(domain_id, data_prod_id, segment_id)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 83 def path_to_release_table_file(domain_id, data_prod_id, segment_id) nsf_directory = ENV['RELEASE_TABLE_NFS_DIRECTORY'] || DEFAULT_NFS_DIRECTORY [nsf_directory, domain_id, data_prod_id + '-' + segment_id + '.csv'].join('/') end
to_bool(key, value)
click to toggle source
# File lib/gooddata/lcm/helpers/check_helper.rb, line 54 def to_bool(key, value) return value if value.is_a?(TrueClass) || value.is_a?(FalseClass) return true if value =~ /^(true|t|yes|y|1)$/i return false if value == '' || value =~ /^(false|f|no|n|0)$/i raise ArgumentError, "Invalid '#{value}' boolean value for '#{key}' parameter" end
update_latest_master_to_nfs(domain_id, data_product_id, segment_id, master_pid, version)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 63 def update_latest_master_to_nfs(domain_id, data_product_id, segment_id, master_pid, version) file_path = path_to_release_table_file(domain_id, data_product_id, segment_id) GoodData.gd_logger.info "Updating release table: file=#{file_path} domain=#{domain_id} data_product=#{data_product_id} segment=#{segment_id} master_pid=#{master_pid} version=#{version}" # rubocop:disable Metrics/LineLength GoodData::Helpers::Csv.ammend_line( file_path, master_project_id: master_pid, version: version ) end
update_master_project_to_nfs(domain_id, data_product_id, segment_id, data)
click to toggle source
# File lib/gooddata/lcm/helpers/release_table_helper.rb, line 73 def update_master_project_to_nfs(domain_id, data_product_id, segment_id, data) file_path = path_to_release_table_file(domain_id, data_product_id, segment_id) FileUtils.mkpath(file_path.split('/')[0...-1].join('/')) CSV.open(file_path, 'w', write_headers: true, headers: data.first.keys) do |csv| data.each do |r| csv << r.values end end end