relishable 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/relish.rb +131 -7
  2. metadata +1 -2
  3. data/lib/relish/release.rb +0 -122
data/lib/relish.rb CHANGED
@@ -1,26 +1,150 @@
1
1
  require "press"
2
- require "relish/release"
2
+ require "fog"
3
3
 
4
- module Relish
4
+ class Relish
5
5
  extend Press
6
6
 
7
+ attr_accessor :items
8
+
9
+ def self.conf(*attrs)
10
+ attrs.each do |attr|
11
+ instance_eval "def #{attr}; @#{attr} ||= ENV['#{attr.upcase}'] || raise('missing configuration: #{attr.upcase}') end", __FILE__, __LINE__
12
+ end
13
+ end
14
+
15
+ conf :relish_aws_access_key,
16
+ :relish_aws_secret_key,
17
+ :relish_table_name
18
+
19
+ def self.schema(attrs)
20
+ attrs.each do |attr, type|
21
+ class_eval "def #{attr}; @items['#{attr}']['#{type}'] if @items.key? '#{attr}' end", __FILE__, __LINE__
22
+ class_eval "def #{attr}= value; @items['#{attr}'] = {'#{type}' => value} end", __FILE__, __LINE__
23
+ end
24
+ end
25
+
26
+ schema id: :S,
27
+ version: :N,
28
+ descr: :S,
29
+ user_id: :N,
30
+ slug_id: :S,
31
+ slug_version: :N,
32
+ stack: :S,
33
+ language_pack: :S,
34
+ env_json: :S,
35
+ pstable_json: :S,
36
+ addons_json: :S
37
+
38
+ def self.db
39
+ @db ||= Fog::AWS::DynamoDB.new(aws_access_key_id: relish_aws_access_key, aws_secret_access_key: relish_aws_secret_key)
40
+ end
41
+
42
+ def self.db_query_current_version(id)
43
+ response = db.query(relish_table_name, {S: id}, ConsistentRead: true, Limit: 1, ScanIndexForward: false)
44
+ if response.status != 200
45
+ raise('status: #{response.status}')
46
+ end
47
+ if response.body['Count'] == 1
48
+ response.body['Items'].first
49
+ end
50
+ end
51
+
52
+ def self.db_put_current_version(items)
53
+ response = db.put_item(relish_table_name, items, {Expected: {id: {Exists: false}, version: {Exists: false}}})
54
+ if response.status != 200
55
+ raise('status: #{response.status}')
56
+ end
57
+ end
58
+
59
+ def self.db_get_version(id, version)
60
+ response = db.get_item(relish_table_name, {HashKeyElement: {S: id}, RangeKeyElement: {N: version}})
61
+ if response.status != 200
62
+ raise('status: #{response.status}')
63
+ end
64
+ response.body['Item']
65
+ end
66
+
67
+ def self.db_put_version(id, version, items)
68
+ response = db.put_item(relish_table_name, items, {Expected: {id: {Value: {S: id}}, version: {Value: {N: version}}}})
69
+ if response.status != 200
70
+ raise('status: #{response.status}')
71
+ end
72
+ end
73
+
74
+ def self.db_put(items)
75
+ response = db.put_item(relish_table_name, items)
76
+ if response.status != 200
77
+ raise('status: #{response.status}')
78
+ end
79
+ end
80
+
81
+ def self.copy(id, version, data)
82
+ pdfm __FILE__, __method__, id: id, version: version
83
+ release = new
84
+ release.items = {}
85
+ release.id = id
86
+ release.version = version
87
+ data.each do |k, v|
88
+ release.send("#{k}=", v)
89
+ end
90
+ db_put(release.items)
91
+ release
92
+ end
93
+
7
94
  def self.create(id, data)
8
95
  pdfm __FILE__, __method__, id: id
9
- Release.create(id, data)
96
+ items = db_query_current_version(id)
97
+ release = new
98
+ if items.nil?
99
+ release.items = {}
100
+ release.id = id
101
+ release.version = "1"
102
+ else
103
+ release.items = items
104
+ release.version = (release.version.to_i + 1).to_s
105
+ end
106
+ data.each do |k, v|
107
+ release.send("#{k}=", v)
108
+ end
109
+ db_put_current_version(release.items)
110
+ release
111
+ end
112
+
113
+ def self.current(id)
114
+ pdfm __FILE__, __method__, id: id
115
+ items = db_query_current_version(id)
116
+ unless items.nil?
117
+ release = new
118
+ release.items = items
119
+ release
120
+ end
10
121
  end
11
122
 
12
123
  def self.read(id, version)
13
124
  pdfm __FILE__, __method__, id: id, version: version
14
- Release.read(id, version)
125
+ items = db_get_version(id, version)
126
+ unless items.nil?
127
+ release = new
128
+ release.items = items
129
+ release
130
+ end
15
131
  end
16
132
 
17
- def self.readall(id)
133
+ def self.dump(id)
18
134
  pdfm __FILE__, __method__, id: id
19
- Release.readall(id)
20
135
  end
21
136
 
22
137
  def self.update(id, version, data)
23
138
  pdfm __FILE__, __method__, id: id, version: version
24
- Release.update(id, version, data)
139
+ items = db_get_version(id, version)
140
+ unless items.nil?
141
+ release = new
142
+ release.items = items
143
+ data.each do |k, v|
144
+ release.send("#{k}=", v)
145
+ end
146
+ db_put_version(id, version, release.items)
147
+ release
148
+ end
25
149
  end
26
150
  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.2'
4
+ version: '0.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -49,7 +49,6 @@ executables: []
49
49
  extensions: []
50
50
  extra_rdoc_files: []
51
51
  files:
52
- - lib/relish/release.rb
53
52
  - lib/relish.rb
54
53
  - Gemfile
55
54
  - Gemfile.lock
@@ -1,122 +0,0 @@
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