collection-holder 0.0.3 → 0.0.4
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/lib/collection-holder.rb +23 -3
- data/lib/config.rb +4 -0
- data/lib/error.rb +15 -0
- data/lib/que.rb +32 -22
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a642fd5f065c222c5c814084e4fa1fd2d92db835
|
|
4
|
+
data.tar.gz: dc2b5bbcd72e8b3a73a629cb96db0d2448371c16
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 23c8ca91611d0fb7028c346a5212c325f3595b0b305dadaf16a592e69261602621212e1f6a216d18fecb3445dfcf1d4cefedbd16fd6e4113ff269c2857515858
|
|
7
|
+
data.tar.gz: e3ca39355047a9f639d7976949399b16e2dd2f7b39cb818053f173afe1d84d048f539eecf2385911a4559de1a90cc586d42c3212275a2e317b1989312d31c259
|
data/lib/collection-holder.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
require_relative 'que.rb'
|
|
2
|
+
require_relative 'error.rb'
|
|
3
|
+
require_relative 'config.rb'
|
|
2
4
|
|
|
3
5
|
class CollectionHolder
|
|
4
6
|
|
|
@@ -6,13 +8,22 @@ class CollectionHolder
|
|
|
6
8
|
|
|
7
9
|
@@collectionID = 0
|
|
8
10
|
|
|
9
|
-
def initialize
|
|
11
|
+
def initialize(data = {})
|
|
12
|
+
raise Error if !valid_number(data[:size]) && data[:size]
|
|
13
|
+
|
|
14
|
+
@size = data[:size].to_i || $DEFAULT_HOLDER_SIZE
|
|
10
15
|
@holder = Hash.new
|
|
16
|
+
rescue => e
|
|
17
|
+
e.init_failed(self.class)
|
|
11
18
|
end
|
|
12
19
|
|
|
13
20
|
def add(collection)
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
raise Error if @holder.size >= @size
|
|
22
|
+
|
|
23
|
+
@holder[key(@@collectionID)] = collection
|
|
24
|
+
@@collectionID += 1
|
|
25
|
+
rescue => e
|
|
26
|
+
e.max_size_reached(self.class)
|
|
16
27
|
end
|
|
17
28
|
|
|
18
29
|
def find(id)
|
|
@@ -26,7 +37,11 @@ class CollectionHolder
|
|
|
26
37
|
end
|
|
27
38
|
|
|
28
39
|
def delete(id)
|
|
40
|
+
raise Error if @holder.empty?
|
|
41
|
+
|
|
29
42
|
@holder.delete(key(id))
|
|
43
|
+
rescue => e
|
|
44
|
+
e.min_size_reached(self.class)
|
|
30
45
|
end
|
|
31
46
|
|
|
32
47
|
private
|
|
@@ -34,4 +49,9 @@ class CollectionHolder
|
|
|
34
49
|
id.to_s.to_sym
|
|
35
50
|
end
|
|
36
51
|
|
|
52
|
+
def valid_number(str)
|
|
53
|
+
str = str.to_s
|
|
54
|
+
!!(str =~ /[0-9]+/ && str.length == str.match(/[0-9]+/).to_s.length)
|
|
55
|
+
end
|
|
56
|
+
|
|
37
57
|
end
|
data/lib/config.rb
ADDED
data/lib/error.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Error < StandardError
|
|
2
|
+
|
|
3
|
+
def init_failed(klass)
|
|
4
|
+
puts "Couldn't make object in class:#{klass}"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def max_size_reached(klass)
|
|
8
|
+
puts "Maximum size reached in class:#{klass}"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def min_size_reached(klass)
|
|
12
|
+
puts "Minimum size reached in class:#{klass}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
data/lib/que.rb
CHANGED
|
@@ -1,34 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative 'error.rb'
|
|
2
|
+
require_relative 'config.rb'
|
|
2
3
|
|
|
3
4
|
class Que
|
|
4
5
|
|
|
5
6
|
attr_reader :max_size
|
|
6
7
|
|
|
7
8
|
def initialize(data = {})
|
|
8
|
-
|
|
9
|
+
raise Error if !valid_number(data[:size]) && data[:size]
|
|
10
|
+
|
|
11
|
+
@max_size = get_number(data[:size]) || $DEFAULT_QUE_SIZE
|
|
9
12
|
@list = Queue.new
|
|
10
13
|
push_list(data[:list]) if data[:list]
|
|
14
|
+
rescue => e
|
|
15
|
+
e.init_failed(self.class)
|
|
11
16
|
end
|
|
12
17
|
|
|
13
18
|
def pop
|
|
14
|
-
if @list.empty?
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
raise Error if @list.empty?
|
|
20
|
+
|
|
21
|
+
@list.pop
|
|
22
|
+
rescue => e
|
|
23
|
+
e.min_size_reached(self.class)
|
|
19
24
|
end
|
|
20
25
|
|
|
21
26
|
def push(item)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
@list.push(item)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
rescue
|
|
30
|
-
puts "Unable to push #{item.to_s}"
|
|
31
|
-
end
|
|
27
|
+
raise Error if @list.size >= @max_size
|
|
28
|
+
@list.push item
|
|
29
|
+
rescue => e
|
|
30
|
+
e.max_size_reached(self.class)
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
def clear
|
|
@@ -48,15 +47,26 @@ class Que
|
|
|
48
47
|
end
|
|
49
48
|
|
|
50
49
|
def push_list(list)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
raise Error if (@list.size+list.size) >= @max_size
|
|
51
|
+
|
|
52
|
+
list.each { |data| @list.push data } if list.is_a? Array
|
|
53
|
+
rescue => e
|
|
54
|
+
e.max_size_reached(self.class)
|
|
56
55
|
end
|
|
57
56
|
|
|
58
57
|
def display
|
|
59
58
|
@list.to_s
|
|
60
59
|
end
|
|
61
60
|
|
|
61
|
+
private
|
|
62
|
+
def valid_number(str)
|
|
63
|
+
str = str.to_s
|
|
64
|
+
!!(str =~ /[0-9]+/ && str.length == str.match(/[0-9]+/).to_s.length)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def get_number(str)
|
|
68
|
+
return nil if str==nil
|
|
69
|
+
return str.to_i
|
|
70
|
+
end
|
|
71
|
+
|
|
62
72
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: collection-holder
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Raj Negi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-09-
|
|
11
|
+
date: 2016-09-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: A simple gem to manage your queues or any data structure!
|
|
14
14
|
email: raj.negi@weboniselab.com
|
|
@@ -17,6 +17,8 @@ extensions: []
|
|
|
17
17
|
extra_rdoc_files: []
|
|
18
18
|
files:
|
|
19
19
|
- lib/collection-holder.rb
|
|
20
|
+
- lib/config.rb
|
|
21
|
+
- lib/error.rb
|
|
20
22
|
- lib/que.rb
|
|
21
23
|
homepage: https://github.com/rajn-webonise/RubyAssignments
|
|
22
24
|
licenses:
|