relishable 0.29 → 0.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile.lock +57 -19
  3. data/lib/relish.rb +81 -42
  4. data/lib/relish/version.rb +5 -0
  5. metadata +67 -25
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cd081e731c8554ce64f2ecc1bd23dc09c6d3939b
4
+ data.tar.gz: f2bec42c99a51404d73d839b86534c3273116462
5
+ SHA512:
6
+ metadata.gz: 87b1c341657829673f2d1102982881ac582f39c108eb182d0e7ddc0d8b41d7e6c5fb7491cebefaa1fb78f90196a1d43bb039e8c2c3df69d00908f9eb0e05a763
7
+ data.tar.gz: 9af60883aa254a485739bfe716e3c28e93075b392cf94bf8b620f47daf01258734e615ba4ce2974c7df3596360f8272a0287b1a0079ceb8db540e8496297637d
data/Gemfile.lock CHANGED
@@ -1,40 +1,78 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- relishable (0.26)
5
- fog
6
- legacy-fernet
4
+ relishable (0.30)
5
+ fog (~> 1.23.0)
6
+ legacy-fernet (~> 1.6.3)
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
+ addressable (2.3.6)
11
12
  builder (3.2.2)
12
- excon (0.25.3)
13
- fog (1.15.0)
13
+ crack (0.4.1)
14
+ safe_yaml (~> 0.9.0)
15
+ diff-lcs (1.2.5)
16
+ excon (0.40.0)
17
+ fog (1.23.0)
18
+ fog-brightbox
19
+ fog-core (~> 1.23)
20
+ fog-json
21
+ fog-softlayer
22
+ ipaddress (~> 0.5)
23
+ nokogiri (~> 1.5, >= 1.5.11)
24
+ fog-brightbox (0.5.1)
25
+ fog-core (~> 1.22)
26
+ fog-json
27
+ inflecto
28
+ fog-core (1.24.0)
14
29
  builder
15
- excon (~> 0.25.0)
16
- formatador (~> 0.2.0)
30
+ excon (~> 0.38)
31
+ formatador (~> 0.2)
17
32
  mime-types
18
- multi_json (~> 1.0)
19
33
  net-scp (~> 1.1)
20
34
  net-ssh (>= 2.1.3)
21
- nokogiri (~> 1.5)
22
- ruby-hmac
23
- formatador (0.2.4)
35
+ fog-json (1.0.0)
36
+ multi_json (~> 1.0)
37
+ fog-softlayer (0.3.19)
38
+ fog-core
39
+ fog-json
40
+ formatador (0.2.5)
41
+ inflecto (0.0.2)
42
+ ipaddress (0.8.0)
24
43
  legacy-fernet (1.6.3)
25
44
  multi_json
26
- mime-types (1.24)
27
- mini_portile (0.5.1)
28
- multi_json (1.7.9)
29
- net-scp (1.1.2)
45
+ mime-types (2.4.2)
46
+ mini_portile (0.6.0)
47
+ multi_json (1.10.1)
48
+ net-scp (1.2.1)
30
49
  net-ssh (>= 2.6.5)
31
- net-ssh (2.6.8)
32
- nokogiri (1.6.0)
33
- mini_portile (~> 0.5.0)
34
- ruby-hmac (0.4.0)
50
+ net-ssh (2.9.1)
51
+ nokogiri (1.6.3.1)
52
+ mini_portile (= 0.6.0)
53
+ rake (10.3.2)
54
+ rspec (3.1.0)
55
+ rspec-core (~> 3.1.0)
56
+ rspec-expectations (~> 3.1.0)
57
+ rspec-mocks (~> 3.1.0)
58
+ rspec-core (3.1.4)
59
+ rspec-support (~> 3.1.0)
60
+ rspec-expectations (3.1.2)
61
+ diff-lcs (>= 1.2.0, < 2.0)
62
+ rspec-support (~> 3.1.0)
63
+ rspec-mocks (3.1.2)
64
+ rspec-support (~> 3.1.0)
65
+ rspec-support (3.1.1)
66
+ safe_yaml (0.9.5)
67
+ webmock (1.19.0)
68
+ addressable (>= 2.3.6)
69
+ crack (>= 0.3.2)
35
70
 
36
71
  PLATFORMS
37
72
  ruby
38
73
 
