Module: CDP::Builders::Value

Included in:
Entity, Event
Defined in:
lib/cdp/builders/value.rb

Constant Summary collapse

VALID_COMMAND_TYPE =
%i[upsert_entity create_entity update_entity create_if_not_exists_entity].freeze

Class Method Summary collapse

Class Method Details

.build(schema, field_name, field_value, unsupported_types = []) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/cdp/builders/value.rb', line 29

def build(schema, field_name, field_value, unsupported_types=[])
  field_type = schema[:field_types][field_name.to_s]

  raise CDP::SchemaMissingFieldError, "invalid field #{field_name}, is not on schema" unless field_type
  raise ArgumentError, "unsupported type #{field_type[:data_type]} (#{field_type[:name]})" if unsupported_types.include?(field_type[:data_type])

  case field_type[:data_type]
  when 'STRING'
    CDP::Value.create_string(field_value)
  when 'TEXT'
    CDP::Value.create_text(field_value)
  when 'BOOLEAN'
    CDP::Value.create_bool(field_value)
  when 'INTEGER'
    CDP::Value.create_int(field_value)
  when 'FLOAT'
    CDP::Value.create_float(field_value)
  when 'TIMESTAMP'
    CDP::Value.create_timestamp(field_value)
  when 'SET'
    CDP::Value.create_set_values(field_value)
  else
    raise "invalid value type: #{field_type[:name]} (#{field_type[:data_type]}) = '#{field_value}'"
  end
end

.build_payload_with_ref(schema, attributes, unsupported_types = []) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/cdp/builders/value.rb', line 10

def build_payload_with_ref(schema, attributes, unsupported_types=[])
  attributes.each_with_object({}) do |(name, value), memo|
    if value.class == CDP::Transaction
      raise ArgumentError, 'Unsupported multiple commands' if value.commands.size > 1
      raise ArgumentError, 'Unsupported command' unless supported_command(value.commands.first)

      memo[name] = CDP::Value.new(
        reference: CDP::CommandReference.new(id: value.commands.first.id)
      )
      next
    end
    memo[name] = Value.build(schema, name, value, unsupported_types)          
  end
end

.supported_command(command) ⇒ Object



25
26
27
# File 'lib/cdp/builders/value.rb', line 25

def supported_command(command)
  VALID_COMMAND_TYPE.include?(command.command_type)
end