Class: SourceRoute::TpResultChain
- Inherits:
-
Object
- Object
- SourceRoute::TpResultChain
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/source_route/tp_result_chain.rb
Instance Attribute Summary collapse
-
#chain ⇒ Object
readonly
Returns the value of attribute chain.
Instance Method Summary collapse
- #call_chain ⇒ Object
- #deep_cloned ⇒ Object
- #import_return_value_to_call_chain ⇒ Object
-
#initialize ⇒ TpResultChain
constructor
A new instance of TpResultChain.
- #parent_length_list ⇒ Object
- #return_chain ⇒ Object
- #stringify ⇒ Object
- #treeize_call_chain ⇒ Object
Constructor Details
#initialize ⇒ TpResultChain
Returns a new instance of TpResultChain.
11 12 13 |
# File 'lib/source_route/tp_result_chain.rb', line 11 def initialize @chain = [] end |
Instance Attribute Details
#chain ⇒ Object (readonly)
Returns the value of attribute chain.
4 5 6 |
# File 'lib/source_route/tp_result_chain.rb', line 4 def chain @chain end |
Instance Method Details
#call_chain ⇒ Object
15 16 17 |
# File 'lib/source_route/tp_result_chain.rb', line 15 def call_chain select { |tpr| tpr[:event] == :call } end |
#deep_cloned ⇒ Object
59 60 61 |
# File 'lib/source_route/tp_result_chain.rb', line 59 def deep_cloned chain.map { |r| r.clone } end |
#import_return_value_to_call_chain ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/source_route/tp_result_chain.rb', line 23 def import_return_value_to_call_chain call_chain.each do |ctp| matched_return_tp = return_chain.detect do |rtp| rtp[:tp_self] == ctp[:tp_self] and rtp[:method_id] == ctp[:method_id] and rtp[:defined_class] == ctp[:defined_class] end unless matched_return_tp.nil? ctp[:return_value] = matched_return_tp[:return_value] ctp[:local_var] = matched_return_tp[:local_var] if matched_return_tp.key? :local_var ctp[:instance_var] = matched_return_tp[:instance_var] if matched_return_tp.key? :instance_var end end end |
#parent_length_list ⇒ Object
55 56 57 |
# File 'lib/source_route/tp_result_chain.rb', line 55 def parent_length_list call_chain.map { |tp| tp[:parent_length] }.uniq.sort end |
#return_chain ⇒ Object
19 20 21 |
# File 'lib/source_route/tp_result_chain.rb', line 19 def return_chain select { |tpr| tpr[:event] == :return } end |
#stringify ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/source_route/tp_result_chain.rb', line 63 def stringify deep_cloned.map do |tr| # to_s is safer than inspect # ex: inspect on ActiveRecord_Relation may crash tr[:defined_class] = tr[:defined_class].to_s if tr.key?(:defined_class) if tr.key?(:return_value) if tr[:return_value].nil? or tr[:return_value] == '' tr[:return_value] = tr[:return_value].inspect else tr[:return_value] = tr[:return_value].to_s end end tr end end |
#treeize_call_chain ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/source_route/tp_result_chain.rb', line 36 def treeize_call_chain init_order_id_and_parent_ids call_chain.each do |tpr| return_tpr = return_chain.find do |rtpr| rtpr[:defined_class] == tpr[:defined_class] and rtpr[:method_id] == tpr[:method_id] end unless return_tpr.nil? start_index, end_index = tpr[:order_id], return_tpr[:order_id] unless end_index == start_index + 1 values_at(start_index+1 ... end_index).select { |tpr| tpr[:event] == :call }.each do |tpr| tpr[:parent_ids].push start_index end end end end cal_parent_length end |