shard-container 0.5.1
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 +7 -0
- data/lib/shard/formatting.rb +43 -0
- data/lib/shard.rb +100 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 590daf531a0af834ed1ce4131e993e201dc1fc5c
|
4
|
+
data.tar.gz: 713ee91974a5a24dbdd2a437d2130da1d75074d7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f2ec3954cc2f3140f18ec7e4880cb3606b3e479fb010d886ce4fbc0d114eea6f2b41596ea587bdd35960237b4431b1a4b04f1e6189e6b73c7c497f7bf3a505a4
|
7
|
+
data.tar.gz: fe17111df705a3ed7e4c3284118862efcb61a8ae52c007a7a4b40ea037559db4059cf09c4726d10f08f46c536f953a0345193187b90ac719161b3f45a0ad9ab2
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Shard
|
2
|
+
#return cleaned array of k/v/u sets by index or range
|
3
|
+
def clean(index=nil,endnum=nil)
|
4
|
+
@@clean=[]
|
5
|
+
if index
|
6
|
+
if endnum
|
7
|
+
@values[index..endnum].each{|v| @@clean<<[v.key,v.val,v.util]}
|
8
|
+
else
|
9
|
+
@@clean<<@values[index].key
|
10
|
+
@@clean<<@values[index].val
|
11
|
+
@@clean<<@values[index].util
|
12
|
+
end
|
13
|
+
else
|
14
|
+
@values.each{|v| @@clean<<[*v]}
|
15
|
+
end
|
16
|
+
|
17
|
+
return @@clean.length>1 ? @@clean : @@clean.flatten
|
18
|
+
end
|
19
|
+
|
20
|
+
#prune duplicates
|
21
|
+
def prune(*type)
|
22
|
+
type.each do |t|
|
23
|
+
@@uniqs=[]
|
24
|
+
@values.each{|v| @@uniqs.include?(v[t]) ? nil : @@uniqs<<v[t]}
|
25
|
+
@values.each{|v| @@uniqs.include?(v[t]) ? @@uniqs.delete(v[t]) : delete(@values.index(v),:pos)}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
#fix incorrect entries
|
30
|
+
def corr
|
31
|
+
@values.each{|v|
|
32
|
+
if not v.is_a?(Struct)
|
33
|
+
if v.length!=3||!v.is_a?(Array)
|
34
|
+
raise "segment #{v} is not a 3 value array."
|
35
|
+
end
|
36
|
+
@values<<@Dict2.new(v[0],v[1],v[2])
|
37
|
+
end
|
38
|
+
if v.is_a?(Array)
|
39
|
+
delete(@values.index(v),:pos)
|
40
|
+
end
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
data/lib/shard.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'shard/formatting'
|
2
|
+
|
3
|
+
class Shard
|
4
|
+
#add attribute readers for meta and value hashes
|
5
|
+
attr_reader :meta,:values
|
6
|
+
|
7
|
+
#class constructor, creates instaces for meta table, values array, and Dict2 struct
|
8
|
+
def initialize(id)
|
9
|
+
if not ['Symbol','String','Fixnum'].include?(id.class.name)
|
10
|
+
raise "Class of type '#{id.class.name}' supplied for id. Symbol, String, or Fixnum required."
|
11
|
+
end
|
12
|
+
@Dict2=Struct.new(:key,:val,:util)
|
13
|
+
@meta=Struct.new(:name,:size,:is_empty)
|
14
|
+
@meta=@meta.new(id,0,true)
|
15
|
+
@values=[]
|
16
|
+
end
|
17
|
+
|
18
|
+
#add method, adds a Dict2 struct to values
|
19
|
+
def add(key=nil,val=nil,util=nil,pos=-1)
|
20
|
+
@values.insert(pos,@Dict2.new(key,val,util))
|
21
|
+
|
22
|
+
@meta.size=@values.length
|
23
|
+
@meta.is_empty=@meta.size<0
|
24
|
+
end
|
25
|
+
|
26
|
+
#deletes an element from the values array based on type parameter
|
27
|
+
def delete(element,type=nil)
|
28
|
+
case type
|
29
|
+
#deleting by key..
|
30
|
+
when :key
|
31
|
+
#recursively delete all structs who's key matches element
|
32
|
+
@values.delete_if{|e| e.values[0]==element}
|
33
|
+
#deleting by value..
|
34
|
+
when :val
|
35
|
+
#recursively delete all structs who's value matches element
|
36
|
+
@values.delete_if{|e| e.values[1]==element}
|
37
|
+
when :pos
|
38
|
+
#delete struct at position or structs in range
|
39
|
+
@values.delete(@values[element])
|
40
|
+
else
|
41
|
+
raise TypeError("No type supplied")
|
42
|
+
end
|
43
|
+
|
44
|
+
@meta.size=@values.length
|
45
|
+
@meta.is_empty=@meta.size<0
|
46
|
+
end
|
47
|
+
|
48
|
+
##alias methods
|
49
|
+
#>deletion
|
50
|
+
#delete by key (shortcut)
|
51
|
+
def delKey(element)
|
52
|
+
delete(element,:key)
|
53
|
+
end
|
54
|
+
|
55
|
+
#delete by value (shortcut)
|
56
|
+
def delVal(element)
|
57
|
+
delete(element,:val)
|
58
|
+
end
|
59
|
+
|
60
|
+
#delete by position or range (shortcut)
|
61
|
+
def delPos(element,endnum=nil)
|
62
|
+
case endnum.class.name
|
63
|
+
when 'Fixnum'
|
64
|
+
endnum.downto(element){|i|
|
65
|
+
delete(i,:pos)
|
66
|
+
}
|
67
|
+
when 'NilClass'
|
68
|
+
delete(element,:pos)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
#>pruning
|
73
|
+
#prune keys
|
74
|
+
def pKeys
|
75
|
+
prune(:key)
|
76
|
+
end
|
77
|
+
#prune values
|
78
|
+
def pVals
|
79
|
+
prune(:val)
|
80
|
+
end
|
81
|
+
#prune utils
|
82
|
+
def pUtils
|
83
|
+
prune(:util)
|
84
|
+
end
|
85
|
+
#prune all elements
|
86
|
+
def pAll
|
87
|
+
prune(:key,:value,:util)
|
88
|
+
end
|
89
|
+
|
90
|
+
##aliases
|
91
|
+
#deletion
|
92
|
+
alias :keyDelete :delKey
|
93
|
+
alias :valDelete :delVal
|
94
|
+
alias :indexDelete :delPos
|
95
|
+
#pruning
|
96
|
+
alias :pruneKeys :pKeys
|
97
|
+
alias :pruneVals :pVals
|
98
|
+
alias :pruneUtils :pUtils
|
99
|
+
alias :pruneAll :pAll
|
100
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shard-container
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chitoge
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-02 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: An intuitive new container class for the everyday user.
|
14
|
+
email: RRTechFreelance@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/shard.rb
|
20
|
+
- lib/shard/formatting.rb
|
21
|
+
homepage: http://rubygems.org/gems/shard_container_class
|
22
|
+
licenses:
|
23
|
+
- IBM Public License
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.4.5.1
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: A Hash, and then some.
|
45
|
+
test_files: []
|