sid_list 0.0.1 → 0.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.
- checksums.yaml +4 -4
- data/README.rdoc +17 -17
- data/lib/sid_list/version.rb +1 -1
- data/lib/sid_list.rb +110 -30
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a74f514b61e1880376746c2b727ed403b6cc67f2
|
4
|
+
data.tar.gz: 640a8460a5ef9a01115a32e5ef7e01252bde20c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 974a122ebb91220ef9b697a77c3a2fa8ce549d75e7118bf95604bb5e861f5df3e0c983f2aea19b734973d0f83418cae30735b76888904dec9389109a1d1c5f64
|
7
|
+
data.tar.gz: ae0ab79b7afb76706cecaafa35b5a7393eb199b8e403eda613669ed0815f9c2398fb4b4e8dca98cee953f6db4154dd29e71b20040892aec6319eb18311020e11
|
data/README.rdoc
CHANGED
@@ -8,25 +8,25 @@ Sid List is a list I created for one of the servers I developed. The idea behind
|
|
8
8
|
|
9
9
|
As I had previously developed MdlSql (a modular sql gem), configuring the gem as I wanted proved itself clear and easy. For example, in case I wanted to make a list of instances which would be loaded from Mysql, it would go the following way:
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
require 'mdlsql'
|
12
|
+
class InstanceList < SidList
|
13
|
+
def load_hash
|
14
|
+
results = MdlSql::select.from(:instances).where(:status, 1, '>').execute
|
15
|
+
end
|
16
|
+
def update_hash time
|
17
|
+
results = MdlSql::select.from(:instances).where("status > 1 AND updated_at > #{time}").execute
|
18
|
+
end
|
19
|
+
def new_obj obj_data
|
20
|
+
obj = Instance.new obj_data
|
21
|
+
end
|
22
|
+
end
|
23
23
|
|
24
24
|
And with this I could just go straight to work with the list:
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
il = InstanceList.new
|
27
|
+
il.load
|
28
|
+
il.ready.first # Get the first of the 'ready' instance
|
29
|
+
il.update
|
30
30
|
|
31
31
|
== License
|
32
32
|
|
@@ -45,4 +45,4 @@ GNU General Public License for more details.
|
|
45
45
|
You should have received a copy of the GNU General Public License
|
46
46
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
47
47
|
|
48
|
-
In order to contact the author of this gem, please write to sikian@gmail.com.
|
48
|
+
In order to contact the author of this gem, please write to sikian@gmail.com.
|
data/lib/sid_list/version.rb
CHANGED
data/lib/sid_list.rb
CHANGED
@@ -16,23 +16,23 @@ class SidList
|
|
16
16
|
#
|
17
17
|
# @params values [Hash] Params. for search.
|
18
18
|
# @params values [Fixnum] Id.
|
19
|
-
def find values
|
19
|
+
def find values
|
20
20
|
found = Array.new
|
21
21
|
|
22
22
|
if values.is_a? Fixnum
|
23
23
|
return @list_by_id[values]
|
24
24
|
# values = {:id => values}
|
25
25
|
elsif !values.is_a? Hash
|
26
|
-
raise ArgumentError, '
|
26
|
+
raise ArgumentError, 'Argument must be a Hash or a Fixnum.'
|
27
27
|
end
|
28
28
|
|
29
29
|
@list_by_status.each do |status, status_list|
|
30
30
|
|
31
31
|
status_list.each do |obj|
|
32
32
|
|
33
|
-
# Catch is now acting as an
|
33
|
+
# Catch is now acting as an AND condition.
|
34
34
|
# Maybe it would be a good idea to do it an AND
|
35
|
-
# @todo
|
35
|
+
# @todo make OR condition available
|
36
36
|
catch :not_equal do
|
37
37
|
values.each do |term, value|
|
38
38
|
if obj.send(term)!= value
|
@@ -45,10 +45,23 @@ class SidList
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
+
# if found.length == 1
|
49
|
+
# found = found.first
|
50
|
+
# end
|
51
|
+
|
52
|
+
# Return just an array, even if it's empty!
|
48
53
|
return found
|
49
54
|
end
|
50
55
|
|
56
|
+
def [] id
|
57
|
+
@list_by_id[id]
|
58
|
+
end
|
59
|
+
|
51
60
|
def add obj
|
61
|
+
if obj.is_a? Hash
|
62
|
+
obj = new_obj obj
|
63
|
+
end
|
64
|
+
|
52
65
|
@list_by_id[obj.id] = obj # Add obj by id
|
53
66
|
|
54
67
|
# Add obj by status. ensure_status_in_list is called to make sure that the status
|
@@ -94,7 +107,7 @@ class SidList
|
|
94
107
|
# @todo better time options
|
95
108
|
# @todo find a way to move adding here without cycling again
|
96
109
|
def update opts={}
|
97
|
-
time = opts[:time]? opts[:time] : Time.now
|
110
|
+
time = opts[:time]? opts[:time] : Time.now#.utc
|
98
111
|
update_objs time
|
99
112
|
end
|
100
113
|
|
@@ -119,16 +132,29 @@ class SidList
|
|
119
132
|
|
120
133
|
# Using opts[:old_status]
|
121
134
|
if opts[:old_status]
|
122
|
-
if @list_by_status[:old_status].delete(obj)
|
135
|
+
if @list_by_status[opts[:old_status]].delete(obj)
|
123
136
|
deleted = true
|
124
137
|
end
|
138
|
+
|
139
|
+
# Delete status in @list_by_status if it's empty
|
140
|
+
# Useful if status hasn't been already changed.
|
141
|
+
if @list_by_status[opts[:old_status]].length == 0
|
142
|
+
@list_by_status.delete opts[:old_status]
|
143
|
+
end
|
125
144
|
end
|
126
145
|
|
127
146
|
# Using obj.status
|
128
|
-
unless deleted
|
129
|
-
|
147
|
+
unless deleted || obj.status == new_status
|
148
|
+
status = obj.status
|
149
|
+
# puts obj.status
|
150
|
+
if @list_by_status[status].delete(obj)
|
130
151
|
deleted = true
|
131
152
|
end
|
153
|
+
|
154
|
+
# Delete status in @list_by_status if it's empty
|
155
|
+
if @list_by_status[status].length == 0
|
156
|
+
@list_by_status.delete status
|
157
|
+
end
|
132
158
|
end
|
133
159
|
|
134
160
|
# Search through @list_by_status
|
@@ -138,6 +164,11 @@ class SidList
|
|
138
164
|
if status_list.include? obj
|
139
165
|
@list_by_status[status].delete obj
|
140
166
|
deleted = true
|
167
|
+
|
168
|
+
# Delete status in @list_by_status if it's empty
|
169
|
+
if @list_by_status[status].length == 0
|
170
|
+
@list_by_status.delete status
|
171
|
+
end
|
141
172
|
throw :deleted
|
142
173
|
end
|
143
174
|
end
|
@@ -155,6 +186,35 @@ class SidList
|
|
155
186
|
return deleted
|
156
187
|
end
|
157
188
|
|
189
|
+
def count
|
190
|
+
@list_by_id.compact.count
|
191
|
+
end
|
192
|
+
|
193
|
+
def first
|
194
|
+
i = @list_by_id.find_index { |x| x }
|
195
|
+
@list_by_id[i]
|
196
|
+
end
|
197
|
+
|
198
|
+
def compact
|
199
|
+
@list_by_id.compact
|
200
|
+
end
|
201
|
+
|
202
|
+
def list_status *values
|
203
|
+
@list_by_status.each do |stat, arr|
|
204
|
+
puts "#{stat}:"
|
205
|
+
arr.each do |obj|
|
206
|
+
print "\t [#{obj.id}]"
|
207
|
+
values.each do |v|
|
208
|
+
print "\t #{obj.send v}" if obj.respond_to? v
|
209
|
+
end
|
210
|
+
print "\n"
|
211
|
+
end
|
212
|
+
end
|
213
|
+
return nil
|
214
|
+
end
|
215
|
+
|
216
|
+
alias_method :to_s, :list_status
|
217
|
+
|
158
218
|
private
|
159
219
|
|
160
220
|
###
|
@@ -166,21 +226,23 @@ class SidList
|
|
166
226
|
|
167
227
|
# @return [Array] data to be loaded into list
|
168
228
|
# @note This method must be overwritten to configure the list.
|
169
|
-
def
|
229
|
+
def load_data
|
170
230
|
raise 'StatusList#load_hash() has not been overwritten to allow data to be loaded into the list.'
|
171
231
|
|
172
232
|
return Array.new
|
173
233
|
end
|
234
|
+
alias_method :load_hash, :load_data
|
174
235
|
|
175
|
-
# @return [
|
236
|
+
# @return [Array] values to be updated/added. Please see example to see how this hash should be.
|
176
237
|
# @example update_hash's return
|
177
|
-
# update_hash(now) # =>
|
238
|
+
# update_hash(now) # => [{:id => 1, ...}, ...]
|
178
239
|
# @note This method must be overwritten to configure the list.
|
179
|
-
def
|
240
|
+
def update_data time
|
180
241
|
raise 'StatusList#update_hash() has not been overwritten to allow data in the list to be updated.'
|
181
242
|
|
182
|
-
return
|
243
|
+
return Array.new
|
183
244
|
end
|
245
|
+
alias_method :update_hash, :update_data
|
184
246
|
|
185
247
|
# @param obj_data [Hash] data to be loaded to the Object.
|
186
248
|
# @return [Object] new Object the list is composed of.
|
@@ -190,7 +252,7 @@ class SidList
|
|
190
252
|
end
|
191
253
|
|
192
254
|
def load_objs
|
193
|
-
list_data =
|
255
|
+
list_data = load_data()
|
194
256
|
obj_array = Array.new()
|
195
257
|
|
196
258
|
list_data.each do |obj_data|
|
@@ -201,24 +263,37 @@ class SidList
|
|
201
263
|
end
|
202
264
|
|
203
265
|
# Uses #update_hash to get all objects to be added or edited.
|
266
|
+
# @since 0.0.4 no longer need :updated and :created
|
204
267
|
# @param time [Time] time to pass to update_hash in order to get new changes.
|
205
|
-
# @note update_hash must return a Hash with keys :created and :updated (see #update_hash).
|
206
268
|
|
207
269
|
def update_objs time
|
208
|
-
list_data =
|
209
|
-
created_obj_array = Array.new()
|
210
|
-
updated_obj_array = Array.new()
|
270
|
+
list_data = update_data(time)
|
211
271
|
|
212
|
-
if
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
list_data
|
219
|
-
|
272
|
+
# @note the update can be taken care of in update_data if it returns nil.
|
273
|
+
|
274
|
+
if list_data
|
275
|
+
created_obj_array = Array.new()
|
276
|
+
updated_obj_array = Array.new()
|
277
|
+
|
278
|
+
list_data.each do |obj_data|
|
279
|
+
if find obj_data[:id]
|
280
|
+
edit_obj obj_data
|
281
|
+
else
|
282
|
+
add new_obj obj_data
|
283
|
+
end
|
220
284
|
end
|
221
285
|
end
|
286
|
+
|
287
|
+
# if list_data[:created]
|
288
|
+
# list_data[:created].each do |obj_data|
|
289
|
+
# add new_obj obj_data
|
290
|
+
# end
|
291
|
+
# end
|
292
|
+
# if list_data[:updated]
|
293
|
+
# list_data[:updated].each do |obj_data|
|
294
|
+
# edit_obj obj_data
|
295
|
+
# end
|
296
|
+
# end
|
222
297
|
end
|
223
298
|
|
224
299
|
# Updates/Edits an object that already exists.
|
@@ -230,8 +305,12 @@ class SidList
|
|
230
305
|
obj = @list_by_id[obj_data[:id]]
|
231
306
|
|
232
307
|
if obj
|
233
|
-
|
234
|
-
obj.
|
308
|
+
if obj.respond_to? 'update_with_hash'
|
309
|
+
obj.update_with_hash obj_data
|
310
|
+
else
|
311
|
+
obj_data.each do |key,value|
|
312
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
313
|
+
end
|
235
314
|
end
|
236
315
|
end
|
237
316
|
|
@@ -247,13 +326,14 @@ class SidList
|
|
247
326
|
unless @list_by_status[status].is_a? Array
|
248
327
|
@list_by_status[status] = Array.new
|
249
328
|
end
|
329
|
+
if !(status.is_a? Symbol || status.is_a?(String))
|
330
|
+
raise "Object's status has no name (status #{status} was passed)."
|
331
|
+
end
|
250
332
|
unless self.respond_to?(status)
|
251
|
-
puts 'i dont respond'
|
252
333
|
self.class.send(:define_method, status) do
|
253
334
|
@list_by_status[status]
|
254
335
|
end
|
255
336
|
end
|
256
|
-
|
257
337
|
return @list_by_status[status]
|
258
338
|
end
|
259
339
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sid_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sikian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|