ircparser 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2e712b24986a96105f7fc722698814542a077966bef240ffe6d4c3fcad6859f
4
- data.tar.gz: 07d2480c650b4327ceba4e8b98c828846daf0e948210e4ed71bae33ffdada24d
3
+ metadata.gz: d1262a7e23aab10553888d9d4221bd92135b2946c9eb62926151e922cf6bcc28
4
+ data.tar.gz: 1211d6f79d995dc880eae1f289bcd73cc9c6f2ecf4cd2bb7198e25aa10343114
5
5
  SHA512:
6
- metadata.gz: 725749ad9026c5873708b0586e5dc9c86822549476c0d0fd0883cda9c98100f7584d62142c3ce1b0cec06f83aea623ad40f9c567d5fce673fdeb1bb44eed9db5
7
- data.tar.gz: e7a127efc3c55e5aee09c33b6782aa4d5b79d398ae6ea296d589bbf941461d452d1afcc6e8feef0b800b8d5e6b5bf070595f9486dd3f7f50c649a93eae2d791c
6
+ metadata.gz: c3863279345f02af5357738b2c54488289259ad7f304da349663892af23f3cbe819a506175d139caf35edfb42d1db511289b89dba0e3fe82dea51baec989611a
7
+ data.tar.gz: 9dcca8e8329dd38534fec6dc95e88bae6e1cc3ad601f9983bc52c47484f4526c99bca64b450a88230f8ac330656b377edf24a8b9cd8238b09256697acbd7adb6
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -16,12 +16,11 @@
16
16
  module IRCParser
17
17
 
18
18
  # Public: The version of IRCParser in use.
19
- VERSION = '0.6.1'
19
+ VERSION = '0.6.2'
20
20
  end
21
21
 
22
22
  require_relative 'ircparser/error'
23
23
  require_relative 'ircparser/message'
24
24
  require_relative 'ircparser/prefix'
25
25
  require_relative 'ircparser/stream'
26
- require_relative 'ircparser/wire/json'
27
26
  require_relative 'ircparser/wire/rfc'
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -28,14 +28,14 @@ describe IRCParser::Message do
28
28
  tags = { 'tag1' => 'value1', 'tag2' => nil, 'vendor1/tag3' => 'value2', 'vendor2/tag4' => nil }
29
29
  parameters = [ 'param1', 'param2', 'param3 param3' ]
30
30
 
31
- @message.tags.must_equal tags
32
- @message.prefix.wont_be_nil
33
- @message.prefix.nick.must_equal 'irc.example.com'
34
- @message.command.must_equal 'COMMAND'
35
- @message.parameters.must_equal parameters
31
+ _(@message.tags).must_equal tags
32
+ _(@message.prefix).wont_be_nil
33
+ _(@message.prefix.nick).must_equal 'irc.example.com'
34
+ _(@message.command).must_equal 'COMMAND'
35
+ _(@message.parameters).must_equal parameters
36
36
  end
37
37
  it 'should serialise back to the same text' do
38
- @message.to_s.must_equal @text
38
+ _(@message.to_s).must_equal @text
39
39
  end
40
40
  end
41
41
 
@@ -47,14 +47,14 @@ describe IRCParser::Message do
47
47
  it 'should consist of the correct components' do
48
48
  parameters = [ 'param1', 'param2', 'param3 param3' ]
49
49
 
50
- @message.tags.must_be_empty
51
- @message.prefix.wont_be_nil
52
- @message.prefix.nick.must_equal 'irc.example.com'
53
- @message.command.must_equal 'COMMAND'
54
- @message.parameters.must_equal parameters
50
+ _(@message.tags).must_be_empty
51
+ _(@message.prefix).wont_be_nil
52
+ _(@message.prefix.nick).must_equal 'irc.example.com'
53
+ _(@message.command).must_equal 'COMMAND'
54
+ _(@message.parameters).must_equal parameters
55
55
  end
56
56
  it 'should serialise back to the same text' do
57
- @message.to_s.must_equal @text
57
+ _(@message.to_s).must_equal @text
58
58
  end
59
59
  end
60
60
 
@@ -67,13 +67,13 @@ describe IRCParser::Message do
67
67
  tags = { 'tag1' => 'value1', 'tag2' => nil, 'vendor1/tag3' => 'value2', 'vendor2/tag4' => nil }
68
68
  parameters = [ 'param1', 'param2', 'param3 param3' ]
69
69
 
70
- @message.tags.must_equal tags
71
- @message.prefix.must_be_nil
72
- @message.command.must_equal 'COMMAND'
73
- @message.parameters.must_equal parameters
70
+ _(@message.tags).must_equal tags
71
+ _(@message.prefix).must_be_nil
72
+ _(@message.command).must_equal 'COMMAND'
73
+ _(@message.parameters).must_equal parameters
74
74
  end
75
75
  it 'should serialise back to the same text' do
76
- @message.to_s.must_equal @text
76
+ _(@message.to_s).must_equal @text
77
77
  end
78
78
  end
79
79
 
@@ -86,13 +86,13 @@ describe IRCParser::Message do
86
86
  tags = { 'tag1' => 'value1', 'tag2' => nil, 'vendor1/tag3' => 'value2', 'vendor2/tag4' => nil }
87
87
  parameters = [ 'param1', 'param2', 'param3 param3' ]
88
88
 
89
- @message.tags.must_equal tags
90
- @message.prefix.must_be_nil
91
- @message.command.must_equal 'COMMAND'
92
- @message.parameters.must_equal parameters
89
+ _(@message.tags).must_equal tags
90
+ _(@message.prefix).must_be_nil
91
+ _(@message.command).must_equal 'COMMAND'
92
+ _(@message.parameters).must_equal parameters
93
93
  end
94
94
  it 'should serialise back to the same text' do
95
- @message.to_s.must_equal @text
95
+ _(@message.to_s).must_equal @text
96
96
  end
97
97
  end
98
98
 
@@ -103,13 +103,13 @@ describe IRCParser::Message do
103
103
  @message = IRCParser::Message.parse @text
104
104
  end
105
105
  it 'should consist of the correct components' do
106
- @message.tags.must_be_empty
107
- @message.prefix.must_be_nil
108
- @message.command.must_equal 'COMMAND'
109
- @message.parameters.must_be_empty
106
+ _(@message.tags).must_be_empty
107
+ _(@message.prefix).must_be_nil
108
+ _(@message.command).must_equal 'COMMAND'
109
+ _(@message.parameters).must_be_empty
110
110
  end
111
111
  it 'should serialise back to the same text' do
112
- @message.to_s.must_equal @text
112
+ _(@message.to_s).must_equal @text
113
113
  end
114
114
  end
115
115
 
@@ -122,11 +122,11 @@ describe IRCParser::Message do
122
122
  it 'should escape correctly' do
123
123
  tags = { 'foo' => @unescaped }
124
124
  message = IRCParser::Message.new command: 'COMMAND', tags: tags
125
- message.to_s.must_equal @text
125
+ _(message.to_s).must_equal @text
126
126
  end
127
127
  it 'should unescape correctly' do
128
128
  message = IRCParser::Message.parse @text
129
- message.tags['foo'].must_equal @unescaped
129
+ _(message.tags['foo']).must_equal @unescaped
130
130
  end
131
131
  end
132
132
 
@@ -136,11 +136,11 @@ describe IRCParser::Message do
136
136
  @message = IRCParser::Message.parse @text
137
137
  end
138
138
  it 'should parse the trailing parameter properly' do
139
- @message.parameters.size.must_equal 1
140
- @message.parameters[0].must_equal 'param1 param1 '
139
+ _(@message.parameters.size).must_equal 1
140
+ _(@message.parameters[0]).must_equal 'param1 param1 '
141
141
  end
142
142
  it 'should serialize the trailing parameter properly' do
143
- @message.to_s.must_equal @text
143
+ _(@message.to_s).must_equal @text
144
144
  end
145
145
  end
146
146
 
@@ -150,8 +150,8 @@ describe IRCParser::Message do
150
150
  @message = IRCParser::Message.parse @text
151
151
  end
152
152
  it 'should parse the message properly' do
153
- @message.command.must_equal 'COMMAND'
154
- @message.parameters.size.must_equal 0
153
+ _(@message.command).must_equal 'COMMAND'
154
+ _(@message.parameters.size).must_equal 0
155
155
  end
