Sha256: 01f114d99e14c2a5f513f16ae5595aec888de5a0884c394fd61b4c73201bbec7

Contents?: true

Size: 1.21 KB

Versions: 4

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module DynamodbRecord
  class Collection
    include Enumerable

    # attr_reader :last_evaluated_key

    def initialize(pager, klass, options = {})
      @klass = klass
      @table_name = options[:table_name]
      @foreign_key = options[:expression_attribute_values].transform_keys { |k| k.delete_prefix(':').to_sym }
      @items = pager.items.map { |item| klass.send(:from_database, item) }
      @last_evaluated_key = pager.last_evaluated_key
    end

    def last_evaluated_key
      if @last_evaluated_key.nil?
        nil
      else
        json_string = JSON.dump(@last_evaluated_key)
        Base64.urlsafe_encode64(json_string)
      end
    end

    def each(&)
      @items.each(&)
    end

    def next_page?
      last_evaluated_key ? true : false
    end

    def create!(items = {})
      items.merge!(@foreign_key)
      object = @klass.create!(items)
      unless @klass.to_s.pluralize.downcase == @table_name.to_s

        client = @klass.client
        @foreign_key.merge!({ "#{@klass.to_s.downcase}_id": object.id, created_at: Time.now.to_i })
        client.put_item({ table_name: @table_name, item: @foreign_key })
      end
      @items << object
      object
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dynamodb_record-0.2.0 lib/dynamodb_record/collection.rb
dynamodb_record-0.1.0 lib/dynamodb_record/collection.rb
dynamodb_record-0.0.2 lib/dynamodb_record/collection.rb
dynamodb_record-0.0.1 lib/dynamodb_record/collection.rb