relishable 0.9 → 0.10

Sign up to get free protection for your applications and to get access to all the features.
data/lib/relish.rb CHANGED
@@ -9,72 +9,72 @@ class Relish
9
9
  end
10
10
 
11
11
  def copy(id, version, data)
12
- release = Release.new
13
- release.item = {}
14
- release.id = id
15
- release.version = version
16
- data.each do |k, v|
17
- release.send("#{k}=", v.to_s) unless v.nil?
12
+ Release.new.tap do |release|
13
+ release.item = {}
14
+ release.id = id
15
+ release.version = version
16
+ data.each do |k, v|
17
+ release.send("#{k}=", v.to_s) unless v.nil?
18
+ end
19
+ @db.put(release.item)
18
20
  end
19
- @db.put(release.item)
20
- release
21
21
  end
22
22
 
23
23
  def create(id, data)
24
24
  item = @db.query_current_version(id)
25
- release = Release.new
26
- if item.nil?
27
- release.item = {}
28
- release.id = id
29
- release.version = "1"
30
- else
31
- release.item = item
32
- release.version = (release.version.to_i + 1).to_s
33
- end
34
- data.each do |k, v|
35
- release.send("#{k}=", v.to_s) unless v.nil?
25
+ Release.new.tap do |release|
26
+ if item.nil?
27
+ release.item = {}
28
+ release.id = id
29
+ release.version = "1"
30
+ else
31
+ release.item = item
32
+ release.version = (release.version.to_i + 1).to_s
33
+ end
34
+ data.each do |k, v|
35
+ release.send("#{k}=", v.to_s) unless v.nil?
36
+ end
37
+ @db.put_current_version(release.item)
36
38
  end
37
- @db.put_current_version(release.item)
38
- release
39
39
  end
40
40
 
41
41
  def current(id, *attrs)
42
42
  item = @db.query_current_version(id, *attrs)
43
43
  unless item.nil?
44
- release = Release.new
45
- release.item = item
46
- release
44
+ Release.new.tap do |release|
45
+ release.item = item
46
+ end
47
47
  end
48
48
  end
49
49
 
50
50
  def read(id, version, *attrs)
51
51
  item = @db.get_version(id, version, *attrs)
52
52
  unless item.nil?
53
- release = Release.new
54
- release.item = item
55
- release
53
+ Release.new.tap do |release|
54
+ release.item = item
55
+ end
56
56
  end
57
57
  end
58
58
 
59
59
  def dump(id, consistent=nil, limit=nil)
60
- items = @db.query(id, limit)
60
+ items = @db.query(id, consistent, limit)
61
61
  items.map do |item|
62
- release = Release.new
63
- release.item = item
64
- release
62
+ Release.new.tap do |release|
63
+ release.item = item
64
+ end
65
65
  end
66
66
  end
67
67
 
68
68
  def update(id, version, data)
69
69
  item = @db.get_version(id, version)
70
70
  unless item.nil?
71
- release = Release.new
72
- release.item = item
73
- data.each do |k, v|
74
- release.send("#{k}=", v.to_s) unless v.nil?
71
+ Release.new.tap do |release|
72
+ release.item = item
73
+ data.each do |k, v|
74
+ release.send("#{k}=", v.to_s) unless v.nil?
75
+ end
76
+ @db.put_version(id, version, release.item)
75
77
  end
76
- @db.put_version(id, version, release.item)
77
- release
78
78
  end
79
79
  end
80
80
  end
@@ -14,29 +14,27 @@ class Relish
14
14
  end
15
15
 
16
16
  def query_current_version(id, *attrs)
17
- opts = set_attrs_on_opts(attrs, :ConsistentRead => true, :Limit => 1, :ScanIndexForward => false)
18
- response = db.query(@table_name, {:S => id}, opts)
17
+ response = db.query(@table_name, {:S => id}, attrs_to_get(attrs).merge(:ConsistentRead => true, :Limit => 1, :ScanIndexForward => false))
19
18
  if response.body['Count'] == 1
20
19
  response.body['Items'].first
21
20
  end
22
21
  end
23
22
 
24
23
  def put_current_version(item)
25
- response = db.put_item(@table_name, item, {:Expected => {:id => {:Exists => false}, :version => {:Exists => false}}})
24
+ db.put_item(@table_name, item, {:Expected => {:id => {:Exists => false}, :version => {:Exists => false}}})
26
25
  end
27
26
 
28
27
  def get_version(id, version, *attrs)
