rslp 0.0.1 → 0.0.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: ef8e7db15adf1f9e15979f07caecad8051e01084a4aeb215351adfcc97eb7335
4
- data.tar.gz: 208805a618c7b3b278513fd7bb8fa7945e3b3b61ef4f8696eeb565eb1008c04f
3
+ metadata.gz: 3f495c04e7aa0fa38ebead86d3100b360d13de94d02ee3fc2f54bc41eb5b087c
4
+ data.tar.gz: 88a33d40ab0aa9e71048c73c765a250c60d559eda2619f483c1800bec48d4ba7
5
5
  SHA512:
6
- metadata.gz: dd5c483bb96f5866adcf971a86551f441a3ed2046fc1a7b245ccfbda979cbccd5bee7525deafdf98a5244c8c7f3c20012b0c1a99f1aa339ee756d1749f91675d
7
- data.tar.gz: 1c4293e328733ecc6dbbfcf92574ac8c671fe7f31eb1458643c03b8975125ce57ef967543fcb53a92677e8c0001103644b47036e1fb47d98faef53d76eeb5897
6
+ metadata.gz: bf1356f4e184640cf4b8f13198dca65469cf653228b1a9679dfce3da82ab0de9f236f81d85e01d3b11d3fd27e8dd472345a09aebf9111df207dc233c27acecb4
7
+ data.tar.gz: f67b5df2e8b5c6849b9fe826bee87b594bd4dcc351da1c640b0f3a637c106875e6160097f4e3a783abdfa9896df18b4813294dba6e94a81c914daebeb3d36f24
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGES.md CHANGED
@@ -1,2 +1,11 @@
1
+ ## 0.0.2 - 12-Oct-2022
2
+ * Fixed the parse_service_url singleton method. The underlying SLPSrvURL
3
+ struct is now a managed struct.
4
+ * Added some nicer method aliases to the SLPSrvURL struct.
5
+ * Refactored the underlying C function wrappers to return an SLPError enum
6
+ to more closely align with the API.
7
+ * Any internal function failures now raise an OpenSLP::SLP::Error instead
8
+ of a SystemCallError. The error message has also been improved.
9
+
1
10
  ## 0.0.1 - 2-Jul-2021
2
11
  * Initial release
data/Gemfile CHANGED
@@ -1,3 +1,2 @@
1
- source 'https://rubygems.org' do
2
- gemspec
3
- end
1
+ source 'https://rubygems.org'
2
+ gemspec
data/README.md CHANGED
@@ -4,14 +4,18 @@ A Ruby wrapper for OpenSLP using FFI.
4
4
  ## Installation
5
5
  `gem install rslp`
6
6
 
7
+ ## Adding the trusted cert
8
+ `gem cert --add <(curl -Ls https://raw.githubusercontent.com/djberg96/rslp/main/certs/djberg96_pub.pem)`
9
+
7
10
  ## Synopsis
8
11
  ```ruby
9
12
  require 'rslp'
10
13
 
14
+ # See docs for more methods
11
15
  OpenSLP::SLP.new do |slp|
12
- # See docs for more methods
13
- p slp.find_services
16
+ p slp.find_services('myservice:myorg')
14
17
  p slp.find_scopes
18
+ p slp.find_service_types
15
19
  end
16
20
  ```
17
21
 
@@ -25,18 +29,19 @@ None at this time.
25
29
 
26
30
  ## Maintenance
27
31
  Please contact me about taking over maintenance of this library if you are
28
- interested. I'm not actually using it myself, and have no real plans to update
29
- it.
32
+ interested. I'm not actually using it myself, so maintenance and releases
33
+ will be sporadic at best.
30
34
 
31
35
  Why then? I originally wrote most of this when I thought we might need it
32
36
  for a project at work. That never materialized, but I hated to let it go to
33
- waste, so I've published what I completed.
37
+ waste, so I've published what I completed and may occasionally tinker with
38
+ it from time to time.
34
39
 
35
40
  ## License
36
41
  Apache-2.0
37
42
 
38
43
  ## Copyright
