Class: Snappier::AwsS3::Persistence

Inherits:
Object
  • Object
show all
Defined in:
lib/snappier/aws_s3/persistence.rb

Instance Method Summary collapse

Constructor Details

#initialize(region:, bucket_name:, credentials: nil) ⇒ Persistence

Returns a new instance of Persistence.



8
9
10
11
12
13
14
15
# File 'lib/snappier/aws_s3/persistence.rb', line 8

def initialize(region:, bucket_name:, credentials: nil)
  @client = if credentials
              Aws::S3::Client.new(region: region, credentials: credentials)
            else
              Aws::S3::Client.new(region: region)
            end
  @bucket = Aws::S3::Resource.new(client: @client).bucket(bucket_name)
end

Instance Method Details

#each(type:, id:) ⇒ Object



22
23
24
25
26
# File 'lib/snappier/aws_s3/persistence.rb', line 22

def each(type:, id:)
  dir_path = File.join("snappier", type.to_s, id)
  keys = @bucket.objects(prefix: dir_path).map { |object| object.data.key }.sort
  keys.each { |key| yield entry(key) }
end

#entry(key) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/snappier/aws_s3/persistence.rb', line 28

def entry(key)
  milliseconds = File.basename(key).split(".").first
  {
    at: Time.at(milliseconds.to_i / 1000),
    content: YAML.load(@bucket.object(key).get.body.read)
  }
end

#persist(type:, id:, at:, args:) ⇒ Object



17
18
19
20
# File 'lib/snappier/aws_s3/persistence.rb', line 17

def persist(type:, id:, at:, args:)
  path = File.join("snappier", type, id, "#{at}.yml")
  @bucket.object(path).put(body: args.to_yaml)
end