relishable 0.9 → 0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: