relishable 0.5 → 0.6
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 +41 -27
- metadata +1 -1
data/lib/relish.rb
CHANGED
@@ -2,7 +2,7 @@ require "fog"
|
|
2
2
|
|
3
3
|
class Relish
|
4
4
|
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :item
|
6
6
|
|
7
7
|
def self.conf(*attrs)
|
8
8
|
attrs.each do |attr|
|
@@ -15,8 +15,8 @@ class Relish
|
|
15
15
|
|
16
16
|
def self.schema(attrs)
|
17
17
|
attrs.each do |attr, type|
|
18
|
-
class_eval "def #{attr}; @
|
19
|
-
class_eval "def #{attr}= value; @
|
18
|
+
class_eval "def #{attr}; @item['#{attr}']['#{type}'] if @item.key? '#{attr}' end", __FILE__, __LINE__
|
19
|
+
class_eval "def #{attr}= value; @item['#{attr}'] = {'#{type}' => value} end", __FILE__, __LINE__
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -46,8 +46,8 @@ class Relish
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def self.db_put_current_version(
|
50
|
-
response = db.put_item(table_name,
|
49
|
+
def self.db_put_current_version(item)
|
50
|
+
response = db.put_item(table_name, item, {:Expected => {:id => {:Exists => false}, :version => {:Exists => false}}})
|
51
51
|
if response.status != 200
|
52
52
|
raise('status: #{response.status}')
|
53
53
|
end
|
@@ -61,80 +61,94 @@ class Relish
|
|
61
61
|
response.body['Item']
|
62
62
|
end
|
63
63
|
|
64
|
-
def self.db_put_version(id, version,
|
65
|
-
response = db.put_item(table_name,
|
64
|
+
def self.db_put_version(id, version, item)
|
65
|
+
response = db.put_item(table_name, item, {:Expected => {:id => {:Value => {:S => id}}, :version => {:Value => {:N => version}}}})
|
66
66
|
if response.status != 200
|
67
67
|
raise('status: #{response.status}')
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
def self.db_put(
|
72
|
-
response = db.put_item(table_name,
|
71
|
+
def self.db_put(item)
|
72
|
+
response = db.put_item(table_name, item)
|
73
73
|
if response.status != 200
|
74
74
|
raise('status: #{response.status}')
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
def self.db_query(id, limit)
|
79
|
+
response = db.query(table_name, {:S => id}, :ConsistentRead => true, :Limit => limit, :ScanIndexForward => false)
|
80
|
+
if response.status != 200
|
81
|
+
raise('status: #{response.status}')
|
82
|
+
end
|
83
|
+
response.body['Items']
|
84
|
+
end
|
85
|
+
|
78
86
|
def self.copy(id, version, data)
|
79
87
|
release = new
|
80
|
-
release.
|
88
|
+
release.item = {}
|
81
89
|
release.id = id
|
82
90
|
release.version = version
|
83
91
|
data.each do |k, v|
|
84
92
|
release.send("#{k}=", v.to_s) unless v.nil?
|
85
93
|
end
|
86
|
-
db_put(release.
|
94
|
+
db_put(release.item)
|
87
95
|
release
|
88
96
|
end
|
89
97
|
|
90
98
|
def self.create(id, data)
|
91
|
-
|
99
|
+
item = db_query_current_version(id)
|
92
100
|
release = new
|
93
|
-
if
|
94
|
-
release.
|
101
|
+
if item.nil?
|
102
|
+
release.item = {}
|
95
103
|
release.id = id
|
96
104
|
release.version = "1"
|
97
105
|
else
|
98
|
-
release.
|
106
|
+
release.item = item
|
99
107
|
release.version = (release.version.to_i + 1).to_s
|
100
108
|
end
|
101
109
|
data.each do |k, v|
|
102
110
|
release.send("#{k}=", v.to_s) unless v.nil?
|
103
111
|
end
|
104
|
-
db_put_current_version(release.
|
112
|
+
db_put_current_version(release.item)
|
105
113
|
release
|
106
114
|
end
|
107
115
|
|
108
116
|
def self.current(id)
|
109
|
-
|
110
|
-
unless
|
117
|
+
item = db_query_current_version(id)
|
118
|
+
unless item.nil?
|
111
119
|
release = new
|
112
|
-
release.
|
120
|
+
release.item = item
|
113
121
|
release
|
114
122
|
end
|
115
123
|
end
|
116
124
|
|
117
125
|
def self.read(id, version)
|
118
|
-
|
119
|
-
unless
|
126
|
+
item = db_get_version(id, version)
|
127
|
+
unless item.nil?
|
120
128
|
release = new
|
121
|
-
release.
|
129
|
+
release.item = item
|
122
130
|
release
|
123
131
|
end
|
124
132
|
end
|
125
133
|
|
126
|
-
def self.dump(id)
|
134
|
+
def self.dump(id, limit=nil)
|
135
|
+
items = db_query(id, limit)
|
136
|
+
items.map do |item|
|
137
|
+
release = new
|
138
|
+
release.item = item
|
139
|
+
release
|
140
|
+
end
|
127
141
|
end
|
128
142
|
|
129
143
|
def self.update(id, version, data)
|
130
|
-
|
131
|
-
unless
|
144
|
+
item = db_get_version(id, version)
|
145
|
+
unless item.nil?
|
132
146
|
release = new
|
133
|
-
release.
|
147
|
+
release.item = item
|
134
148
|
data.each do |k, v|
|
135
149
|
release.send("#{k}=", v.to_s) unless v.nil?
|
136
150
|
end
|
137
|
-
db_put_version(id, version, release.
|
151
|
+
db_put_version(id, version, release.item)
|
138
152
|
release
|
139
153
|
end
|
140
154
|
end
|