39
- (C) 2003-2021 Daniel J. Berger, All Rights Reserved
44
+ (C) 2003-2022 Daniel J. Berger, All Rights Reserved
40
45
 
41
46
  ## Warranty
42
47
  This package is provided "as is" and without any express or
data/lib/rslp.rb CHANGED
@@ -11,7 +11,10 @@ module OpenSLP
11
11
  extend OpenSLP::Functions
12
12
 
13
13
  # The version of the rslp library.
14
- VERSION = '0.0.1'.freeze
14
+ VERSION = '0.0.2'.freeze
15
+
16
+ # Internal error raised whenever an openslp function fails.
17
+ class Error < StandardError; end
15
18
 
16
19
  # The language tag for requests.
17
20
  attr_reader :lang
@@ -27,7 +30,7 @@ module OpenSLP
27
30
  # machine's locale.
28
31
  #
29
32
  # The +async+ argument may be set to true or false and establishes whether
30
- # the underlying handle is set to handl asynchronous operations or not. By
33
+ # the underlying handle is set to handle asynchronous operations or not. By
31
34
  # default this value is false.
32
35
  #
33
36
  # If a block is given, then the object itself is yielded to the block, and
@@ -49,9 +52,8 @@ module OpenSLP
49
52
 
50
53
  ptr = FFI::MemoryPointer.new(:ulong)
51
54
 
52
- if SLPOpen(lang, async, ptr) != SLP_OK
53
- raise SystemCallError.new('SLPOpen', FFI.errno)
54
- end
55
+ result = SLPOpen(lang, async, ptr)
56
+ raise Error, "SLPOpen(): #{result}" if result != :SLP_OK
55
57
 
56
58
  @handle = ptr.read_ulong
57
59
 
@@ -96,20 +98,24 @@ module OpenSLP
96
98
  attributes = ""
97
99
  end
98
100
 
99
- cookie = FFI::MemoryPointer.new(:void)
100
-
101
- result = SLPReg(
102
- @handle,
103
- options[:url],
104
- options[:lifetime],
105
- nil,
106
- attributes,
107
- options[:fresh],
108
- options[:callback],
109
- cookie
110
- )
111
-
112
- raise SystemCallError.new('SLPReg', result) if result != SLP_OK
101
+ begin
102
+ cookie = FFI::MemoryPointer.new(:void)
103
+
104
+ result = SLPReg(
105
+ @handle,
106
+ options[:url],
107
+ options[:lifetime],
108
+ nil,
109
+ attributes,
110
+ options[:fresh],
111
+ options[:callback],
112
+ cookie
113
+ )
114
+
115
+ raise Error, "SLPReg(): #{result}" if result != :SLP_OK
116
+ ensure
117
+ cookie.free unless cookie.null?
118
+ end
113
119
 
114
120
  options[:url]
115
121
  end
@@ -119,10 +125,14 @@ module OpenSLP
119
125
  #
120
126
  def deregister(url)
121
127
  callback = Proc.new{ |hslp, err, cookie| }
122
- cookie = FFI::MemoryPointer.new(:void)
123
128
 
124
- result = SLPDereg(@handle, url, callback, cookie)
125
- raise SystemCallError.new('SLPDereg', result) if result != SLP_OK
129
+ begin
130
+ cookie = FFI::MemoryPointer.new(:void)
131
+ result = SLPDereg(@handle, url, callback, cookie)
132
+ raise Error, "SLPDereg(): #{result}" if result != :SLP_OK
133
+ ensure
134
+ cookie.free unless cookie.null?
135
+ end
126
136
 
127
137
  true
128
138
  end
@@ -135,10 +145,14 @@ module OpenSLP
135
145
  #
136
146
  def delete_service_attributes(url, attributes)
137
147
  callback = Proc.new{ |hslp, err, cookie| }
138
- cookie = FFI::MemoryPointer.new(:void)
139
148
 
