Class: AnalyticsOps::Reports::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/analytics_ops/reports/definition.rb,
sig/analytics_ops.rbs

Overview

Immutable, gem-owned description of one Data API query.

Constant Summary collapse

KINDS =
%w[standard realtime].freeze
API_NAME =
/\A[a-z][a-zA-Z0-9_]*(?::[a-zA-Z][a-zA-Z0-9_]*)?\z/
REPORT_NAME =
/\A[a-z][a-z0-9_]{0,63}\z/
RANGE_NAME =
/\A[a-z][a-z0-9_]{0,39}\z/
ABSOLUTE_DATE =
/\A\d{4}-\d{2}-\d{2}\z/
RELATIVE_DATE =
/\A(\d{1,4})daysAgo\z/
MATCH_TYPES =
%w[exact begins_with ends_with contains full_regexp partial_regexp].freeze
NUMERIC_OPERATIONS =
%w[equal less_than less_than_or_equal greater_than greater_than_or_equal].freeze
GROUP_FILTERS =
%w[and or not].freeze
MAX_FILTER_DEPTH =
8
MAX_FILTER_CHILDREN =
20
MAX_STANDARD_LIMIT =
250_000
MAX_REALTIME_LIMIT =
100_000
MAX_LIMIT =
MAX_STANDARD_LIMIT
INT64_RANGE =
(-(2**63))..((2**63) - 1)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, kind:, dimensions:, metrics:, date_ranges: [], dimension_filter: nil, metric_filter: nil, order_bys: [], offset: 0, limit: 100) ⇒ Definition

Returns a new instance of Definition.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/analytics_ops/reports/definition.rb', line 28

def initialize(name:, kind:, dimensions:, metrics:, date_ranges: [], dimension_filter: nil,
               metric_filter: nil, order_bys: [], offset: 0, limit: 100)
  @name = validate_name(name)
  @kind = validate_kind(kind)
  @dimensions = api_names(dimensions, "dimensions", minimum: 0, maximum: realtime_kind?(kind) ? 4 : 9)
  @metrics = api_names(metrics, "metrics", minimum: 1, maximum: 10)
  @date_ranges = ranges(date_ranges)
  @dimension_filter = filter_expression(dimension_filter, type: :dimension)
  @metric_filter = filter_expression(metric_filter, type: :metric)
  @order_bys = orders(order_bys)
  @offset = integer(offset, "offset", minimum: 0, maximum: 1_000_000_000)
  maximum_limit = realtime? ? MAX_REALTIME_LIMIT : MAX_STANDARD_LIMIT
  @limit = integer(limit, "limit", minimum: 1, maximum: maximum_limit)
  validate_shape!
  freeze
end

Instance Attribute Details

#date_rangesArray[record] (readonly)

Returns the value of attribute date_ranges.

Returns:

  • (Array[record])


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def date_ranges
  @date_ranges
end

#dimension_filterrecord? (readonly)

Returns the value of attribute dimension_filter.

Returns:

  • (record, nil)


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def dimension_filter
  @dimension_filter
end

#dimensionsArray[String] (readonly)

Returns the value of attribute dimensions.

Returns:

  • (Array[String])


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def dimensions
  @dimensions
end

#kindString (readonly)

Returns the value of attribute kind.

Returns:

  • (String)


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def kind
  @kind
end

#limitInteger (readonly)

Returns the value of attribute limit.

Returns:

  • (Integer)


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def limit
  @limit
end

#metric_filterrecord? (readonly)

Returns the value of attribute metric_filter.

Returns:

  • (record, nil)


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def metric_filter
  @metric_filter
end

#metricsArray[String] (readonly)

Returns the value of attribute metrics.

Returns:

  • (Array[String])


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def metrics
  @metrics
end

#nameString (readonly)

Returns the value of attribute name.

Returns:

  • (String)


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def name
  @name
end

#offsetInteger (readonly)

Returns the value of attribute offset.

Returns:

  • (Integer)


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def offset
  @offset
end

#order_bysArray[record] (readonly)

Returns the value of attribute order_bys.

Returns:

  • (Array[record])


25
26
27
# File 'lib/analytics_ops/reports/definition.rb', line 25

def order_bys
  @order_bys
end

Instance Method Details

#realtime?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/analytics_ops/reports/definition.rb', line 45

def realtime?
  kind == "realtime"
end

#to_hrecord

Returns:

  • (record)


79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/analytics_ops/reports/definition.rb', line 79

def to_h
  {
    "name" => name,
    "kind" => kind,
    "dimensions" => dimensions,
    "metrics" => metrics,
    "date_ranges" => date_ranges,
    "dimension_filter" => dimension_filter,
    "metric_filter" => metric_filter,
    "order_bys" => order_bys,
    "offset" => offset,
    "limit" => limit
  }
end

#with_date_ranges(value) ⇒ Definition

Parameters:

  • value (Array[record])

Returns:



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/analytics_ops/reports/definition.rb', line 49

def with_date_ranges(value)
  self.class.new(
    name:,
    kind:,
    dimensions:,
    metrics:,
    date_ranges: value,
    dimension_filter:,
    metric_filter:,
    order_bys:,
    offset:,
    limit:
  )
end

#with_pagination(offset:, limit:) ⇒ Definition

Parameters:

  • offset: (Integer)
  • limit: (Integer)

Returns:



64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/analytics_ops/reports/definition.rb', line 64

def with_pagination(offset:, limit:)
  self.class.new(
    name:,
    kind:,
    dimensions:,
    metrics:,
    date_ranges:,
    dimension_filter:,
    metric_filter:,
    order_bys:,
    offset:,
    limit:
  )
end