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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/shard/formatting.rb +43 -0
  3. data/lib/shard.rb +100 -0
  4. 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: []