39
74
  DEPENDENCIES
75
+ rake (> 0)
40
76
  relishable!
77
+ rspec (~> 3.1.0)
78
+ webmock (~> 1.19.0)
data/lib/relish.rb CHANGED
@@ -7,80 +7,119 @@ require "relish/release"
7
7
  class Relish
8
8
 
9
9
  def initialize(*args)
10
- @db = DynamoHelper.new(*args)
10
+ @db = DynamoHelper.new(*args)
11
+ @tries = 3
11
12
  end
12
13
 
13
14
  def copy(id, version, data)
14
- Release.new.tap do |release|
15
- release.item = {}
16
- release.id = id
17
- release.version = version
18
- data.each do |k, v|
19
- release.send("#{k}=", v.to_s) unless v.nil?
15
+ rescue_dynamodb_error do
16
+ Release.new.tap do |release|
17
+ release.item = {}
18
+ release.id = id
19
+ release.version = version
20
+ data.each do |k, v|
21
+ release.send("#{k}=", v.to_s) unless v.nil?
22
+ end
23
+ @db.put(release.item)
20
24
  end
21
- @db.put(release.item)
22
25
  end
23
26
  end
24
27
 
25
28
  def create(id, data)
26
- item = @db.query_current_version(id)
27
- Release.new.tap do |release|
28
- if item.nil?
29
- release.item = {}
30
- release.id = id
31
- release.version = "1"
32
- else
33
- release.item = item
34
- release.version = (release.version.to_i + 1).to_s
35
- end
36
- data.each do |k, v|
37
- release.send("#{k}=", v.to_s) unless v.nil?
29
+ rescue_dynamodb_error do
30
+ item = @db.query_current_version(id)
31
+ Release.new.tap do |release|
32
+ if item.nil?
33
+ release.item = {}
34
+ release.id = id
35
+ release.version = "1"
36
+ else
37
+ release.item = item
38
+ release.version = (release.version.to_i + 1).to_s
39
+ end
40
+ data.each do |k, v|
41
+ release.send("#{k}=", v.to_s) unless v.nil?
42
+ end
43
+ @db.put_current_version(release.item)
38
44
  end
39
- @db.put_current_version(release.item)
40
45
  end
41
46
  end
42
47
 
43
48
  def current(id, *attrs)
44
- item = @db.query_current_version(id, *attrs)
45
- unless item.nil?
46
- Release.new.tap do |release|
47
- release.item = item
49
+ rescue_dynamodb_error do
50
+ item = @db.query_current_version(id, *attrs)
51
+ unless item.nil?
52
+ Release.new.tap do |release|
53
+ release.item = item
54
+ end
48
55
  end
49
56
  end
50
57
  end
51
58
 
52
59
  def read(id, version, *attrs)
53
- item = @db.get_version(id, version, *attrs)
54
- unless item.nil?
55
- Release.new.tap do |release|
56
- release.item = item
60
+ rescue_dynamodb_error do
61
+ item = @db.get_version(id, version, *attrs)
62
+ unless item.nil?
63
+ Release.new.tap do |release|
64
+ release.item = item
65
+ end
57
66
  end
58
67
  end
59
68
  end
60
69
 
61
70
  def dump(id, consistent=nil, limit=nil)
62
- items = @db.query(id, consistent, limit)
63
- items.map do |item|
64
- Release.new.tap do |release|
65
- release.item = item
71
+ rescue_dynamodb_error do
72
+ items = @db.query(id, consistent, limit)
73
+ items.map do |item|
74
+ Release.new.tap do |release|
75
+ release.item = item
76
+ end
66
77
  end
67
78
  end
68
79
  end
69
-
80
+
70
81
  def update(id, version, data)
71
- item = @db.get_version(id, version)
72
- unless item.nil?
73
- Release.new.tap do |release|
74
- release.item = item
75
- data.each do |k, v|
76
- release.send("#{k}=", v.to_s) unless v.nil?
82
+ rescue_dynamodb_error do
83
+ item = @db.get_version(id, version)
84
+ unless item.nil?
85
+ Release.new.tap do |release|
86
+ release.item = item
87
+ data.each do |k, v|
88
+ release.send("#{k}=", v.to_s) unless v.nil?
89
+ end
90
+ @db.put_version(id, version, release.item)
77
91
  end
