Class: Dynamo::Record::BatchRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamo/record/batch_request.rb

Constant Summary collapse

MAX_RECORD_SIZE =

400 KB

400_000

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record, type) ⇒ BatchRequest

Returns a new instance of BatchRequest.



10
11
12
13
14
15
# File 'lib/dynamo/record/batch_request.rb', line 10

def initialize(record, type)
  @type = type
  @record = record
  validate_type
  validate_request_size
end

Instance Attribute Details

#recordObject (readonly)

Returns the value of attribute record.



8
9
10
# File 'lib/dynamo/record/batch_request.rb', line 8

def record
  @record
end

#typeObject (readonly)

Returns the value of attribute type.



8
9
10
# File 'lib/dynamo/record/batch_request.rb', line 8

def type
  @type
end

Instance Method Details

#delete_requestObject



29
30
31
32
33
34
35
# File 'lib/dynamo/record/batch_request.rb', line 29

def delete_request
  {
    delete_request: {
      key: record.send(:key_values)
    }
  }
end

#requestObject



17
18
19
# File 'lib/dynamo/record/batch_request.rb', line 17

def request
  @request ||= send("#{type}_request")
end

#request_sizeObject



37
38
39
# File 'lib/dynamo/record/batch_request.rb', line 37

def request_size
  @request_size ||= request.to_json.length
end

#save_requestObject



21
22
23
24
25
26
27
# File 'lib/dynamo/record/batch_request.rb', line 21

def save_request
  {
    put_request: {
      item: record.send(:_build_item_for_save)
    }
  }
end

#validate_request_sizeObject

Raises:



41
42
43
44
45
# File 'lib/dynamo/record/batch_request.rb', line 41

def validate_request_size
  return unless request_size > MAX_RECORD_SIZE

  raise RecordTooLargeError.new(record), 'Record is too large'
end

#validate_typeObject



47
48
49
50
51
# File 'lib/dynamo/record/batch_request.rb', line 47

def validate_type
  return if %i[save delete].include? type

  raise UnsupportedRequestTypeError
end