Class: AnalyticsOps::Resources::Value

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

Overview

Immutable base class for gem-owned values at the Google client boundary.

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**values) ⇒ Value

Returns a new instance of Value.

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
25
26
27
28
# File 'lib/analytics_ops/resources.rb', line 18

def initialize(**values)
  unknown = values.keys - self.class.field_names
  missing = self.class.field_names - values.keys
  raise ArgumentError, "Unknown fields: #{unknown.join(", ")}" unless unknown.empty?
  raise ArgumentError, "Missing fields: #{missing.join(", ")}" unless missing.empty?

  values.each do |name, value|
    instance_variable_set("@#{name}", Canonical.immutable(value))
  end
  freeze
end

Class Attribute Details

.field_namesObject (readonly)

Returns the value of attribute field_names.



10
11
12
# File 'lib/analytics_ops/resources.rb', line 10

def field_names
  @field_names
end

Class Method Details

.fields(*names) ⇒ Object



12
13
14
15
# File 'lib/analytics_ops/resources.rb', line 12

def fields(*names)
  @field_names = names.freeze
  attr_reader(*names)
end

Instance Method Details

#==(other) ⇒ Boolean Also known as: eql?

Parameters:

  • other (Object)

Returns:

  • (Boolean)


34
35
36
# File 'lib/analytics_ops/resources.rb', line 34

def ==(other)
  other.instance_of?(self.class) && other.to_h == to_h
end

#hashInteger

Returns:

  • (Integer)


39
40
41
# File 'lib/analytics_ops/resources.rb', line 39

def hash
  [self.class, to_h].hash
end

#to_hrecord

Returns:

  • (record)


30
31
32
# File 'lib/analytics_ops/resources.rb', line 30

def to_h
  self.class.field_names.to_h { |name| [name.to_s, public_send(name)] }
end