140
- result = SLPDelAttrs(@handle, url, attributes, callback, cookie)
141
- raise SystemCallError.new('SLPDelAttrs', result) if result != SLP_OK
149
+ begin
150
+ cookie = FFI::MemoryPointer.new(:void)
151
+ result = SLPDelAttrs(@handle, url, attributes, callback, cookie)
152
+ raise Error, "SLPDelAttrs(): #{result}" if result != :SLP_OK
153
+ ensure
154
+ cookie.free unless cookie.null?
155
+ end
142
156
 
143
157
  attributes
144
158
  end
@@ -150,16 +164,13 @@ module OpenSLP
150
164
  begin
151
165
  pptr = FFI::MemoryPointer.new(:pointer, 128)
152
166
 
153
- rv = SLPFindScopes(@handle, pptr)
154
-
155
- if rv != SLP_OK
156
- raise SystemCallError.new('SLPFindScopes', rv)
157
- end
167
+ result = SLPFindScopes(@handle, pptr)
168
+ raise Error, "SLPFindScopes(): #{result}" if result != :SLP_OK
158
169
 
159
170
  arr = pptr.read_array_of_string
160
171
  ensure
161
172
  SLPFree(pptr.read_pointer)
162
- pptr.free
173
+ pptr.free unless pptr.null?
163
174
  end
164
175
 
165
176
  arr
@@ -189,12 +200,12 @@ module OpenSLP
189
200
  end
190
201
  }
191
202
 
192
- cookie = FFI::MemoryPointer.new(:void)
193
-
194
- rv = SLPFindSrvs(@handle, type, scope, filter, callback, cookie)
195
-
196
- if rv != SLP_OK
197
- raise SystemCallError.new('SLPFindSrvs', rv)
203
+ begin
204
+ cookie = FFI::MemoryPointer.new(:void)
205
+ result = SLPFindSrvs(@handle, type, scope, filter, callback, cookie)
206
+ raise Error, "SLPFindSrvs(): #{result}" if result != :SLP_OK
207
+ ensure
208
+ cookie.free unless cookie.null?
198
209
  end
199
210
 
200
211
  arr
@@ -223,12 +234,12 @@ module OpenSLP
223
234
  end
224
235
  }
225
236
 
226
- cookie = FFI::MemoryPointer.new(:void)
227
-
228
- rv = SLPFindSrvTypes(@handle, auth, scope, callback, cookie)
229
-
230
- if rv != SLP_OK
231
- raise SystemCallError.new('SLPFindSrvs', rv)
237
+ begin
238
+ cookie = FFI::MemoryPointer.new(:void)
239
+ result = SLPFindSrvTypes(@handle, auth, scope, callback, cookie)
240
+ raise Error, "SLPFindSrvs(): #{result}" if result != :SLP_OK
241
+ ensure
242
+ cookie.free unless cookie.null?
232
243
  end
233
244
 
234
245
  arr
@@ -251,12 +262,12 @@ module OpenSLP
251
262
  end
252
263
  }
253
264
 
254
- cookie = FFI::MemoryPointer.new(:void)
255
-
256
- rv = SLPFindAttrs(@handle, url, scope, attrs, callback, cookie)
257
-
258
- if rv != SLP_OK
259
- raise SystemCallError.new('SLPFindSrvs', rv)
265
+ begin
266
+ cookie = FFI::MemoryPointer.new(:void)
267
+ result = SLPFindAttrs(@handle, url, scope, attrs, callback, cookie)
268
+ raise Error, "SLPFindAttrs(): #{result}" if result != :SLP_OK
269
+ ensure
270
+ cookie.free unless cookie.null?
260
271
  end
261
272
 
262
273
  arr
@@ -292,14 +303,13 @@ module OpenSLP
292
303
  begin
293
304
  pptr = FFI::MemoryPointer.new(SLPSrvURL)
294
305
 
295
- if SLPParseSrvURL(url, pptr) != SLP_OK
296
- raise SystemCallError.new('SLPParseSrvURL', FFI.errno)
297
- end
306
+ result = SLPParseSrvURL(url, pptr)
307
+ raise Error, "SLPParseSrvURL(): #{result}" if result != :SLP_OK
298
308
 
