Class: Relish

Inherits:
Object
  • Object
show all
Defined in:
lib/relish.rb,
lib/relish/release.rb,
lib/relish/version.rb,
lib/relish/s3_helper.rb,
lib/relish/dynamo_helper.rb,
lib/relish/encryption_helper.rb

Defined Under Namespace

Classes: DynamoHelper, EncryptionHelper, Release, S3Helper

Constant Summary collapse

VERSION =
"0.42"

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Relish

Returns a new instance of Relish.



8
9
10
11
# File 'lib/relish.rb', line 8

def initialize(*args)
  @db    = DynamoHelper.new(*args)
  @tries = 3
end

Instance Method Details

#copy(id, version, data) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/relish.rb', line 13

def copy(id, version, data)
  rescue_dynamodb_error do
    Release.new.tap do |release|
      release.item = {}
      release.id = id
      release.version = version.to_s
      data.each do |k, v|
        release.send("#{k}=", v.to_s) unless v.nil?
      end
      @db.put(release.item)
    end
  end
end

#create(id, data) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/relish.rb', line 27

def create(id, data)
  rescue_dynamodb_error do
    item = @db.query_latest_version(id)
    Release.new.tap do |release|
      if item.nil?
        release.item = {}
        release.id = id
        release.version = "1"
      else
        release.item = item
        release.version = (release.version.to_i + 1).to_s
      end
      data.each do |k, v|
        release.send("#{k}=", v.to_s) unless v.nil?
      end
      @db.put_current_version(release.item)
    end
  end
end

#current(id, *attrs) ⇒ Object



47
48
49
50
51
52
53
54
55
56
# File 'lib/relish.rb', line 47

def current(id, *attrs)
  rescue_dynamodb_error do
    item = @db.query_current_version(id, *attrs)
    unless item.nil?
      Release.new.tap do |release|
        release.item = item
      end
    end
  end
end

#delete(id, version) ⇒ Object



95
96
97
98
99
# File 'lib/relish.rb', line 95

def delete(id, version)
  rescue_dynamodb_error do
    @db.delete_version(id, version)
  end
end

#dump(id, consistent = nil, limit = nil) ⇒ Object



69
70
71
72
73
74
75
76
77
78
# File 'lib/relish.rb', line 69

def dump(id, consistent=nil, limit=nil)
  rescue_dynamodb_error do
    items = @db.query(id, consistent, limit)
    items.map do |item|
      Release.new.tap do |release|
        release.item = item
      end
    end
  end
end

#read(id, version, *attrs) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/relish.rb', line 58

def read(id, version, *attrs)
  rescue_dynamodb_error do
    item = @db.get_version(id, version, *attrs)
    unless item.nil?
      Release.new.tap do |release|
        release.item = item
      end
    end
  end
end

#rescue_dynamodb_errorObject



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/relish.rb', line 105

def rescue_dynamodb_error
  tries = @tries
  begin
    yield
  rescue => e
    retries = ((tries -= 1) > 0)

    unless @error_handler.nil?
      @error_handler.call(e, retries)
    end

    if retries
      retry
    else
      raise
    end

  end
end

#set_error_handler(&blk) ⇒ Object



101
102
103
# File 'lib/relish.rb', line 101

def set_error_handler(&blk)
  @error_handler = blk
end

#update(id, version, data) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/relish.rb', line 80

def update(id, version, data)
  rescue_dynamodb_error do
    item = @db.get_version(id, version)
    unless item.nil?
      Release.new.tap do |release|
        release.item = item
        data.each do |k, v|
          release.send("#{k}=", v.to_s) unless v.nil?
        end
        @db.put_version(id, version, release.item)
      end
    end
  end
end