156
156
  end
157
157
 
@@ -161,8 +161,8 @@ describe IRCParser::Message do
161
161
  @message = IRCParser::Message.parse @text
162
162
  end
163
163
  it 'should parse the message properly' do
164
- @message.command.must_equal 'COMMAND'
165
- @message.parameters.size.must_equal 0
164
+ _(@message.command).must_equal 'COMMAND'
165
+ _(@message.parameters.size).must_equal 0
166
166
  end
167
167
  end
168
168
 
@@ -172,12 +172,12 @@ describe IRCParser::Message do
172
172
  @message = IRCParser::Message.parse @text
173
173
  end
174
174
  it 'should parse the trailing parameter properly' do
175
- @message.command.must_equal 'COMMAND'
176
- @message.parameters.size.must_equal 1
177
- @message.parameters[0].must_equal ''
175
+ _(@message.command).must_equal 'COMMAND'
176
+ _(@message.parameters.size).must_equal 1
177
+ _(@message.parameters[0]).must_equal ''
178
178
  end
179
179
  it 'should serialize the trailing parameter properly' do
180
- @message.to_s.must_equal @text
180
+ _(@message.to_s).must_equal @text
181
181
  end
182
182
  end
183
183
 
@@ -187,10 +187,10 @@ describe IRCParser::Message do
187
187
  @message = IRCParser::Message.parse @text
188
188
  end
189
189
  it 'should strip invalid and trailing escapes' do
190
- @message.tags['foo'].must_equal 'wibbleZwobble'
190
+ _(@message.tags['foo']).must_equal 'wibbleZwobble'
191
191
  end
192
192
  it 'should serialise back to a well formed value' do
193
- @message.to_s.must_equal '@foo=wibbleZwobble COMMAND'
193
+ _(@message.to_s).must_equal '@foo=wibbleZwobble COMMAND'
194
194
  end
195
195
  end
196
196
 
@@ -202,44 +202,44 @@ describe IRCParser::Message do
202
202
  @message = IRCParser::Message.new tags: @tags, command: 'COMMAND'
203
203
  end
204
204
  it 'should serialise without creating malformed tags' do
205
- @message.to_s.must_equal '@foo=wibble\\\\Zwobble\\\\ COMMAND'
205
+ _(@message.to_s).must_equal '@foo=wibble\\\\Zwobble\\\\ COMMAND'
206
206
  end
207
207
  end
208
208
 
209
209
  describe 'when checking we can handle serialising malformed parameters' do
210
210
  it 'should throw an IRCParser::Error when a non <trailing> parameter contains spaces' do
211
- proc {
211
+ _(proc {
212
212
  message = IRCParser::Message.new command: 'COMMAND', parameters: [ 'param1 param1', 'param2' ]
213
213
  message.to_s
214
- }.must_raise IRCParser::Error
214
+ }).must_raise IRCParser::Error
215
215
  end
216
216
  end
217
217
 
218
218
  describe 'when checking we handle parsing malformed messages properly' do
219
219
  it 'should throw an IRCParser::Error when trying to parse an empty message' do
220
- proc {
220
+ _(proc {
221
221
  IRCParser::Message.parse ''
222
- }.must_raise IRCParser::Error
222
+ }).must_raise IRCParser::Error
223
223
  end
224
224
  it 'should throw an IRCParser::Error when trying to parse an whitespace message' do
225
- proc {
225
+ _(proc {
226
226
  IRCParser::Message.parse ' '
227
- }.must_raise IRCParser::Error
227
+ }).must_raise IRCParser::Error
228
228
  end
229
229
  it 'should throw an IRCParser::Error when trying to parse a message with tags and a prefix but no command' do
230
- proc {
230
+ _(proc {
231
231
  IRCParser::Message.parse '@foo;bar=baz :irc.example.com'
232
- }.must_raise IRCParser::Error
232
+ }).must_raise IRCParser::Error
233
233
  end
234
234
  it 'should throw an IRCParser::Error when trying to parse a message with tags but no command' do
235
- proc {
235
+ _(proc {
236
236
  IRCParser::Message.parse '@foo;bar=baz'
237
- }.must_raise IRCParser::Error
237
+ }).must_raise IRCParser::Error
238
238
  end
239
239
  it 'should throw an IRCParser::Error when trying to parse a message with a prefix but no command' do
240
- proc {
240
+ _(proc {
241
241
  IRCParser::Message.parse ':irc.example.com'
242
- }.must_raise IRCParser::Error
242
+ }).must_raise IRCParser::Error
243
243
  end
244
244
  end
245
245
  end
@@ -1,6 +1,6 @@
1
1
  # IRCParser - Internet Relay Chat Message Parser
2
2
  #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
3
+ # Copyright (C) 2015-2020 Sadie Powell <sadie@witchery.services>
4
4
  #
5
5
  # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
6
  # fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -56,14 +56,14 @@ describe IRCParser::Prefix do
56
56
  it 'should consist of the correct components' do
57
57
  %i(nick user host).each do |component|
58
58
  if deserialized[component].nil?
59
- @message.prefix.send(component).must_be_nil
59
+ _(@message.prefix.send(component)).must_be_nil
60
60
  else
61
- @message.prefix.send(component).must_equal deserialized[component]
61
+ _(@message.prefix.send(component)).must_equal deserialized[component]
62
62
  end
63
63
  end
64
64
  end
65
65
  it 'should serialise back to the same text' do
66
- @message.to_s.must_equal @text
66
+ _(@message.to_s).must_equal @text
67
67
  end
68
68
  end
69
69
  end
@@ -80,9 +80,9 @@ describe IRCParser::Prefix do
80
80
  MALFORMED.each do |prefix|
81
81
  describe 'when checking an invalid user prefix' do
82
82
  it 'should throw an IRCParser::Error when components are missing' do
83
- proc {
83
+ _(proc {
84
84
  IRCParser::Message.parse ":#{prefix} COMMAND"
85
- }.must_raise IRCParser::Error
85
+ }).must_raise IRCParser::Error
86
86
  end
87
87
  end
88
88
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ircparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
- - Peter "SaberUK" Powell
7
+ - Sadie Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-04 00:00:00.000000000 Z
11
+ date: 2019-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -16,34 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.10'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 5.10.1
19
+ version: '5.13'
23
20
  type: :development
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '5.10'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 5.10.1
26
+ version: '5.13'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: rake
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '12.0'
33
+ version: 13.0.1
40
34
  type: :development
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '12.0'
40
+ version: 13.0.1
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: tomdoc
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +53,7 @@ dependencies:
59
53
  - !ruby/object:Gem::Version
60
54
  version: 0.2.5
61
55
  description: A standards compliant parser for the IRCv3 message format.
62
- email: petpow@saberuk.com
56
+ email: sadie@witchery.services
63
57
  executables: []
64
58
  extensions: []
65
59
  extra_rdoc_files: []
@@ -69,11 +63,10 @@ files:
69
63
  - lib/ircparser/message.rb
70
64
  - lib/ircparser/prefix.rb
71
65
  - lib/ircparser/stream.rb
72
- - lib/ircparser/wire/json.rb
73
66
  - lib/ircparser/wire/rfc.rb
74
67
  - test/test_message.rb
75
68
  - test/test_prefix.rb
76
- homepage: https://github.com/SaberUK/ircparser-ruby
69
+ homepage: https://github.com/SadieCat/ircparser-ruby
77
70
  licenses:
78
71
  - ISC
79
72
  metadata: {}
@@ -92,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
85
  - !ruby/object:Gem::Version
93
86
  version: '0'
94
87
  requirements: []
95
- rubygems_version: 3.0.1
88
+ rubygems_version: 3.1.2
96
89
  signing_key:
97
90
  specification_version: 4
98
91
  summary: An IRCv3 message parser.
