Skip to content

Commit 3e659dc

Browse files
committed
Add session methods to output events
1 parent eee4b87 commit 3e659dc

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

lib/nibbler/session.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,34 @@ def parse_string(*args, timestamp: Time.now.to_i)
3939
end
4040
alias parse_s parse_string
4141

42+
# Parse some string input. Can be single or multiple bytes. Returns an event struct
43+
# eg single '40'
44+
# eg multiple '4050'
45+
# @param [Array<Integer>] bytes
46+
# @param [Object] timestamp A timestamp to store with the messages that result
47+
# @return [Event]
48+
def parse_string_to_event(*args, timestamp: Time.now.to_i)
49+
integers = Util::Conversion.strings_to_numeric_bytes(*args)
50+
parse_to_event(*integers, timestamp: timestamp)
51+
end
52+
4253
# Parse the given integer bytes and add them to the buffer.
4354
# @param [Array<Integer>] bytes
4455
# @param [Object] timestamp A timestamp to store with the messages that result
4556
# @return [Array<Object>]
4657
def parse(*bytes, timestamp: Time.now.to_i)
58+
parse_to_event(*bytes, timestamp: timestamp).report.messages
59+
end
60+
61+
# Parse the given integer bytes, add them to the buffer and return an event struct
62+
# @param [Array<Integer>] bytes
63+
# @param [Object] timestamp A timestamp to store with the messages that result
64+
# @return [Event]
65+
def parse_to_event(*bytes, timestamp: Time.now.to_i)
4766
parser_report = @parser.process(*bytes)
48-
@events << Event.new(parser_report, timestamp)
49-
parser_report.messages
67+
event = Event.new(parser_report, timestamp)
68+
@events << event
69+
event
5070
end
5171
end
5272
end

spec/session_spec.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,40 @@
55
describe Nibbler::Session do
66
let!(:session) { Nibbler::Session.new }
77

8+
describe '#parse_string_to_event' do
9+
let(:returned_event) { session.parse_string_to_event(*input, timestamp: timestamp) }
10+
let(:timestamp) { Time.now.to_i }
11+
let(:input) { %w[90 40 30] }
12+
let(:returned_messages) { returned_event.report.messages }
13+
let(:returned_message) { returned_messages.first }
14+
15+
it 'returns correct message' do
16+
expect(returned_messages.count).to eq(1)
17+
expect(returned_message).to be_a(MIDIMessage::NoteOn)
18+
expect(returned_message.channel).to eq(0)
19+
expect(returned_message.note).to eq(0x40)
20+
expect(returned_message.velocity).to eq(0x30)
21+
expect(returned_event.timestamp).to eq(timestamp)
22+
end
23+
end
24+
25+
describe '#parse_to_event' do
26+
let(:returned_event) { session.parse_to_event(*input, timestamp: timestamp) }
27+
let(:timestamp) { Time.now.to_i }
28+
let(:input) { [0x91, 0x30, 0x10] }
29+
let(:returned_messages) { returned_event.report.messages }
30+
let(:returned_message) { returned_messages.first }
31+
32+
it 'returns correct message' do
33+
expect(returned_messages.count).to eq(1)
34+
expect(returned_message).to be_a(MIDIMessage::NoteOn)
35+
expect(returned_message.channel).to eq(1)
36+
expect(returned_message.note).to eq(0x30)
37+
expect(returned_message.velocity).to eq(0x10)
38+
expect(returned_event.timestamp).to eq(timestamp)
39+
end
40+
end
41+
842
describe '#parse_string' do
943
let(:returned_messages) { session.parse_s(*input) }
1044
let(:returned_message) { returned_messages.first }

0 commit comments

Comments
 (0)