299
309
  ptr = pptr.read_pointer
300
310
  struct = SLPSrvURL.new(ptr)
301
311
  ensure
302
- SLPFree(ptr)
312
+ pptr.free unless pptr.null?
303
313
  end
304
314
 
305
315
  struct
@@ -312,9 +322,8 @@ module OpenSLP
312
322
  begin
313
323
  pptr = FFI::MemoryPointer.new(:pointer)
314
324
 
315
- if SLPEscape(string, pptr, istag) != SLP_OK
316
- raise SystemCallError.new('SLPEscape', FFI.errno)
317
- end
325
+ result = SLPEscape(string, pptr, istag)
326
+ raise Error, "SLPEscape(): #{result}" if result != :SLP_OK
318
327
 
319
328
  str = pptr.read_pointer.read_string
320
329
  ensure
@@ -331,9 +340,8 @@ module OpenSLP
331
340
  begin
332
341
  pptr = FFI::MemoryPointer.new(:pointer)
333
342
 
334
- if SLPUnescape(string, pptr, istag) != SLP_OK
335
- raise SystemCallError.new('SLPEscape', FFI.errno)
336
- end
343
+ result = SLPUnescape(string, pptr, istag)
344
+ raise Error, "SLPUnescape(): #{result}" if result != :SLP_OK
337
345
 
338
346
  str = pptr.read_pointer.read_string
339
347
  ensure
data/lib/slp/functions.rb CHANGED
@@ -19,6 +19,29 @@ module OpenSLP
19
19
  end
20
20
  end
21
21
 
22
+ SLPError = enum(
23
+ :SLP_LAST_CALL, 1,
24
+ :SLP_OK, 0,
25
+ :SLP_LANGUAGE_NOT_SUPPORTED, -1,
26
+ :SLP_PARSE_ERROR, -2,
27
+ :SLP_INVALID_REGISTRATION, -3,
28
+ :SLP_SCOPE_NOT_SUPPORTED, -4,
29
+ :SLP_AUTHENTICATION_ABSENT, -6,
30
+ :SLP_AUTHENTICATION_FAILED, -7,
31
+ :SLP_INVALID_UPDATE, -13,
32
+ :SLP_REFRESH_REJECTED, -15,
33
+ :SLP_NOT_IMPLEMENTED, -17,
34
+ :SLP_BUFFER_OVERFLOW, -18,
35
+ :SLP_NETWORK_TIMED_OUT, -19,
36
+ :SLP_NETWORK_INIT_FAILED, -20,
37
+ :SLP_MEMORY_ALLOC_FAILED, -21,
38
+ :SLP_PARAMETER_BAD, -22,
39
+ :SLP_NETWORK_ERROR, -23,
40
+ :SLP_INTERNAL_SYSTEM_ERROR, -24,
41
+ :SLP_HANDLE_IN_USE, -25,
42
+ :SLP_TYPE_ERROR, -26
43
+ )
44
+
22
45
  typedef :ulong, :handle
23
46
 
24
47
  callback :SLPSrvURLCallback, [:handle, :string, :ushort, :int, :pointer], :bool
@@ -27,28 +50,31 @@ module OpenSLP
27
50
  callback :SLPRegReportCallback, [:handle, :int, :pointer], :void
28
51
 
29
52
  attach_function :SLPClose, [:handle], :void
30
- attach_function :SLPEscape, [:string, :pointer, :bool], :int
31
- attach_function :SLPDelAttrs, [:handle, :string, :string, :SLPRegReportCallback, :pointer], :int
32
- attach_function :SLPDereg, [:handle, :string, :SLPRegReportCallback, :pointer], :int
53
+ attach_function :SLPEscape, [:string, :pointer, :bool], SLPError
54
+ attach_function :SLPDelAttrs, [:handle, :string, :string, :SLPRegReportCallback, :pointer], SLPError
55
+ attach_function :SLPDereg, [:handle, :string, :SLPRegReportCallback, :pointer], SLPError
33
56
 
34
57
  attach_function :SLPFindAttrs,
