Class: ROC::List
Instance Attribute Summary
Attributes inherited from Base
#key, #options
Instance Method Summary
collapse
deserializing_method, nonserializing_method, serializing_and_deserializing_method, serializing_method, zero_arg_method
#sort, #sort!
#clear, #delete_at, #delete_if, #fill, included, #insert, #inspect, #keep_if, #replace, #to_a, #to_array, #to_ary, #values=
Methods inherited from Base
delegate_methods, #initialize, #method_missing, #respond_to?, #seed
#eval
Constructor Details
This class inherits a constructor from ROC::Base
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class ROC::Base
Instance Method Details
#<<(obj) ⇒ Object
142
143
144
|
# File 'lib/roc/objects/list.rb', line 142
def <<(obj)
self.push(obj)
end
|
#[](range_or_num, num = nil) ⇒ Object
Also known as:
slice
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/roc/objects/list.rb', line 72
def [](range_or_num, num=nil)
if range_or_num.is_a?(::Integer)
if num.nil?
self.lindex(range_or_num)
elsif num >= 0
self.lrange(range_or_num, range_or_num + num - 1)
else
raise ArgumentError, 'second arg to [] must be a non-neg integer'
end
elsif range_or_num.is_a?(Range)
self.lrange(range_or_num.first, (range_or_num.exclude_end? ? range_or_num.last - 1 : range_or_num.last))
else
if num.nil?
self.values.slice(range_or_num)
else
self.values.slice(range_or_num, num)
end
end
end
|
#[]=(*args) ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/roc/objects/list.rb', line 101
def []=(*args)
case args.size
when 1
raise ArgumentError, 'index required'
when 2
if args[0].is_a?(::Integer)
self.lset(*args)
else
raise ArgumentError, 'range assignment not supported in []='
end
when 3
raise ArgumentError, 'multiple index assignment not supported in []='
else
raise ArgumentError, 'wrong number of args'
end
end
|
#clobber(vals) ⇒ Object
implementing ArrayType ##
189
190
191
192
193
194
|
# File 'lib/roc/objects/list.rb', line 189
def clobber(vals)
self.storage.multi do
self.forget
vals.each{|v| self << v}
end
end
|
#delete(val) ⇒ Object
implement (if posible) destructive methods that would otherwise raise
120
121
122
123
124
125
126
127
|
# File 'lib/roc/objects/list.rb', line 120
def delete(val)
count = self.lrem(0, val)
if count > 0
val
else
nil
end
end
|
#first ⇒ Object
93
94
95
|
# File 'lib/roc/objects/list.rb', line 93
def first
self.lindex(0)
end
|
#last ⇒ Object
97
98
99
|
# File 'lib/roc/objects/list.rb', line 97
def last
self.lindex(-1)
end
|
#linsert(where, pivot, value) ⇒ Object
55
56
57
|
# File 'lib/roc/objects/list.rb', line 55
def linsert(where, pivot, value)
self.call :linsert, where, pivot, value
end
|
#linsert_after(pivot, value) ⇒ Object
Also known as:
insert_after
64
65
66
|
# File 'lib/roc/objects/list.rb', line 64
def linsert_after(pivot, value)
self.linsert('after', pivot, value)
end
|
#linsert_before(pivot, value) ⇒ Object
Also known as:
insert_before
59
60
61
|
# File 'lib/roc/objects/list.rb', line 59
def linsert_before(pivot, value)
self.linsert('before', pivot, value)
end
|
#lrange(start_index, stop_index) ⇒ Object
Also known as:
range
11
12
13
|
# File 'lib/roc/objects/list.rb', line 11
def lrange(start_index, stop_index)
self.call :lrange, start_index, stop_index
end
|
#lrem(count, val) ⇒ Object
Also known as:
rem
41
42
43
|
# File 'lib/roc/objects/list.rb', line 41
def lrem(count, val)
self.call :lrem, count, val
end
|
#lset(index, val) ⇒ Object
Also known as:
set
33
34
35
|
# File 'lib/roc/objects/list.rb', line 33
def lset(index, val)
self.call :lset, index, val
end
|
#ltrim(start_index, stop_index) ⇒ Object
Also known as:
trim
46
47
48
|
# File 'lib/roc/objects/list.rb', line 46
def ltrim(start_index, stop_index)
self.call :ltrim, start_index, stop_index
end
|
#pop(*args) ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/roc/objects/list.rb', line 159
def pop(*args)
if 0 == args.size
self.rpop
elsif 1 == args.size
(self.storage.multi do
args[0].times do
self.rpop
end
end).reverse
else
raise ArgumentError, "wrong number of arguments (#{args.size} for 1)"
end
end
|
#push(*objs) ⇒ Object
129
130
131
132
133
134
135
136
137
138
139
140
|
# File 'lib/roc/objects/list.rb', line 129
def push(*objs)
if 1 == objs.size
self.rpush(objs[0])
elsif objs.size > 1
self.storage.multi do
objs.each do |obj|
self.rpush(obj)
end
end
end
self
end
|
#rpoplpush(other_list = self) ⇒ Object
51
52
53
|
# File 'lib/roc/objects/list.rb', line 51
def rpoplpush(other_list=self)
self.call :rpoplpush, other_list.key
end
|
#shift(*args) ⇒ Object
173
174
175
176
177
178
179
180
181
182
183
184
185
|
# File 'lib/roc/objects/list.rb', line 173
def shift(*args)
if 0 == args.size
self.lpop
elsif 1 == args.size
(self.storage.multi do
args[0].times do
self.lpop
end
end).reverse
else
raise ArgumentError, "wrong number of arguments (#{args.size} for 1)"
end
end
|
#unshift(*objs) ⇒ Object
146
147
148
149
150
151
152
153
154
155
156
157
|
# File 'lib/roc/objects/list.rb', line 146
def unshift(*objs)
if 1 == objs.size
self.lpush(objs[0])
elsif objs.size > 1
self.storage.multi do
objs.reverse.each do |obj|
self.lpush(obj)
end
end
end
self
end
|
#values ⇒ Object
196
197
198
|
# File 'lib/roc/objects/list.rb', line 196
def values
self.lrange(0, -1)
end
|