Class: Crystil::Attribution

Inherits:
Object
  • Object
show all
Defined in:
lib/crystil/attribution.rb,
sig/crystil/attribution.rbs

Overview

Attribution tracks cost hierarchy for API calls

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent_id:, parent_name: nil, subsidiary_id: nil, subsidiary_name: nil) ⇒ Attribution

Returns a new instance of Attribution.

Parameters:

  • parent_id: (String)
  • parent_name: (String, nil) (defaults to: nil)
  • subsidiary_id: (String, nil) (defaults to: nil)
  • subsidiary_name: (String, nil) (defaults to: nil)


8
9
10
11
12
13
14
15
# File 'lib/crystil/attribution.rb', line 8

def initialize(parent_id:, parent_name: nil, subsidiary_id: nil, subsidiary_name: nil)
  @parent_id = validate_parent_id!(parent_id)
  @parent_name = validate_string_length!(parent_name, "parent_name") if parent_name
  @subsidiary_id = validate_string_length!(subsidiary_id, "subsidiary_id") if subsidiary_id
  @subsidiary_name = validate_string_length!(subsidiary_name, "subsidiary_name") if subsidiary_name

  validate_subsidiary_requirements!
end

Instance Attribute Details

#parent_idString (readonly)

Returns the value of attribute parent_id.

Returns:

  • (String)


6
7
8
# File 'lib/crystil/attribution.rb', line 6

def parent_id
  @parent_id
end

#parent_nameString? (readonly)

Returns the value of attribute parent_name.

Returns:

  • (String, nil)


6
7
8
# File 'lib/crystil/attribution.rb', line 6

def parent_name
  @parent_name
end

#subsidiary_idString? (readonly)

Returns the value of attribute subsidiary_id.

Returns:

  • (String, nil)


6
7
8
# File 'lib/crystil/attribution.rb', line 6

def subsidiary_id
  @subsidiary_id
end

#subsidiary_nameString? (readonly)

Returns the value of attribute subsidiary_name.

Returns:

  • (String, nil)


6
7
8
# File 'lib/crystil/attribution.rb', line 6

def subsidiary_name
  @subsidiary_name
end

Instance Method Details

#to_hHash[Symbol, untyped]

Returns:

  • (Hash[Symbol, untyped])


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/crystil/attribution.rb', line 17

def to_h
  result = {
    parent: {
      id: parent_id
    }
  }

  result[:parent][:name] = parent_name if parent_name

  if subsidiary_id
    result[:subsidiary] = { id: subsidiary_id }
    result[:subsidiary][:name] = subsidiary_name if subsidiary_name
  end

  result
end

#validate_parent_id!(value) ⇒ String

Parameters:

  • value (Object)

Returns:

  • (String)

Raises:



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/crystil/attribution.rb', line 36

def validate_parent_id!(value)
  raise ValidationError, "parent_id is required" if value.nil? || value.to_s.empty?

  value_str = value.to_s
  if value_str.length > 100
    raise ValidationError,
          "parent_id cannot exceed 100 characters (got #{value_str.length})"
  end

  value_str
end

#validate_string_length!(value, field_name) ⇒ String?

Parameters:

  • value (Object)
  • field_name (String)

Returns:

  • (String, nil)


48
49
50
51
52
53
54
55
56
57
58
# File 'lib/crystil/attribution.rb', line 48

def validate_string_length!(value, field_name)
  return nil if value.nil?

  value_str = value.to_s
  if value_str.length > 100
    raise ValidationError,
          "#{field_name} cannot exceed 100 characters (got #{value_str.length})"
  end

  value_str
end

#validate_subsidiary_requirements!void

This method returns an undefined value.

Raises:



60
61
62
63
64
# File 'lib/crystil/attribution.rb', line 60

def validate_subsidiary_requirements!
  return unless subsidiary_name && !subsidiary_id

  raise ValidationError, "subsidiary_id is required when subsidiary_name is provided"
end