35
- [:handle, :string, :string, :string, :SLPAttrCallback, :pointer], :int
58
+ [:handle, :string, :string, :string, :SLPAttrCallback, :pointer], SLPError
36
59
 
37
- attach_function :SLPFindScopes, [:handle, :pointer], :int
60
+ attach_function :SLPFindScopes, [:handle, :pointer], SLPError
38
61
 
39
62
  attach_function :SLPFindSrvs,
40
- [:handle, :string, :string, :string, :SLPSrvURLCallback, :pointer], :int
63
+ [:handle, :string, :string, :string, :SLPSrvURLCallback, :pointer], SLPError
41
64
 
42
65
  attach_function :SLPFindSrvTypes,
43
- [:handle, :string, :string, :SLPSrvTypeCallback, :pointer], :int
66
+ [:handle, :string, :string, :SLPSrvTypeCallback, :pointer], SLPError
44
67
 
45
68
  attach_function :SLPFree, [:pointer], :void
46
69
  attach_function :SLPGetProperty, [:string], :string
47
70
  attach_function :SLPGetRefreshInterval, [], :uint
48
- attach_function :SLPOpen, [:string, :bool, :pointer], :handle
49
- attach_function :SLPParseSrvURL, [:string, :pointer], :int
50
- attach_function :SLPReg, [:handle, :string, :ushort, :string, :string, :bool, :SLPRegReportCallback, :pointer], :int
71
+ attach_function :SLPOpen, [:string, :bool, :pointer], SLPError
72
+ attach_function :SLPParseSrvURL, [:string, :pointer], SLPError
73
+
74
+ attach_function :SLPReg,
75
+ [:handle, :string, :ushort, :string, :string, :bool, :SLPRegReportCallback, :pointer], SLPError
76
+
51
77
  attach_function :SLPSetProperty, [:string, :string], :void
52
- attach_function :SLPUnescape, [:string, :pointer, :bool], :int
78
+ attach_function :SLPUnescape, [:string, :pointer, :bool], SLPError
53
79
  end
54
80
  end
data/lib/slp/structs.rb CHANGED
@@ -1,8 +1,10 @@
1
- require 'ffi'
1
+ require_relative 'functions'
2
2
 
3
3
  module OpenSLP
4
4
  module Structs
5
- class SLPSrvURL < FFI::Struct
5
+ class SLPSrvURL < FFI::ManagedStruct
6
+ extend OpenSLP::Functions
7
+
6
8
  layout(
7
9
  :s_pcSrvType, :string,
8
10
  :s_pcHost, :string,
@@ -10,6 +12,30 @@ module OpenSLP
10
12
  :s_pcNetFamily, :string,
11
13
  :s_pcSrvPart, :string
12
14
  )
15
+
16
+ def self.release(pointer)
17
+ SLPFree(pointer) unless pointer.null?
18
+ end
19
+
20
+ def service_type
21
+ self[:s_pcSrvType]
22
+ end
23
+
24
+ def host
25
+ self[:s_pcHost]
26
+ end
27
+
28
+ def port
29
+ self[:s_iPort]
30
+ end
31
+
32
+ def net_family
33
+ self[:s_pcNetFamily]
34
+ end
35
+
36
+ def url_remainder
37
+ self[:s_pcSrvPart]
38
+ end
13
39
  end
14
40
  end
15
41
  end
data/rslp.gemspec CHANGED
@@ -3,7 +3,7 @@ require 'rbconfig'
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'rslp'
6
- spec.version = '0.0.1'
6
+ spec.version = '0.0.2'
7
7
  spec.license = 'Apache-2.0'
8
8
  spec.author = 'Daniel J. Berger'
9
9
  spec.email = 'djberg96@gmail.com'
@@ -21,12 +21,13 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency('rspec', "~> 3.9")
22
22
 
23
23
  spec.metadata = {
24
- 'homepage_uri' => 'https://github.com/djberg96/rslp',
25
- 'bug_tracker_uri' => 'https://github.com/djberg96/rslp/issues',
26
- 'changelog_uri' => 'https://github.com/djberg96/rslp/blob/main/CHANGES.md',
27
- 'documentation_uri' => 'https://github.com/djberg96/rslp/wiki',
28
- 'source_code_uri' => 'https://github.com/djberg96/rslp',
29
- 'wiki_uri' => 'https://github.com/djberg96/rslp/wiki'
24
+ 'homepage_uri' => 'https://github.com/djberg96/rslp',
25
+ 'bug_tracker_uri' => 'https://github.com/djberg96/rslp/issues',
26
+ 'changelog_uri' => 'https://github.com/djberg96/rslp/blob/main/CHANGES.md',
27
+ 'documentation_uri' => 'https://github.com/djberg96/rslp/wiki',
28
+ 'source_code_uri' => 'https://github.com/djberg96/rslp',
29
+ 'wiki_uri' => 'https://github.com/djberg96/rslp/wiki',
30
+ 'rubygems_mfa_required' => 'true'
30
31
  }
31
32
 
32
33
  spec.description = <<-EOF
data/spec/rslp_spec.rb CHANGED
@@ -6,25 +6,25 @@
6
6
  require 'rspec'
7
7
  require 'rslp'
8
8
 
9
- describe OpenSLP::SLP do
9
+ RSpec.describe OpenSLP::SLP do
10
10
  before do
11
11
  @lang = 'en-us'
12
- @slp = OpenSLP::SLP.new(@lang, false)
12
+ @slp = described_class.new(@lang, false)
13
13
  end
14
14
 
15
15
  context "version" do
16
16
  example "version is set to the expected value" do
17
- expect(OpenSLP::SLP::VERSION).to eq('0.0.1')
17
+ expect(described_class::VERSION).to eq('0.0.2')
18
18
  end
19
19
  end
20
20
 
21
21
  context "constructor" do
22
22
  example "defaults to an empty string if no lang is provided" do
23
- expect(OpenSLP::SLP.new.lang).to eq('')
23
+ expect(described_class.new.lang).to eq('')
24
24
  end
25
25
 
26
26
  example "defaults to a false async value if no value is provided" do
27
- expect(OpenSLP::SLP.new.async).to be false
27
+ expect(described_class.new.async).to be false
28
28
  end
29
29
 
30
30
  example "sets attributes to expected values" do
@@ -33,38 +33,81 @@ describe OpenSLP::SLP do
33
33
  end
34
34
  end
35
35
 
36
- context "singleton methods" do
37
- example "defines a refresh_interval method" do
38
- expect(OpenSLP::SLP).to respond_to(:refresh_interval)
39
- end
36
+ describe "singleton methods" do
37
+ context "refresh_interval" do
38
+ example "defines a refresh_interval method" do
39
+ expect(described_class).to respond_to(:refresh_interval)
40
+ end
40
41
 
41
- example "returns the expected value for refresh_interval" do
42
- expect(OpenSLP::SLP.refresh_interval).to eq(0)
42
+ example "returns the expected value for refresh_interval" do
43
+ expect(described_class.refresh_interval).to eq(0)
44
+ end
43
45
  end
44
46
 
45
47
  example "defines a get_property method" do
46
- expect(OpenSLP::SLP).to respond_to(:get_property)
48
+ expect(described_class).to respond_to(:get_property)
47
49
  end
48
50
 
49
51
  example "defines a set_property method" do
50
- expect(OpenSLP::SLP).to respond_to(:set_property)
52
+ expect(described_class).to respond_to(:set_property)
51
53
  end
52
54
 
53
- example "defines a parse_service_url method" do
54
- expect(OpenSLP::SLP).to respond_to(:parse_service_url)
55
- end
55
+ context "parse_service_url" do
56
+ let(:valid_url) { "service:test.openslp://192.168.100.1:3003,en,65535" }
57
+
58
+ before do
59
+ @struct = described_class.parse_service_url(valid_url)
60
+ end
61
+
62
+ example "defines a parse_service_url method" do
63
+ expect(described_class).to respond_to(:parse_service_url)
64
+ end
65
+
66
+ example "does not raise an error if the url is valid" do
67
+ expect{ described_class.parse_service_url(valid_url) }.not_to raise_error
68
+ end
69
+
70
+ example "returns a struct with the expected service type" do
71
+ expect(@struct.service_type).to eq("service:test.openslp")
72
+ end
56
73
 
