relishable 0.1 → 0.2
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 +26 -0
- data/lib/relish/release.rb +122 -0
- metadata +4 -2
data/lib/relish.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require "press"
|
2
|
+
require "relish/release"
|
3
|
+
|
4
|
+
module Relish
|
5
|
+
extend Press
|
6
|
+
|
7
|
+
def self.create(id, data)
|
8
|
+
pdfm __FILE__, __method__, id: id
|
9
|
+
Release.create(id, data)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.read(id, version)
|
13
|
+
pdfm __FILE__, __method__, id: id, version: version
|
14
|
+
Release.read(id, version)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.readall(id)
|
18
|
+
pdfm __FILE__, __method__, id: id
|
19
|
+
Release.readall(id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.update(id, version, data)
|
23
|
+
pdfm __FILE__, __method__, id: id, version: version
|
24
|
+
Release.update(id, version, data)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require "press"
|
2
|
+
require "fog"
|
3
|
+
|
4
|
+
module Relish
|
5
|
+
class Release
|
6
|
+
extend Press
|
7
|
+
|
8
|
+
attr_accessor :items
|
9
|
+
|
10
|
+
def self.conf(*attrs)
|
11
|
+
attrs.each do |attr|
|
12
|
+
instance_eval "def #{attr}; @#{attr} ||= ENV['#{attr.upcase}'] || raise('missing configuration: #{attr.upcase}') end", __FILE__, __LINE__
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
conf :relish_aws_access_key,
|
17
|
+
:relish_aws_secret_key,
|
18
|
+
:relish_table_name
|
19
|
+
|
20
|
+
def self.schema(attrs)
|
21
|
+
attrs.each do |attr, type|
|
22
|
+
class_eval "def #{attr}; @items['#{attr}']['#{type}'] if @items.key? '#{attr}' end", __FILE__, __LINE__
|
23
|
+
class_eval "def #{attr}= value; @items['#{attr}'] = {'#{type}' => value} end", __FILE__, __LINE__
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
schema id: :S,
|
28
|
+
version: :N,
|
29
|
+
descr: :S,
|
30
|
+
user_id: :N,
|
31
|
+
slug_id: :S,
|
32
|
+
slug_version: :N,
|
33
|
+
stack: :S,
|
34
|
+
language_pack: :S,
|
35
|
+
env_json: :S,
|
36
|
+
pstable_json: :S,
|
37
|
+
addons_json: :S
|
38
|
+
|
39
|
+
def self.db
|
40
|
+
@db ||= Fog::AWS::DynamoDB.new(aws_access_key_id: relish_aws_access_key, aws_secret_access_key: relish_aws_secret_key)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.query_current_version(id)
|
44
|
+
response = db.query(relish_table_name, {S: id}, ConsistentRead: true, Limit: 1, ScanIndexForward: false)
|
45
|
+
if response.status != 200
|
46
|
+
raise('status: #{response.status}')
|
47
|
+
end
|
48
|
+
if response.body['Count'] == 1
|
49
|
+
response.body['Items'].first
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.put_current_version(items)
|
54
|
+
response = db.put_item(relish_table_name, items, {Expected: {id: {Exists: false}, version: {Exists: false}}})
|
55
|
+
if response.status != 200
|
56
|
+
raise('status: #{response.status}')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.get_version(id, version)
|
61
|
+
response = db.get_item(relish_table_name, {HashKeyElement: {S: id}, RangeKeyElement: {N: version}})
|
62
|
+
if response.status != 200
|
63
|
+
raise('status: #{response.status}')
|
64
|
+
end
|
65
|
+
response.body['Item']
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.put_version(id, version, items)
|
69
|
+
response = db.put_item(relish_table_name, items, {Expected: {id: {Value: {S: id}}, version: {Value: {N: version}}}})
|
70
|
+
if response.status != 200
|
71
|
+
raise('status: #{response.status}')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.create(id, data)
|
76
|
+
pdfm __FILE__, __method__, id: id
|
77
|
+
items = query_current_version(id)
|
78
|
+
release = new
|
79
|
+
if items.nil?
|
80
|
+
release.items = {}
|
81
|
+
release.id = id
|
82
|
+
release.version = "1"
|
83
|
+
else
|
84
|
+
release.items = items
|
85
|
+
release.version = (release.version.to_i + 1).to_s
|
86
|
+
end
|
87
|
+
data.each do |k, v|
|
88
|
+
release.send("#{k}=", v)
|
89
|
+
end
|
90
|
+
put_current_version(release.items)
|
91
|
+
release
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.read(id, version)
|
95
|
+
pdfm __FILE__, __method__, id: id, version: version
|
96
|
+
items = get_version(id, version)
|
97
|
+
unless items.nil?
|
98
|
+
release = new
|
99
|
+
release.items = items
|
100
|
+
release
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.readall(id)
|
105
|
+
pdfm __FILE__, __method__, id: id
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.update(id, version, data)
|
109
|
+
pdfm __FILE__, __method__, id: id, version: version
|
110
|
+
items = get_version(id, version)
|
111
|
+
unless items.nil?
|
112
|
+
release = new
|
113
|
+
release.items = items
|
114
|
+
data.each do |k, v|
|
115
|
+
release.send("#{k}=", v)
|
116
|
+
end
|
117
|
+
put_version(id, version, release.items)
|
118
|
+
release
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
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.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: press
|
@@ -49,6 +49,8 @@ executables: []
|
|
49
49
|
extensions: []
|
50
50
|
extra_rdoc_files: []
|
51
51
|
files:
|
52
|
+
- lib/relish/release.rb
|
53
|
+
- lib/relish.rb
|
52
54
|
- Gemfile
|
53
55
|
- Gemfile.lock
|
54
56
|
homepage: http://github.com/heroku/relish
|