78
- @db.put_version(id, version, release.item)
79
92
  end
80
93
  end
81
94
  end
82
95
 
83
96
  def delete(id, version)
84
- @db.delete_version(id, version)
97
+ rescue_dynamodb_error do
98
+ @db.delete_version(id, version)
99
+ end
100
+ end
101
+
102
+ def set_error_handler(&blk)
103
+ @error_handler = blk
104
+ end
105
+
106
+ def rescue_dynamodb_error
107
+ tries = @tries
108
+ begin
109
+ yield
110
+ rescue => e
111
+ retries = ((tries -= 1) > 0)
112
+
113
+ unless @error_handler.nil?
114
+ @error_handler.call(e, retries)
115
+ end
116
+
117
+ if retries
118
+ retry
119
+ else
120
+ raise
121
+ end
122
+
123
+ end
85
124
  end
86
125
  end
@@ -0,0 +1,5 @@
1
+ class Relish
2
+ VERSION = "0.30"
3
+ end
4
+
5
+
metadata CHANGED
@@ -1,86 +1,128 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relishable
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.29'
5
- prerelease:
4
+ version: '0.30'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Mark Fine
9
8
  - Blake Gentry
9
+ - Pedro Belo
10
+ - Joshua Tobin
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2014-05-03 00:00:00.000000000 Z
14
+ date: 2014-10-21 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: fog
17
18
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
19
  requirements:
20
- - - ! '>='
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '0'
22
+ version: 1.23.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
26
  requirements:
28
- - - ! '>='
27
+ - - "~>"
29
28
  - !ruby/object:Gem::Version
30
- version: '0'
29
+ version: 1.23.0
31
30
  - !ruby/object:Gem::Dependency
32
31
  name: legacy-fernet
33
32
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
33
  requirements:
36
- - - ! '>='
34
+ - - "~>"
37
35
  - !ruby/object:Gem::Version
38
- version: '0'
36
+ version: 1.6.3
39
37
  type: :runtime
40
38
  prerelease: false
41
39
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
40
  requirements:
44
- - - ! '>='
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: 1.6.3
44
+ - !ruby/object:Gem::Dependency
45
+ name: rake
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">"
45
49
  - !ruby/object:Gem::Version
46
50
  version: '0'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">"
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: 3.1.0
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: 3.1.0
72
+ - !ruby/object:Gem::Dependency
73
+ name: webmock
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: 1.19.0
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: 1.19.0
47
86
  description: Release manager.
48
- email: mark.fine@gmail.com
87
+ email:
88
+ - pedro@heroku.com
89
+ - mark.fine@gmail.com
90
+ - tobin@heroku.com
91
+ - opensource@heroku.com
49
92
  executables: []
50
93
  extensions: []
51
94
  extra_rdoc_files: []
52
95
  files:
96
+ - Gemfile
97
+ - Gemfile.lock
98
+ - lib/relish.rb
53
99
  - lib/relish/cloudfront_helper.rb
54
100
  - lib/relish/dynamo_helper.rb
55
101
  - lib/relish/encryption_helper.rb
56
102
  - lib/relish/release.rb
57
103
  - lib/relish/s3_helper.rb
58
- - lib/relish.rb
59
- - Gemfile
60
- - Gemfile.lock
104
+ - lib/relish/version.rb
61
105
  homepage: http://github.com/heroku/relish
62
106
  licenses: []
107
+ metadata: {}
63
108
  post_install_message:
64
109
  rdoc_options: []
65
110
  require_paths:
66
111
  - lib
67
112
  required_ruby_version: !ruby/object:Gem::Requirement
68
- none: false
69
113
  requirements:
70
- - - ! '>='
114
+ - - ">="
71
115
  - !ruby/object:Gem::Version
72
116
  version: '0'
73
117
  required_rubygems_version: !ruby/object:Gem::Requirement
74
- none: false
75
118
  requirements:
76
- - - ! '>='
119
+ - - ">="
77
120
  - !ruby/object:Gem::Version
78
121
  version: '0'
79
122
  requirements: []
80
123
  rubyforge_project:
81
- rubygems_version: 1.8.24
124
+ rubygems_version: 2.2.2
82
125
  signing_key:
83
- specification_version: 3
126
+ specification_version: 4
84
127
  summary: releases
85
128
  test_files: []
86
- has_rdoc: