Class: CDP::Builders::Entity

Inherits:
Object
  • Object
show all
Includes:
Value
Defined in:
lib/cdp/builders/entity.rb

Constant Summary

Constants included from Value

Value::VALID_COMMAND_TYPE

Instance Method Summary collapse

Methods included from Value

build, build_payload_with_ref, supported_command

Constructor Details

#initialize(tenant_id:, entity_schema:, entity_relations:) ⇒ Entity

Returns a new instance of Entity.



13
14
15
16
17
# File 'lib/cdp/builders/entity.rb', line 13

def initialize(tenant_id:, entity_schema:, entity_relations:)
  @tenant_id = tenant_id
  @entity_schema = entity_schema
  @entity_relations = entity_relations
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, args) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/cdp/builders/entity.rb', line 116

def method_missing(method_name, args)
  method_name_str = method_name.to_s.downcase

  builders = entity_relations_builders
  if builders.include?(method_name_str)
    source_id = args.fetch(:source_id)
    target_id = args.fetch(:target_id)
    return builders[method_name_str].call(source_id, target_id)
  end

  super
end

Instance Method Details

#append_set_values(condition:, field_name:, values:, timestamp: Time.now.utc) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/cdp/builders/entity.rb', line 88

def append_set_values(condition:, field_name:, values:, timestamp: Time.now.utc)
  validate_condition(condition)
  validate_set_field(field_name)

  append_values = CDP::AppendValuesToEntitySet.new(
    entity_type: @entity_schema[:name],
    timestamp: timestamp,
    field_condition: build_condition(condition),
    field_name: field_name,
    values: build(@entity_schema, field_name, values).array_value
  )
  build_execute_request({ append_values_to_entity_set: append_values })
end

#create(attributes) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/cdp/builders/entity.rb', line 19

def create(attributes)
  validate_attributes_type(attributes)

  validation_result = Validator.new(field_schema: @entity_schema).create(attributes: attributes)

  raise ::CDP::InvalidEntityError, validation_result.errors if validation_result.failed?

  entity_uuid = attributes.delete :entity_uuid
  create_entity = CDP::CreateEntity.new(
    entity_type: @entity_schema[:name],
    entity_uuid: entity_uuid,
    timestamp: Time.now.utc,
    payload: build_payload_with_ref(@entity_schema, attributes)
  )
  build_execute_request({ create_entity: create_entity })
end

#create_if_not_exists(payload, unique_by:) ⇒ Object



67
68
69
70
71
72
73
74
75
# File 'lib/cdp/builders/entity.rb', line 67

def create_if_not_exists(payload, unique_by:)
  create_if_not_exists = CDP::CreateIfNotExistsEntity.new(
    entity_type: @entity_schema[:name],
    timestamp: Time.now.utc,
    unique_by: normalize_unique_by(payload, unique_by),
    payload: build_payload_with_ref(@entity_schema, payload)
  )
  build_execute_request({ create_if_not_exists_entity: create_if_not_exists })
end

#delete(condition:) ⇒ Object



77
78
79
80
81
82
83
84
85
86
# File 'lib/cdp/builders/entity.rb', line 77

def delete(condition:)
  validate_condition(condition)

  delete_entity = CDP::DeleteEntity.new(
    entity_type: @entity_schema[:name],
    timestamp: Time.now.utc,
    field_condition: build_condition(condition)
  )
  build_execute_request({ delete_entity: delete_entity })
end

#delete_set_values(condition:, field_name:, values:, timestamp: Time.now.utc) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/cdp/builders/entity.rb', line 102

def delete_set_values(condition:, field_name:, values:, timestamp: Time.now.utc)
  validate_condition(condition)
  validate_set_field(field_name)

  delete_values = CDP::DeleteValuesFromEntitySet.new(
    entity_type: @entity_schema[:name],
    timestamp: timestamp,
    field_condition: build_condition(condition),
    field_name: field_name,
    values: build(@entity_schema, field_name, values).array_value
  )
  build_execute_request({ delete_values_from_entity_set: delete_values })
end

#exists?(_condition) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (NoMethodError)


129
130
131
# File 'lib/cdp/builders/entity.rb', line 129

def exists?(_condition)
  raise NoMethodError, "The 'exists?' for entities is not implemented"
end

#update(attributes, condition:) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/cdp/builders/entity.rb', line 36

def update(attributes, condition:)
  validate_condition(condition)
  validate_attributes_type(attributes)

  validation_result = Validator.new(field_schema: @entity_schema).update(attributes: attributes)
  raise ::CDP::InvalidEntityError, validation_result.errors if validation_result.failed?

  update_entity = CDP::UpdateEntity.new(
    entity_type: @entity_schema[:name],
    timestamp: Time.now.utc,
    field_condition: build_condition(condition),
    payload: build_payload(attributes)
  )
  build_execute_request({ update_entity: update_entity })
end

#upsert(payload, unique_by:) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/cdp/builders/entity.rb', line 52

def upsert(payload, unique_by:)
  validate_attributes_type(payload)

  validation_result = Validator.new(field_schema: @entity_schema).upsert(attributes: payload)
  raise ::CDP::InvalidEntityError, validation_result.errors if validation_result.failed?

  upsert_entity = CDP::UpsertEntity.new(
    entity_type: @entity_schema[:name],
    timestamp: Time.now.utc,
    unique_by: normalize_unique_by(payload, unique_by),
    payload: build_payload_with_ref(@entity_schema, payload)
  )
  build_execute_request({ upsert_entity: upsert_entity })
end