module DashOverlord::Models::V1::DynamoDb

Public Instance Methods

filter_params() click to toggle source
# File lib/dash_overlord/models/v1/dynamo_db/scan.rb, line 74
def filter_params
  return {} unless filters

  initial_params = {
    key_condition_expression: "#dashboard_id = :dashboard_id",
    filter_expression: [],
    expression_attribute_names: {
      "#dashboard_id" => "dashboard_id"
    },
    expression_attribute_values: {
      ':dashboard_id' => 1
    }
  }

  filters_mapped = \
    filters.each_with_object(initial_params) do |(key, value), object|
      process_filter(key, value, object)

      object
    end

  filters_mapped[:filter_expression] = \
    filters_mapped[:filter_expression].join(' and ')

  filters_mapped
end
paginated_scan() click to toggle source
# File lib/dash_overlord/models/v1/dynamo_db/scan.rb, line 52
def paginated_scan
  (limit && current_page)
end
params() click to toggle source
# File lib/dash_overlord/models/v1/dynamo_db/scan.rb, line 66
def params
  {
    table_name: "#{table_name}",
    exclusive_start_key: last_evaluated_key,
    limit: limit
  }.merge(filter_params)
end
scan_page() click to toggle source
# File lib/dash_overlord/models/v1/dynamo_db/scan.rb, line 56
def scan_page
  result = client.query(params)

  DynamoDb::PaginatedResult.new \
    items: result.items.map{ |item| resource_class.new(item) },
    last_evaluated_key: result.last_evaluated_key,
    exclusive_start_key: last_evaluated_key,
    limit: limit
end

Private Instance Methods

process_filter(attribute_expression, value, object) click to toggle source
# File lib/dash_overlord/models/v1/dynamo_db/scan.rb, line 103
def process_filter(attribute_expression, value, object)
  attribute = attribute_expression.to_s.gsub('_eq', '')

  object[:expression_attribute_names]["##{attribute}"] = \
    attribute

  object[:expression_attribute_values][":#{attribute}"] = \
    value

  object[:filter_expression] << \
    "##{attribute} = :#{attribute}"
end