29
- opts = set_attrs_on_opts(attrs)
30
- response = db.get_item(@table_name, {:HashKeyElement => {:S => id}, :RangeKeyElement => {:N => version}}, opts)
28
+ response = db.get_item(@table_name, {:HashKeyElement => {:S => id}, :RangeKeyElement => {:N => version}}, attrs_to_get(attrs).merge(:ConsistentRead => true))
31
29
  response.body['Item']
32
30
  end
33
31
 
34
32
  def put_version(id, version, item)
35
- response = db.put_item(@table_name, item, {:Expected => {:id => {:Value => {:S => id}}, :version => {:Value => {:N => version}}}})
33
+ db.put_item(@table_name, item, {:Expected => {:id => {:Value => {:S => id}}, :version => {:Value => {:N => version}}}})
36
34
  end
37
35
 
38
36
  def put(item)
39
- response = db.put_item(@table_name, item)
37
+ db.put_item(@table_name, item)
40
38
  end
41
39
 
42
40
  def query(id, consistent, limit)
@@ -44,12 +42,14 @@ class Relish
44
42
  response.body['Items']
45
43
  end
46
44
 
45
+ def to_s
46
+ "#<Relish::DynamoHelper>"
47
+ end
48
+
47
49
  private
48
50
 
49
- def set_attrs_on_opts(attrs, opts = {})
50
- attrs = Array(attrs)
51
- opts[:AttributesToGet] = attrs unless attrs.empty?
52
- opts
51
+ def attrs_to_get(attrs)
52
+ attrs.empty? ? {} : {:AttributesToGet => attrs}
53
53
  end
54
54
  end
55
55
  end
@@ -12,20 +12,30 @@ class Relish
12
12
  @secrets = secrets
13
13
  end
14
14
 
15
- def encrypt_env(env)
16
- encrypt_key_with_secret("env", env, hmac_secrets.first)
15
+ def encrypt(key, value)
16
+ Fernet.generate(hmac_secrets.first) do |gen|
17
+ gen.data = {key => value}
18
+ end
17
19
  end
18
20
 
19
- def decrypt_env(encrypted_token)
20
- try_decrypt_with_index(encrypted_token)[0]
21
+ def decrypt(key, token)
22
+ hmac_secrets.each do |secret|
23
+ if verifier = verifier(secret, token)
24
+ return verifier.data[key] if verifier.valid?
25
+ end
26
+ end
27
+ raise RelishDecryptionFailed
21
28
  end
22
29
 
23
- def upgrade_env_encryption(encrypted_token)
24
- if encrypted_token.nil? || encrypted_token == ""
25
- return false, encrypted_token
30
+ def upgrade(key, token)
31
+ if verifier = verifier(hmac_secrets.first, token)
32
+ return encrypt(key, verifier.data[key]) if verifier.valid?
26
33
  end
27
- env, i = try_decrypt_with_index(encrypted_token)
28
- i == 0 ? [false, encrypted_token] : [true, encrypt_env(env)]
34
+ raise RelishDecryptionFailed
35
+ end
36
+
37
+ def to_s
38
+ "#<Relish::EncryptionHelper>"
29
39
  end
30
40
 
31
41
  protected
@@ -36,36 +46,11 @@ class Relish
36
46
  end
37
47
  end
38
48
 
39
- def try_decrypt_with_index(encrypted_token)
40
- hmac_secrets.each_with_index do |secret, i|
41
- success, env = try_decrypt_key(secret, encrypted_token, "env")
42
- if success
43
- return env, i
44
- end
49
+ def verifier(secret, token)
50
+ Fernet.verifier(secret, token).tap do |verifier|
51
+ verifier.enforce_ttl = false
45
52
  end
46
- raise RelishDecryptionFailed
47
- end
48
-
49
- def try_decrypt_key(secret, encrypted_token, hash_key)
50
- verifier = Fernet.verifier(secret, encrypted_token)
51
- verifier.enforce_ttl = false
52
- unless verifier.valid?
53
- return false, nil
54
- end
55
- [true, verifier.data[hash_key]]
56
- rescue OpenSSL::Cipher::CipherError => e
57
- return false, nil
58
- end
59
-
60
- def encrypt_key_with_secret(hash_key, value, secret)
61
- Fernet.generate(secret) do |gen|
62
- gen.data = {hash_key => value}
63
- end
64
- end
65
-
66
- def inspect
67
- "#<Relish::EncryptionHelper @static_secret=[masked] @secrets=[masked]>"
53
+ rescue OpenSSL::Cipher::CipherError
68
54
  end
69
- alias to_s inspect
70
55
  end
71
56
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relishable
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.9'
4
+ version: '0.10'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: