Class: AnalyticsOps::Configuration::Validator

Inherits:
Object
  • Object
show all
Includes:
ExperimentalValidation, ReportingValidation
Defined in:
lib/analytics_ops/configuration/validator.rb,
lib/analytics_ops/configuration/validator_reporting.rb,
lib/analytics_ops/configuration/validator_experimental.rb

Overview

Reopens the strict validator to add opt-in feature validation.

Defined Under Namespace

Modules: ExperimentalValidation, ReportingValidation

Constant Summary collapse

TOP_LEVEL_KEYS =
%w[version profiles].freeze
PROFILE_KEYS =
%w[property_id streams retention google_signals key_events custom_dimensions custom_metrics
manual_requirements labels reports health funnels bigquery governance].freeze
REPORT_KEYS =
%w[
  kind dimensions metrics date_ranges dimension_filter metric_filter order_bys limit
].freeze
HEALTH_KEYS =
%w[
  expected_events minimum_sessions traffic_drop_percent key_event_drop_percent
  unassigned_percent not_set_percent
].freeze
GOVERNANCE_KEYS =
%w[
  enhanced_measurement_required email_redaction_required query_parameter_redaction_required
  reporting_identity bigquery_link_required expected_channel_groups expected_calculated_metrics
  expected_event_create_rules expected_event_edit_rules experimental
].freeze
BIGQUERY_KEYS =
%w[project_id dataset location maximum_bytes_billed experimental].freeze
FUNNEL_KEYS =
%w[steps experimental].freeze
FUNNEL_STEP_KEYS =
%w[name event_name].freeze
STREAM_KEYS =
%w[stream_id default_uri enhanced_measurement].freeze
ENHANCED_MEASUREMENT_KEYS =
%w[enabled experimental].freeze
RETENTION_KEYS =
%w[event_data user_data reset_on_new_activity].freeze
GOOGLE_SIGNALS_KEYS =
%w[state experimental].freeze
DIMENSION_KEYS =
%w[parameter_name display_name description scope disallow_ads_personalization].freeze
METRIC_KEYS =
%w[
  parameter_name display_name description scope measurement_unit restricted_metric_types
].freeze
RETENTION_VALUES =
%w[2_months 14_months 26_months 38_months 50_months].freeze
USER_RETENTION_VALUES =
%w[2_months 14_months].freeze
DIMENSION_SCOPES =
%w[event user item].freeze
METRIC_UNITS =
%w[standard currency feet meters kilometers miles milliseconds seconds minutes hours].freeze
RESTRICTED_METRIC_TYPES =
%w[cost_data revenue_data].freeze
SECRET_KEY =
/
  (?:\A|_)
  (?:
    credentials?|password|private_key|client_(?:id|secret)|
    access_token|refresh_token|api_key|service_account|oauth
  )
  (?:\z|_)
/ix
NAME =
/\A[a-z][a-z0-9_]*\z/i
DISPLAY_NAME =
/\A[A-Za-z][A-Za-z0-9_ ]{0,81}\z/
EVENT_NAME =
/\A[a-z][a-z0-9_]{0,39}\z/i
ID =
/\A\d{1,50}\z/

Instance Method Summary collapse

Constructor Details

#initialize(raw) ⇒ Validator

Returns a new instance of Validator.



57
58
59
# File 'lib/analytics_ops/configuration/validator.rb', line 57

def initialize(raw)
  @raw = raw
end

Instance Method Details

#callObject

Raises:



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/analytics_ops/configuration/validator.rb', line 61

def call
  hash!(@raw, "$root")
  reject_secret_keys!(@raw)
  exact_keys!(@raw, TOP_LEVEL_KEYS, "$root")
  unless @raw["version"] == 1
    raise UnsupportedVersionError, "Unsupported configuration version #{@raw["version"].inspect}; expected 1"
  end

  profiles = hash!(@raw["profiles"], "profiles")
  raise ConfigurationError, "profiles must contain at least one profile" if profiles.empty?

  normalized = profiles.to_h do |name, profile|
    validate_name!(name, "profile name")
    [name, validate_profile(name, profile)]
  end

  Document.new(version: 1, profiles: normalized)
end