Class: RSMP::Validator::Helpers::SignalPriority::RequestHelper

Inherits:
Queue
  • Object
show all
Includes:
RSMP::Validator::Helpers::Status
Defined in:
lib/rsmp/validator/helpers/signal_priority.rb

Overview

Helper queue for managing signal priority requests during tests.

Instance Method Summary collapse

Methods included from RSMP::Validator::Helpers::Status

#wait_for_status

Constructor Details

#initialize(site_proxy, component:, signal_group_id:, timeout:, task:) ⇒ RequestHelper

Returns a new instance of RequestHelper.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/rsmp/validator/helpers/signal_priority.rb', line 43

def initialize(site_proxy, component:, signal_group_id:, timeout:, task:)
  super(site_proxy,
        filter: RSMP::Filter.new(
          type: 'StatusUpdate',
          ingoing: true,
          outgoing: false,
          component: component
        ),
        task: task)
  @site_proxy = site_proxy
  @component = component
  @signal_group_id = signal_group_id
  @request_id = SecureRandom.uuid[0..3]
  @matcher = S0033Matcher.new({ 'cCI' => 'S0033', 'q' => 'recent' }, request_id: @request_id)
  @subscribe_list = [{ 'sCI' => 'S0033', 'n' => 'status', 'uRt' => '0' }]
  @subscribe_list.map! { |item| item.merge!('sOc' => true) } if @site_proxy.tlc.use_soc?
  @unsubscribe_list = [{ 'sCI' => 'S0033', 'n' => 'status' }]
  @got = []
  @timeout = timeout
end

Instance Method Details

#cancelObject



93
94
95
96
97
98
# File 'lib/rsmp/validator/helpers/signal_priority.rb', line 93

def cancel
  command_list = RSMP::CommandList.new(:M0022, :requestPriority,
                                       requestId: @request_id,
                                       type: 'cancel').to_a
  @site_proxy.send_command(command_list, component: @component)
end

#expect(state) ⇒ Object



100
101
102
103
104
105
# File 'lib/rsmp/validator/helpers/signal_priority.rb', line 100

def expect(state)
  @matcher.state = state
  wait_for_message timeout: @timeout
rescue RSMP::TimeoutError
  raise RSMP::TimeoutError, "Priority request did not reach state #{state} within #{@timeout}s"
end

#request(level: 7, eta: 2, vehicle_type: 'car') ⇒ Object



71
72
73
74
75
76
77
78
79
80
# File 'lib/rsmp/validator/helpers/signal_priority.rb', line 71

def request(level: 7, eta: 2, vehicle_type: 'car')
  command_list = RSMP::CommandList.new(:M0022, :requestPriority,
                                       'requestId' => @request_id,
                                       'signalGroupId' => @signal_group_id,
                                       'type' => 'new',
                                       'level' => level,
                                       'eta' => eta,
                                       'vehicleType' => vehicle_type).to_a
  @site_proxy.send_command(command_list, component: @component)
end

#request_unrelated(level: 7, eta: 2, vehicle_type: 'car') ⇒ Object



82
83
84
85
86
87
88
89
90
91
# File 'lib/rsmp/validator/helpers/signal_priority.rb', line 82

def request_unrelated(level: 7, eta: 2, vehicle_type: 'car')
  command_list = RSMP::CommandList.new(:M0022, :requestPriority,
                                       'requestId' => SecureRandom.uuid[0..3],
                                       'signalGroupId' => @signal_group_id,
                                       'type' => 'new',
                                       'level' => level,
                                       'eta' => eta,
                                       'vehicleType' => vehicle_type).to_a
  @site_proxy.send_command(command_list, component: @component)
end

#runObject



64
65
66
67
68
69
# File 'lib/rsmp/validator/helpers/signal_priority.rb', line 64

def run
  start
  yield
ensure
  stop
end