57
- example "defines a escape_reserved method" do
58
- expect(OpenSLP::SLP).to respond_to(:escape_reserved)
74
+ example "returns a struct with the expected host" do
75
+ expect(@struct.host).to eq("192.168.100.1")
76
+ end
77
+
78
+ example "returns a struct with the expected port" do
79
+ expect(@struct.port).to eq(3003)
80
+ end
81
+
82
+ example "returns a struct with the expected net family" do
83
+ expect(@struct.net_family).to eq("")
84
+ end
85
+
86
+ example "returns a struct with the expected url remainder" do
87
+ expect(@struct.url_remainder).to eq("")
88
+ end
59
89
  end
60
90
 
61
- example "returns the expected value for the escape_reserved method" do
62
- expected = "\\2Ctag-example\\2C"
63
- expect(OpenSLP::SLP.escape_reserved(",tag-example,")).to eq(expected)
91
+ context "escape_reserved" do
92
+ example "defines a escape_reserved method" do
93
+ expect(described_class).to respond_to(:escape_reserved)
94
+ end
95
+
96
+ example "returns the expected value for the escape_reserved method" do
97
+ expected = "\\2Ctag-example\\2C"
98
+ expect(described_class.escape_reserved(",tag-example,")).to eq(expected)
99
+ end
64
100
  end
65
101
 
66
- example "defines a unescape_reserved method" do
67
- expect(OpenSLP::SLP).to respond_to(:unescape_reserved)
102
+ context "unescape_reserved" do
103
+ example "defines a unescape_reserved method" do
104
+ expect(described_class).to respond_to(:unescape_reserved)
105
+ end
106
+
107
+ example "returns the expected value for the unescape_reserved method" do
108
+ expected = ",tag-example,"
109
+ expect(described_class.unescape_reserved("\\2Ctag-example\\2C")).to eq(expected)
110
+ end
68
111
  end
69
112
  end
70
113
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rslp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
@@ -35,7 +35,7 @@ cert_chain:
35
35
  ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
36
36
  WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
37
37
  -----END CERTIFICATE-----
38
- date: 2021-07-02 00:00:00.000000000 Z
38
+ date: 2022-10-13 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: ffi
@@ -115,6 +115,7 @@ metadata:
115
115
  documentation_uri: https://github.com/djberg96/rslp/wiki
116
116
  source_code_uri: https://github.com/djberg96/rslp
117
117
  wiki_uri: https://github.com/djberg96/rslp/wiki
118
+ rubygems_mfa_required: 'true'
118
119
  post_install_message:
119
120
  rdoc_options: []
120
121
  require_paths:
@@ -130,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
131
  - !ruby/object:Gem::Version
131
132
  version: '0'
132
133
  requirements: []
133
- rubygems_version: 3.2.15
134
+ rubygems_version: 3.3.16
134
135
  signing_key:
135
136
  specification_version: 4
136
137
  summary: Interface for the OpenSLP library
metadata.gz.sig CHANGED
@@ -1,2 +1,3 @@
1
- "��y��bi� o[Zb�S��D�Y�@P,k���̘�����K
2
- �V��A��/�ɢ�`L��^�4kw`m<D6��2�Rh<ѩ��� ��0���j��c2�k�� ҹ�0uS0�ۃ<��c�44)��cK]kf��dt]C}.;C s����YYX����x���c��?C�
1
+ IhQ����f� �w��m
2
+ ���m�Wb�p��{~������������{P�Z p僖��y��|yF�Ɣ#���J�����/�OmS6٭�?�k+z�Wq#��Ӷ�(Q�Q��9G��3��r�"������GI2>�Qf}P��ؑ�eZZO6IlLh4*Gj����Rϻ�'��Yi�^���I��ETrػ*�j��#/(
3
+ >y���z*