Class: Sequence::OfObjectMethods
Constant Summary
Constants inherited
from Sequence
SubSequence, VERSION
Instance Attribute Summary
Attributes inherited from Indexed
#data, #pos
Instance Method Summary
collapse
Methods inherited from OfArray
#append, #index, #new_data, #rindex
Methods included from ArrayLike
#data_class, #index, #like, #push, #rindex, #scan, #scan_until, #scanback, #scanback_until, #unshift
Methods inherited from Indexed
_orig_new, #_pos=, #eof?, #maxmatchlen, #maxmatchlen=, new, #new_data
Methods inherited from UseData
#read, #readahead, #readback, #readbehind, #size
Constructor Details
#initialize(obj, exceptions = [], extras = []) ⇒ OfObjectMethods
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/sequence/ofobjectmethods.rb', line 11
def initialize obj, exceptions=[], =[]
@obj=obj
methods=obj.public_methods.-(Functional.nonfunctions_of(obj)).-(exceptions)
methods.reject!{|name| /[!=]$/==name }
@data.concat .map{|x| Symbol===x ? x.to_s : x }
@data=methods.inject([]){|l,name| l+[name,nil]}
@is_exception=0
@is_reified=0
end
|
Instance Method Details
#is_exception?(index) ⇒ Boolean
23
|
# File 'lib/sequence/ofobjectmethods.rb', line 23
def is_exception?(index) @is_exception&(1<<index/2) == 0 end
|
#is_reified?(index) ⇒ Boolean
26
|
# File 'lib/sequence/ofobjectmethods.rb', line 26
def is_reified?(index) @is_reified&(1<<index/2) == 0 end
|
#modify(*args) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/sequence/ofobjectmethods.rb', line 29
def modify(*args)
repldata=args.pop
start,len,only1=_parse_slice_args(*args)
len==1 or raise ArgumentError,"scalar modifications to objects only!"
start.%(2).nonzero? or raise ArgumentError, "OfObjectMethods#modify will not change method names!"
if Array===@data[start-1]
if @data[start-1].first.to_s=='[]'
@obj.send(:[]=, @data[1..-1],repldata)
else raise ArgumentError, "trying to call settor with extra args"
end
else
@obj.send(@data[start-1]+"=",repldata.first)
@data[start]=repldata.first
end
repldata
end
|
#reify(itemref) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/sequence/ofobjectmethods.rb', line 70
def reify(itemref)
if itemref.is_a? String or itemref.is_a? Symbol
i=0
begin
i=@data.index(itemref.to_s,i)
i or @data.push itemref.to_s, nil
end while i and i%2!=0
reify_from_index(i)
elsif itemref.is_a? Integer and itemref>=0 and itemref%2==0
reify_from_index(itemref)
else
raise ArgumentError
end
return nil
end
|
#reify_from_index(i) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/sequence/ofobjectmethods.rb', line 48
def reify_from_index(i)
if is_reified? i
raise @data[i+1] if is_exception? i
return
end
set_reified! i
begin
@data[i+1]=
if Array===@data[i]
@obj.send(*@data[i])
else
@obj.send(@data[i])
end
rescue Exception=>exc
set_exception!(i)
@data[i+1]=exc
raise
end
end
|
#set_exception!(index) ⇒ Object
24
|
# File 'lib/sequence/ofobjectmethods.rb', line 24
def set_exception!(index) @is_exception|= 1<<index/2 end
|
#set_reified!(index) ⇒ Object
27
|
# File 'lib/sequence/ofobjectmethods.rb', line 27
def set_reified!(index) @is_reified|= 1<<index/2 end
|