ruby-dbus 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8a530c6d561a17c6179bda15319036a806f1a42b427033e96caccfc738ebf7b
4
- data.tar.gz: 959143cab388b528354cc569c698a8c99dc79bbca1b21dbdcc064e212b8794a2
3
+ metadata.gz: ee629ce8a78d7cd23f718103cfd622d2a5fd67c51dab6b2a88e453c512c608f3
4
+ data.tar.gz: a8995a9526e3b957d32c503de7ad5ef781e5c464925fec8e2107eda4529aa447
5
5
  SHA512:
6
- metadata.gz: 41d4ff1294958f67efac62ae0d1b326728617976ea944f3c3374f7156bf33632e9e072260f002c11ca44b099113d75e5ecc58f67c3d2c9d34666f6abe92bdbb3
7
- data.tar.gz: c93e54662d3cf01a9b0ac0a2e5c70d0efc78da1758349cfe6209cba37fa707b7334503518a7e0b4f53d754aff22d5ff53c2d7f8c2d8c32e6df9b097a1bf0f34b
6
+ metadata.gz: 531e01c12aed4aeedaa5ce55fec2fee0c3da714211adc768c8990d2ce79509e6b925bc06d4308e9628cff109b9880dbea72878e7aeaf23c8e5fb19ddf8a249e2
7
+ data.tar.gz: 6449aa2798ed78d29c430423a92d7c8a921fd4ea244eea11fb8a84ca2eb880a4e6860325dc6a05254dc432b971d4929fc4d3a5057e423939c0574a687e7680f7
data/NEWS.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## Ruby D-Bus 0.17.0 - 2022-02-11
6
+
7
+ API:
8
+ * Export properties with `dbus_attr_accessor`, `dbus_reader` etc. ([#86][]).
9
+
10
+ Bug fixes:
11
+ * Depend on rexml which is separate since Ruby 3.0 ([#87][],
12
+ by Toshiaki Asai).
13
+ Nokogiri is faster but bigger so it remains optional.
14
+ * Fix connection in case ~/.dbus-keyrings has multiple cookies, showing
15
+ as "Oops: undefined method `zero?' for nil:NilClass".
16
+ * Add the missing name to the root introspection node.
17
+
18
+ [#86]: https://github.com/mvidner/ruby-dbus/pull/86
19
+ [#87]: https://github.com/mvidner/ruby-dbus/pull/87
20
+
5
21
  ## Ruby D-Bus 0.16.0 - 2019-10-15
6
22
 
7
23
  API:
data/README.md CHANGED
@@ -11,14 +11,13 @@ Ruby D-Bus is a pure Ruby library for writing clients and services for D-Bus.
11
11
  [![Coverage Status][CS img]][Coverage Status]
12
12
 
13
13
  [Gem Version]: https://rubygems.org/gems/ruby-dbus
14
- [Build Status]: https://travis-ci.org/mvidner/ruby-dbus
15
- [travis pull requests]: https://travis-ci.org/mvidner/ruby-dbus/pull_requests
14
+ [Build Status]: https://github.com/mvidner/ruby-dbus/actions?query=branch%3Amaster
16
15
  [Dependency Status]: https://gemnasium.com/mvidner/ruby-dbus
17
16
  [Code Climate]: https://codeclimate.com/github/mvidner/ruby-dbus
18
17
  [Coverage Status]: https://coveralls.io/r/mvidner/ruby-dbus
19
18
 
20
19
  [GV img]: https://badge.fury.io/rb/ruby-dbus.png
21
- [BS img]: https://travis-ci.org/mvidner/ruby-dbus.png?branch=master
20
+ [BS img]: https://github.com/mvidner/ruby-dbus/workflows/CI/badge.svg?branch=master
22
21
  [DS img]: https://gemnasium.com/mvidner/ruby-dbus.png
23
22
  [CC img]: https://codeclimate.com/github/mvidner/ruby-dbus.png
24
23
  [CS img]: https://coveralls.io/repos/mvidner/ruby-dbus/badge.png?branch=master
@@ -32,7 +31,6 @@ via [UPower](http://upower.freedesktop.org/docs/UPower.html#UPower:OnBattery)
32
31
  sysbus = DBus.system_bus
33
32
  upower_service = sysbus["org.freedesktop.UPower"]
34
33
  upower_object = upower_service["/org/freedesktop/UPower"]
35
- upower_object.introspect
36
34
  upower_interface = upower_object["org.freedesktop.UPower"]
37
35
  on_battery = upower_interface["OnBattery"]
38
36
  if on_battery
@@ -43,7 +41,7 @@ via [UPower](http://upower.freedesktop.org/docs/UPower.html#UPower:OnBattery)
43
41
 
44
42
  ## Requirements
45
43
 
46
- - Ruby 2.0 or newer.
44
+ - Ruby 2.1 or newer.
47
45
 
48
46
 
49
47
  ## Installation
data/Rakefile CHANGED
@@ -9,6 +9,12 @@ begin
9
9
  rescue LoadError
10
10
  nil
11
11
  end
12
+ begin
13
+ require "yard"
14
+ rescue LoadError
15
+ nil
16
+ end
17
+
12
18
  require "packaging"
13
19
 
14
20
  Packaging.configuration do |conf|
@@ -38,12 +44,6 @@ RSpec::Core::RakeTask.new("bare:spec")
38
44
  end
39
45
  end
40
46
 
41
- if ENV["TRAVIS"]
42
- require "coveralls/rake/task"
43
- Coveralls::RakeTask.new
44
- task default: "coveralls:push"
45
- end
46
-
47
47
  # remove tarball implementation and create gem for this gemfile
48
48
  Rake::Task[:tarball].clear
49
49
 
@@ -68,4 +68,22 @@ namespace :doc do
68
68
  end
69
69
  end
70
70
 
71
- RuboCop::RakeTask.new if Object.const_defined? :RuboCop
71
+ if Object.const_defined? :RuboCop
72
+ if RUBY_VERSION.start_with?("2.")
73
+ RuboCop::RakeTask.new
74
+ else
75
+ desc "Run RuboCop (dummy)"
76
+ task :rubocop do
77
+ warn "The code is not adapted to recent RuboCop yet,\n" \
78
+ "and the old one no longer works with Ruby 3.x.\n" \
79
+ "Switch back to Ruby 2.x to run it."
80
+ end
81
+ end
82
+ else
83
+ desc "Run RuboCop (dummy)"
84
+ task :rubocop do
85
+ warn "RuboCop not installed"
86
+ end
87
+ end
88
+
89
+ YARD::Rake::YardocTask.new if Object.const_defined? :YARD
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.16.0
1
+ 0.17.0
data/doc/Reference.md CHANGED
@@ -179,7 +179,7 @@ If the signature expects a Variant
179
179
  ISSUE: using something else than cryptic signatures is even more painful
180
180
  than remembering the signatures!
181
181
 
182
- foo_i["Bar"] = DBus.variant("au", [0, 1, 1, 2, 3, 5, 8])
182
+ `foo_i["Bar"] = DBus.variant("au", [0, 1, 1, 2, 3, 5, 8])`
183
183
 
184
184
  2. Other values are tried to fit one of these:
185
185
  Boolean, Double, Array of Variants, Hash of String keyed Variants,
@@ -244,14 +244,97 @@ When you want to provide a DBus API.
244
244
  (check that client and service side have their counterparts)
245
245
 
246
246
  ### Basic
247
+
247
248
  #### Exporting a Method
249
+
248
250
  ##### Interfaces
251
+
249
252
  ##### Methods
253
+
250
254
  ##### Bus Names
255
+
251
256
  ##### Errors
257
+
252
258
  #### Exporting Properties
259
+
260
+ Similar to plain Ruby attributes, declared with
261
+
262
+ - {https://docs.ruby-lang.org/en/3.1/Module.html#method-i-attr_accessor attr_accessor}
263
+ - {https://docs.ruby-lang.org/en/3.1/Module.html#method-i-attr_reader attr_reader}
264
+ - {https://docs.ruby-lang.org/en/3.1/Module.html#method-i-attr_writer attr_writer}
265
+
266
+ These methods declare the attributes and export them as properties:
267
+
268
+ - {DBus::Object.dbus_attr_accessor}
269
+ - {DBus::Object.dbus_attr_reader}
270
+ - {DBus::Object.dbus_attr_writer}
271
+
272
+ For making properties out of Ruby methods (which are not attributes), use:
273
+
274
+ - {DBus::Object.dbus_accessor}
275
+ - {DBus::Object.dbus_reader}
276
+ - {DBus::Object.dbus_writer}
277
+
278
+ Note that the properties are declared in the Ruby naming convention with
279
+ `snake_case` and D-Bus sees them `CamelCased`. Use the `dbus_name` argument
280
+ for overriding this.
281
+
282
+  
283
+
284
+ class Note < DBus::Object
285
+ dbus_interface "net.vidner.Example.Properties" do
286
+ # A read-write property "Title",
287
+ # with `title` and `title=` accessing @title.
288
+ dbus_attr_accessor :title, DBus::Type::STRING
289
+
290
+ # A read-only property "Author"
291
+ # (type specified via DBus signature)
292
+ # with `author` reading `@author`
293
+ dbus_attr_reader :author, "s"
294
+
295
+ # A read-only property `Clock`
296
+ def clock
297
+ Time.now.to_s
298
+ end
299
+ dbus_reader :clock, "s"
300
+
301
+ # Name mapping: `CreationTime`
302
+ def creation_time
303
+ "1993-01-01 00:00:00 +0100"
304
+ end
305
+ dbus_reader :creation_time, "s"
306
+
307
+ dbus_attr_accessor :book_volume, DBus::Type::VARIANT, dbus_name: "Volume"
308
+ end
309
+
310
+ dbus_interface "net.vidner.Example.Audio" do
311
+ dbus_attr_accessor :speaker_volume, DBus::Type::BYTE, dbus_name: "Volume"
312
+ end
313
+
314
+ # Must assign values because `nil` would crash our connection
315
+ def initialize(opath)
316
+ super
317
+ @title = "Ahem"
318
+ @author = "Martin"
319
+ @book_volume = 1
320
+ @speaker_volume = 11
321
+ end
322
+ end
323
+
324
+ obj = Note.new("/net/vidner/Example/Properties")
325
+
326
+ bus = DBus::SessionBus.instance
327
+ service = bus.request_service("net.vidner.Example")
328
+ service.export(obj)
329
+
330
+ main = DBus::Main.new
331
+ main << bus
332
+ main.run
333
+
253
334
  ### Advanced
335
+
254
336
  #### Inheritance
337
+
255
338
  #### Names
256
339
 
257
340
  Specification Conformance
@@ -4,6 +4,9 @@ if ARGV[0].nil?
4
4
  exit
5
5
  end
6
6
 
7
+ base_url = "https://github.com/mvidner/ruby-dbus/blob/master/"
8
+ base_url += ARGV[0].gsub("../", "")
9
+
7
10
  File.open(ARGV[0]) do |f|
8
11
  title = nil
9
12
  setup = ""
@@ -20,7 +23,9 @@ File.open(ARGV[0]) do |f|
20
23
  setup = example
21
24
  else
22
25
  File.open("#{basename}.rb", "w") do |e|
26
+ anchor = title.downcase.gsub(/ +/, "-")
23
27
  e.write setup
28
+ e.write "# #{base_url}##{anchor}\n"
24
29
  e.write example
25
30
  e.chmod(0o755)
26
31
  end
data/examples/gdbus/gdbus CHANGED
@@ -119,25 +119,26 @@ class DBusUI
119
119
  model = Gtk::ListStore.new(String, String, DBus::Method,
120
120
  DBus::ProxyObjectInterface)
121
121
  @methsigtreeview.model = model
122
- if selected
123
- if (intf = selected[1])
124
- intf.methods.keys.sort.each do |mi|
125
- m = intf.methods[mi]
126
- subiter = model.append
127
- subiter[0] = beautify_method(m)
128
- subiter[1] = "M"
129
- subiter[2] = m
130
- subiter[3] = intf
131
- end
132
- intf.signals.keys.sort.each do |mi|
133
- m = intf.signals[mi]
134
- subiter = model.append
135
- subiter[0] = beautify_method(m)
136
- subiter[1] = "S"
137
- subiter[2] = m
138
- subiter[3] = intf
139
- end
140
- end
122
+ return unless selected
123
+
124
+ intf = selected[1]
125
+ return unless intf
126
+
127
+ intf.methods.keys.sort.each do |mi|
128
+ m = intf.methods[mi]
129
+ subiter = model.append
130
+ subiter[0] = beautify_method(m)
131
+ subiter[1] = "M"
132
+ subiter[2] = m
133
+ subiter[3] = intf
134
+ end
135
+ intf.signals.keys.sort.each do |mi|
136
+ m = intf.signals[mi]
137
+ subiter = model.append
138
+ subiter[0] = beautify_method(m)
139
+ subiter[1] = "S"
140
+ subiter[2] = m
141
+ subiter[3] = intf
141
142
  end
142
143
  end
143
144
 
@@ -14,7 +14,7 @@ player.test_variant(["s", "coucou"])
14
14
  player.on_signal("SomethingJustHappened") do |u, v|
15
15
  puts "SomethingJustHappened: #{u} #{v}"
16
16
  end
17
- player.hello("8=======D", "(_._)")
17
+ player.hello("Hey", "there!")
18
18
  p player["org.ruby.AnotherInterface"].Reverse("Hello world!")
19
19
 
20
20
  main = DBus::Main.new
data/lib/dbus/auth.rb CHANGED
@@ -73,7 +73,7 @@ module DBus
73
73
  path = File.join(ENV["HOME"], ".dbus-keyrings", context)
74
74
  DBus.logger.debug "path: #{path.inspect}"
75
75
  File.foreach(path) do |line|
76
- if line.index(id).zero?
76
+ if line.start_with?(id)
77
77
  # Right line of file, read cookie
78
78
  cookie = line.split(" ")[2].chomp
79
79
  DBus.logger.debug "cookie: #{cookie.inspect}"
@@ -87,14 +87,14 @@ module DBus
87
87
  return response
88
88
  end
89
89
  end
90
+ return if @retries <= 0
91
+
90
92
  # a little rescue magic
91
- unless @retries <= 0
92
- puts "ERROR: Could not auth, will now exit."
93
- puts "ERROR: Unable to locate cookie, retry in 1 second."
94
- @retries -= 1
95
- sleep 1
96
- data(hexdata)
97
- end
93
+ puts "ERROR: Could not auth, will now exit."
94
+ puts "ERROR: Unable to locate cookie, retry in 1 second."
95
+ @retries -= 1
96
+ sleep 1
97
+ data(hexdata)
98
98
  end
99
99
 
100
100
  # encode plain to hex
data/lib/dbus/bus.rb CHANGED
@@ -17,7 +17,7 @@ require "singleton"
17
17
  # Module containing all the D-Bus modules and classes.
18
18
  module DBus
19
19
  # This represents a remote service. It should not be instantiated directly
20
- # Use {Bus#service}
20
+ # Use {Connection#service}
21
21
  class Service
22
22
  # The service name.
23
23
  attr_reader :name
@@ -148,20 +148,22 @@ module DBus
148
148
 
149
149
  # Return an XML string representation of the node.
150
150
  # It is shallow, not recursing into subnodes
151
- def to_xml
151
+ # @param node_opath [String]
152
+ def to_xml(node_opath)
152
153
  xml = '<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
153
154
  "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
154
- <node>
155
155
  '
156
+ xml += "<node name=\"#{node_opath}\">\n"
156
157
  each_pair do |k, _v|
157
- xml += "<node name=\"#{k}\" />"
158
+ xml += " <node name=\"#{k}\" />\n"
158
159
  end
159
160
  if @object
160
161
  @object.intfs.each_pair do |_k, v|
161
- xml += %(<interface name="#{v.name}">\n)
162
+ xml += " <interface name=\"#{v.name}\">\n"
162
163
  v.methods.each_value { |m| xml += m.to_xml }
163
164
  v.signals.each_value { |m| xml += m.to_xml }
164
- xml += "</interface>\n"
165
+ v.properties.each_value { |m| xml += m.to_xml }
166
+ xml += " </interface>\n"
165
167
  end
166
168
  end
167
169
  xml += "</node>"
@@ -532,7 +534,8 @@ module DBus
532
534
  m.member == "Introspect"
533
535
  reply = Message.new(Message::METHOD_RETURN).reply_to(m)
534
536
  reply.sender = @unique_name
535
- reply.add_param(Type::STRING, node.to_xml)
537
+ xml = node.to_xml(m.path)
538
+ reply.add_param(Type::STRING, xml)
536
539
  @message_queue.push(reply)
537
540
  else
538
541
  obj = node.object
@@ -566,6 +569,11 @@ module DBus
566
569
  # @api private
567
570
  # Emit a signal event for the given _service_, object _obj_, interface
568
571
  # _intf_ and signal _sig_ with arguments _args_.
572
+ # @param service [Service]
573
+ # @param obj [DBus::Object]
574
+ # @param intf [Interface]
575
+ # @param sig [Signal]
576
+ # @param args arguments for the signal
569
577
  def emit(service, obj, intf, sig, *args)
570
578
  m = Message.new(DBus::Message::SIGNAL)
571
579
  m.path = obj.path
@@ -668,7 +676,7 @@ module DBus
668
676
  # (for Unix-socket) unix:path=/tmp/my_funky_bus_socket
669
677
  #
670
678
  # you'll need to take care about authentification then, more info here:
671
- # http://github.com/pangdudu/ruby-dbus/blob/master/README.rdoc
679
+ # https://gitlab.com/pangdudu/ruby-dbus/-/blob/master/README.rdoc
672
680
  class RemoteBus < Connection
673
681
  # Get the remote bus.
674
682
  def initialize(socket_name)
@@ -2,7 +2,7 @@
2
2
  # copied from activesupport/core_ext from Rails, MIT license
3
3
  # https://github.com/rails/rails/tree/9794e85351243cac6d4e78adaba634b8e4ecad0a/activesupport/lib/active_support/core_ext
4
4
 
5
- require "dbus/core_ext/module/redefine_method"
5
+ require_relative "../module/redefine_method"
6
6
 
7
7
  class Class
8
8
  # Declare a class-level attribute whose value is inheritable by subclasses.
@@ -26,19 +26,23 @@ module DBus
26
26
  # It also is the local definition of interface exported by the program.
27
27
  # At the client side, see ProxyObjectInterface
28
28
  class Interface
29
- # The name of the interface. String
29
+ # @return [String] The name of the interface.
30
30
  attr_reader :name
31
- # The methods that are part of the interface. Hash: Symbol => DBus::Method
31
+ # @return [Hash{Symbol => DBus::Method}] The methods that are part of the interface.
32
32
  attr_reader :methods
33
- # The signals that are part of the interface. Hash: Symbol => Signal
33
+ # @return [Hash{Symbol => Signal}] The signals that are part of the interface.
34
34
  attr_reader :signals
35
35
 
36
+ # @return [Hash{Symbol => Property}]
37
+ attr_reader :properties
38
+
36
39
  # Creates a new interface with a given _name_.
37
40
  def initialize(name)
38
41
  validate_name(name)
39
42
  @name = name
40
43
  @methods = {}
41
44
  @signals = {}
45
+ @properties = {}
42
46
  end
43
47
 
44
48
  # Validates a service _name_.
@@ -52,23 +56,31 @@ module DBus
52
56
  end
53
57
  end
54
58
 
55
- # Helper method for defining a method _m_.
56
- def define(m)
57
- if m.is_a?(Method)
58
- @methods[m.name.to_sym] = m
59
- elsif m.is_a?(Signal)
60
- @signals[m.name.to_sym] = m
61
- end
59
+ # Add _ie_ as a known {Method}, {Signal} or {Property}
60
+ # @param ie [InterfaceElement]
61
+ def define(ie)
62
+ name = ie.name.to_sym
63
+ category = if ie.is_a?(Method)
64
+ @methods
65
+ elsif ie.is_a?(Signal)
66
+ @signals
67
+ elsif ie.is_a?(Property)
68
+ @properties
69
+ end
70
+ category[name] = ie
62
71
  end
72
+ alias declare define
63
73
  alias << define
64
74
 
65
75
  # Defines a method with name _id_ and a given _prototype_ in the
66
76
  # interface.
77
+ # Better name: declare_method
67
78
  def define_method(id, prototype)
68
79
  m = Method.new(id)
69
80
  m.from_prototype(prototype)
70
81
  define(m)
71
82
  end
83
+ alias declare_method define_method
72
84
  end # class Interface
73
85
 
74
86
  # = A formal parameter has a name and a type
@@ -144,6 +156,7 @@ module DBus
144
156
  end
145
157
 
146
158
  # Add parameter types by parsing the given _prototype_.
159
+ # @param prototype [Prototype]
147
160
  def from_prototype(prototype)
148
161
  prototype.split(/, */).each do |arg|
149
162
  arg = arg.split(" ")
@@ -167,16 +180,16 @@ module DBus
167
180
 
168
181
  # Return an XML string representation of the method interface elment.
169
182
  def to_xml
170
- xml = %(<method name="#{@name}">\n)
183
+ xml = " <method name=\"#{@name}\">\n"
171
184
  @params.each do |param|
172
- name = param.name ? %(name="#{param.name}" ) : ""
173
- xml += %(<arg #{name}direction="in" type="#{param.type}"/>\n)
185
+ name = param.name ? "name=\"#{param.name}\" " : ""
186
+ xml += " <arg #{name}direction=\"in\" type=\"#{param.type}\"/>\n"
174
187
  end
175
188
  @rets.each do |param|
176
- name = param.name ? %(name="#{param.name}" ) : ""
177
- xml += %(<arg #{name}direction="out" type="#{param.type}"/>\n)
189
+ name = param.name ? "name=\"#{param.name}\" " : ""
190
+ xml += " <arg #{name}direction=\"out\" type=\"#{param.type}\"/>\n"
178
191
  end
179
- xml += %(</method>\n)
192
+ xml += " </method>\n"
180
193
  xml
181
194
  end
182
195
  end # class Method
@@ -201,13 +214,49 @@ module DBus
201
214
 
202
215
  # Return an XML string representation of the signal interface elment.
203
216
  def to_xml
204
- xml = %(<signal name="#{@name}">\n)
217
+ xml = " <signal name=\"#{@name}\">\n"
205
218
  @params.each do |param|
206
- name = param.name ? %(name="#{param.name}" ) : ""
207
- xml += %(<arg #{name}type="#{param.type}"/>\n)
219
+ name = param.name ? "name=\"#{param.name}\" " : ""
220
+ xml += " <arg #{name}type=\"#{param.type}\"/>\n"
208
221
  end
209
- xml += %(</signal>\n)
222
+ xml += " </signal>\n"
210
223
  xml
211
224
  end
212
225
  end # class Signal
226
+
227
+ # An (exported) property
228
+ # https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties
229
+ class Property
230
+ # @return [String] The name of the property, for example FooBar.
231
+ attr_reader :name
232
+ attr_reader :type
233
+ # @return [Symbol] :read :write or :readwrite
234
+ attr_reader :access
235
+
236
+ # @return [Symbol] What to call at Ruby side.
237
+ # (Always without the trailing `=`)
238
+ attr_reader :ruby_name
239
+
240
+ def initialize(name, type, access, ruby_name:)
241
+ @name = name
242
+ @type = type
243
+ @access = access
244
+ @ruby_name = ruby_name
245
+ end
246
+
247
+ # @return [Boolean]
248
+ def readable?
249
+ access == :read || access == :readwrite
250
+ end
251
+
252
+ # @return [Boolean]
253
+ def writable?
254
+ access == :write || access == :readwrite
255
+ end
256
+
257
+ # Return introspection XML string representation of the property.
258
+ def to_xml
259
+ " <property type=\"#{@type}\" name=\"#{@name}\" access=\"#{@access}\"/>\n"
260
+ end
261
+ end
213
262
  end # module DBus
data/lib/dbus/marshall.rb CHANGED
@@ -422,7 +422,7 @@ module DBus
422
422
  ["s", value.to_str]
423
423
  elsif value.respond_to? :to_int
424
424
  i = value.to_int
425
- if -2_147_483_648 <= i && i < 2_147_483_648
425
+ if (-2_147_483_648...2_147_483_648).cover?(i)
426
426
  ["i", i]
427
427
  else
428
428
  ["x", i]
@@ -81,22 +81,23 @@ module DBus
81
81
 
82
82
  # Connect to a bus over tcp and initialize the connection.
83
83
  def connect_to_tcp(params)
84
- # check if the path is sufficient
85
- if params.key?("host") && params.key?("port")
84
+ host = params["host"]
85
+ port = params["port"]
86
+ if host && port
86
87
  begin
87
88
  # initialize the tcp socket
88
- @socket = TCPSocket.new(params["host"], params["port"].to_i)
89
+ @socket = TCPSocket.new(host, port.to_i)
89
90
  @socket.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
90
91
  init_connection
91
92
  @is_tcp = true
92
93
  rescue Exception => e
93
94
  puts "Oops:", e
94
- puts "Error: Could not establish connection to: #{@path}, will now exit."
95
+ puts "Error: Could not establish connection to: #{host}:#{port}, will now exit."
95
96
  exit(1) # a little harsh
96
97
  end
97
98
  else
98
99
  # Danger, Will Robinson: the specified "path" is not usable
99
- puts "Error: supplied path: #{@path}, unusable! sorry."
100
+ puts "Error: supplied params: #{@params}, unusable! sorry."
100
101
  end
101
102
  end
102
103