@@ -1,265 +0,0 @@
1
- # IRCParser - Internet Relay Chat Message Parser
2
- #
3
- # Copyright (C) 2015-2019 Peter "SaberUK" Powell <petpow@saberuk.com>
4
- #
5
- # Permission to use, copy, modify, and/or distribute this software for any purpose with or without
6
- # fee is hereby granted, provided that the above copyright notice and this permission notice appear
7
- # in all copies.
8
- #
9
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
10
- # SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
11
- # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
- # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
13
- # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
14
- # OF THIS SOFTWARE.
15
-
16
- require 'json'
17
-
18
- module IRCParser
19
-
20
- # Internal: Implements objectification and stringification for the JSON wire format.
21
- module JSONWireFormat
22
-
23
- # Internal: Objectifies a message from the JSON wire format to an IRCParser::Message.
24
- #
25
- # str - A String containing a message in the JSON wire format.
26
- def self.objectify str
27
-
28
- # Ruby really needs some kind of basic type checking.
29
- unless str.is_a? String
30
- raise IRCParser::Error.new(str), "message is not a String"
31
- end
32
-
33
- # Parse and validate the JSON object.
34
- message = JSON.parse str.lstrip, max_nesting: 6 rescue nil
35
- unless message.is_a? Hash
36
- raise IRCParser::Error.new(str), 'message is not a JSON object'
37
- end
38
-
39
- { tags: Hash.new, parameters: Array.new }
40
-
41
- # Have we encountered IRCv3 message tags?
42
- components = Hash.new
43
- components[:tags] = if message.include? 'tags'
44
- raise IRCParser::Error.new(str), 'message tags are not a JSON object' unless message[:tags].is_a? Hash
45
- message[:tags]
46
- else
47
- Hash.new
48
- end
49
-
50
- components[:prefix] = if message.include? 'source'
51
-
52
- end
53
-
54
- if current_token != nil && current_token[0] == '@'
55
- components[:tags] = self.__objectify_tags current_token
56
- current_token = self.__get_token message
57
- end
58
-
59
- # Have we encountered the prefix of this message?
60
- if current_token != nil && current_token[0] == ':'
61
- components[:prefix] = self.__objectify_prefix current_token
62
- current_token = self.__get_token message
63
- end
64
-
65
- # The command parameter is mandatory.
66
- if current_token != nil
67
- components[:command] = current_token.upcase
68
- current_token = self.__get_final_token message
69
- else
70
- raise IRCParser::Error.new(str), 'message is missing the command name'
71
- end
72
-
73
- # Try to parse all of the remaining parameters.
74
- components[:parameters] = Array.new
75
- while current_token != nil
76
- components[:parameters] << current_token
77
- current_token = self.__get_final_token message
78
- end
79
-
80
- return IRCParser::Message.new components
81
- end
82
-
83
- # Internal: Stringifies a message from an IRCParser::Message to the JSON wire format.
84
- #
85
- # obj - An IRCParser::Message to stringify to the JSON wire format.
86
- def self.stringify obj
87
-
88
- # Ruby really needs some kind of basic type checking.
89
- unless obj.is_a? IRCParser::Message
90
- raise IRCParser::Error.new(obj), "message is not an IRCParser::Message"
91
- end
92
-
93
- # Stringify the tags.
94
- buffer = String.new
95
- unless obj.tags.empty?
96
- buffer += '@'
97
- buffer += self.__stringify_tags obj.tags
98
- buffer += ' '
99
- end
100
-
101
- # Stringify the prefix.
102
- unless obj.prefix.nil?
103
- buffer += ':'
104
- buffer += self.__stringify_prefix obj.prefix
105
- buffer += ' '
106
- end
107
-
108
- # Stringify the command.
109
- buffer += obj.command
110
-
111
- # Stringify the parameters
112
- buffer += self.__stringify_parameters obj.parameters
113
-
114
- # We're done!
115
- return buffer
116
- end
117
-
118
- private
119
-
120
- # Internal: A regular expression which matches a n!u@h mask.
121
- MATCH_PREFIX = /^:(?<nick>[^@!]+) (?:!(?<user>[^@]+))? (?:@(?<host>.+))?$/x
122
-
123
- # Internal: A regular expression which matches a tag.
124
- MATCH_TAG = /^(?<name>[^\s=]+?)(?:=(?<value>[^\s;]+))?$/
125
-
126
- # Internal: The characters which need to be escaped in tag values.
127
- TAG_ESCAPES = {
128
- '\\\\' => '\\',
129
- '\:' => ';',
130
- '\s' => "\s",
131
- '\r' => "\r",
132
- '\n' => "\n",
133
- }
134
-
135
- # Internal: Retrieves a space delimited token from the buffer.
136
- #
137
- # buffer - The buffer to retrieve the token from.
138
- def self.__get_token buffer
139
- return nil if buffer.empty?
140
- position = buffer.index ' '
141
- if position == nil
142
- token = buffer.clone
143
- buffer.clear
144
- return token
145
- end
146
- token = buffer.slice! 0...position
147
- position = buffer.index /\S+/
148
- if position == nil
149
- buffer.clear
150
- else
151
- buffer.slice! 0...position
152
- end
153
- return token
154
- end
155
-
156
- # Internal: Retrieves a space delimited token that may be a <trailing> parameter.
157
- #
158
- # buffer - The buffer to retrieve the token from.
159
- def self.__get_final_token buffer
160
- return nil if buffer.empty?
161
- if buffer[0] == ':'
162
- token = buffer[1..-1]
163
- buffer.clear
164
- return token
165
- end
166
- return self.__get_token buffer
167
- end
168
-
169
- # Internal: Objectifies the prefix from the JSON wire format to an IRCParser::Prefix.
170
- #
171
- # token - A String containing the prefix in the JSON wire format.
172
- def self.__objectify_prefix prefix
173
- unless MATCH_PREFIX =~ prefix
174
- raise IRCParser::Error.new(prefix), 'prefix is not a user mask or server name'
175
- end
176
- return IRCParser::Prefix.new nick: $~[:nick], user: $~[:user], host: $~[:host]
177
- end
178
-
179
- # Internal: Objectifies tags from the JSON wire format to a Hash.
180
- #
181
- # token - A String containing tags in the JSON wire format.
182
- def self.__objectify_tags token
183
- tags = Hash.new
184
- token[1..-1].split(';').each do |tag|
185
- if tag =~ MATCH_TAG
186
- value = nil
187
- value_index = 0
188
- while $~['value'] != nil && value_index < $~['value'].size
189
- value ||= String.new
190
- if $~['value'][value_index] == '\\'
191
- escape = $~['value'].slice(value_index, 2)
192
- if TAG_ESCAPES.include? escape
193
- value += TAG_ESCAPES[escape]
194
- value_index += 1
195
- end
196
- else
197
- value += $~['value'][value_index]
198
- end
199
- value_index += 1
200
- end
201
- tags[$~['name']] = value
202
- else
203
- raise IRCParser::Error.new(tag), 'tag is malformed'
204
- end
205
- end
206
- return tags
207
- end
208
-
209
- # Internal: Stringifies parameters from an Array to the JSON wire format.
210
- #
211
- # parameters - An Array to stringify to the JSON wire format.
212
- def self.__stringify_parameters parameters
213
- buffer = String.new
214
- parameters.each_with_index do |parameter, index|
215
- trailing = parameter.include? ' '
216
- if trailing && index != parameters.size-1
217
- raise IRCParser::Error.new(parameter), 'only the last parameter may contain spaces'
218
- end
219
-
220
- buffer += ' '
221
- if trailing || parameter.empty?
222
- buffer += ':'
223
- buffer += parameter
224
- break
225
- end
226
- buffer += parameter
227
- end
228
- return buffer
229
- end
230
-
231
- # Internal: Stringifies the prefix from an IRCParser::Prefix to the JSON wire format.
232
- #
233
- # tags - An IRCParser::Prefix to stringify to the JSON wire format.
234
- def self.__stringify_prefix prefix
235
- buffer = prefix.nick
236
- buffer += "!#{prefix.user}" unless prefix.user.nil?
237
- buffer += "@#{prefix.host}" unless prefix.host.nil?
238
- return buffer
239
- end
240
-
241
- # Internal: Stringifies tags from a Hash to the JSON wire format.
242
- #
243
- # tags - A Hash of tags to stringify to the JSON wire format.
244
- def self.__stringify_tags tags
245
- buffer = String.new
246
- tags.each.with_index do |tag, idx|
247
- key, value = tag
248
- buffer += key
249
- unless value.nil?
250
- buffer += '='
251
- value.each_char do |chr|
252
- if TAG_ESCAPES.has_value? chr
253
- buffer += TAG_ESCAPES.key chr
254
- else
255
- buffer += chr
256
- end
257
- end
258
- end
259
- buffer += ';' if idx < tags.size - 1
260
- end
261
- return buffer
262
- end
263
-
264
- end
265
- end