# Ruby D-Bus NEWS

## Unreleased

## Ruby D-Bus 0.23.1 - 2023-10-03

API:
 * Add DBus::Object.dbus_reader_attr_accessor to declare a common use case
   with a single call ([#140][]).
 * BusConnection#request_name defaults to the simple use case: single owner
   without queuing, failing fast; documented the complex use cases.

[#140]: https://github.com/mvidner/ruby-dbus/pull/140

## Ruby D-Bus 0.23.0.beta2 - 2023-06-23

License:
 * clarified to be LGPL-2.1-or-later

API:
 * DBus::Object#object_server replaces @service (which still works) and the short-lived
   @connection
 * ObjectServer#export will raise if the path is already taken by an object
 * ObjectServer#unexport now also accepts an object path
 * Connection#object_server can export objects even without requesting any
   service name ([#49][], in beta1 already).
 * Add PeerConnection for connections without a bus, useful for PulseAudio.
   Fix listening for signals there ([#44][]).
 * Moved from Connection to BusConnection: #unique_name, #proxy, #service.
   Call send_hello in BusConnection#initialize already.

Bug fixes:
 * Fixed a refactoring crasher bug in ProxyService#introspect (oops).
 * Fix crash on #unexport of /child_of_root or even /

[#44]: https://github.com/mvidner/ruby-dbus/issues/44
[#49]: https://github.com/mvidner/ruby-dbus/issues/49

## Ruby D-Bus 0.23.0.beta1 - 2023-06-05

Bug fixes:
 * A service can now have more than one name ([#69][]).
   Connection#request_service is deprecated in favor of Connection#object_server
   and BusConnection#request_name

[#69]: https://github.com/mvidner/ruby-dbus/issues/69

API:
 * Remove Service, splitting it into ProxyService and ObjectServer
 * Split off BusConnection from Connection
 * DBus::Object @service replaced by @connection

## Ruby D-Bus 0.22.1 - 2023-05-17

Bug fixes:
 * Fix OBS building by disabling IPv6 tests, [#134][].

[#134]: https://github.com/mvidner/ruby-dbus/pull/134

## Ruby D-Bus 0.22.0 - 2023-05-08

Features:
 * Enable using nokogiri without rexml (by Dominik Andreas Schorpp, [#132][])

Bug fixes:
 * Respect DBUS_SYSTEM_BUS_ADDRESS environment variable.

Other:
 * For NameRequestError, mention who is the other owner.
 * Session bus autolaunch still does not work, but: don't try launchd except
   on macOS, and improve the error message.
 * examples/gdbus split off to its own repository,
   https://github.com/mvidner/dbus-gui-gtk

[#132]: https://github.com/mvidner/ruby-dbus/pull/132

## Ruby D-Bus 0.21.0 - 2023-04-08

Features:
 * Respect env RUBY_DBUS_ENDIANNESS=B (or =l) for outgoing messages.

Bug fixes:
 * Reduce socket buffer allocations ([#129][]).
 * Message#marshall speedup: don't marshall the body twice.

[#129]: https://github.com/mvidner/ruby-dbus/pull/129

## Ruby D-Bus 0.20.0 - 2023-03-21

Features:
 * For EXTERNAL authentication, try also without the user id, to work with
   containers ([#126][]).
 * Thread safety, as long as the non-main threads only send signals.

[#126]: https://github.com/mvidner/ruby-dbus/issues/126

## Ruby D-Bus 0.19.0 - 2023-01-18

API:
 * Added a ObjectManager mix-in to implement the service-side
   [ObjectManager][objmgr] interface.

Bug fixes:
 * dbus_attr_accessor and friends validate the signature ([#120][]).
 * Declare the Introspectable interface in exported objects([#99][]).
 * Do reply with an error when calling a nonexisting object
   with an existing path prefix([#121][]).

[#120]: https://github.com/mvidner/ruby-dbus/issues/120
[#99]: https://github.com/mvidner/ruby-dbus/issues/99
[#121]: https://github.com/mvidner/ruby-dbus/issues/121
[objmgr]: https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager

## Ruby D-Bus 0.18.1 - 2022-07-13

No changes since 0.18.0.beta8.
Repeating the most important changes since 0.17.0:

API:
 * Introduced DBus::Data classes, use them in Properties.Get,
   Properties.GetAll to return correct types as declared ([#97][]).
 * Introduced Object#dbus_properties_changed to send correctly typed property
   values ([#115][]). Avoid calling PropertiesChanged directly as it will
   guess the types.
 * Service side `emits_changed_signal` to control emission of
   PropertiesChanged: can be assigned within `dbus_interface` or as an option
   when declaring properties ([#117][]).
 * DBus.variant(type, value) is deprecated in favor of
   Data::Variant.new(value, member_type:)
 * Added type factories
   * Type::Array[type]
   * Type::Hash[key_type, value_type]
   * Type::Struct[type1, type2...]

Bug fixes:
 * Fix Object.dbus_reader to work with attr_accessor and automatically produce
   dbus_properties_changed for properties that are read-write at
   implementation side and read-only at D-Bus side ([#96][])
 * Service-side properties: Fix Properties.Get, Properties.GetAll
   to use the specific property signature, not the generic
   Variant ([#97][], [#105][], [#109][]).
 * Client-side properties: When calling Properties.Set in
   ProxyObjectInterface#[]=, use the correct type ([#108][]).
 * Added thorough tests (`spec/data/marshall.yaml`) to detect nearly all
   invalid data at unmarshalling time.

Requirements:
 * Require Ruby 2.4, because of RuboCop 1.0.

## Ruby D-Bus 0.18.0.beta8 - 2022-06-21

Bug fixes:
 * Introduced Object#dbus_properties_changed to send correctly typed property
   values ([#115][]). Avoid calling PropertiesChanged directly as it will
   guess the types.
 * Fix Object.dbus_reader to work with attr_accessor and automatically produce
   dbus_properties_changed for properties that are read-write at
   implementation side and read-only at D-Bus side ([#96][])

[#96]: https://github.com/mvidner/ruby-dbus/issues/96

API:
 * Service side `emits_changed_signal` to control emission of
   PropertiesChanged: can be assigned within `dbus_interface` or as an option
   when declaring properties ([#117][]).

[#115]: https://github.com/mvidner/ruby-dbus/issues/115
[#117]: https://github.com/mvidner/ruby-dbus/pull/117

## Ruby D-Bus 0.18.0.beta7 - 2022-05-29

API:
 * DBus.variant(type, value) is deprecated in favor of
   Data::Variant.new(value, member_type:)

Bug fixes:
 * Client-side properties: When calling Properties.Set in
   ProxyObjectInterface#[]=, use the correct type ([#108][]).

[#108]: https://github.com/mvidner/ruby-dbus/issues/108

## Ruby D-Bus 0.18.0.beta6 - 2022-05-25

API:
 * Data::Base#value returns plain Ruby types;
   Data::Container#exact_value contains Data::Base ([#114][]).
 * Data::Base#initialize and .from_typed allow plain or exact values, validate
   argument types.
 * Implement #== (converting) and #eql? (strict) for Data::Base and DBus::Type.

[#114]: https://github.com/mvidner/ruby-dbus/pull/114

## Ruby D-Bus 0.18.0.beta5 - 2022-04-27

API:
 * DBus::Type instances are frozen.
 * Data::Container classes (Array, Struct, DictEntry, but not Variant)
   constructors (#initialize, .from_items, .from_typed) changed to have
   a *type* argument instead of *member_type* or *member_types*.
 * Added type factories
   * Type::Array[type]
   * Type::Hash[key_type, value_type]
   * Type::Struct[type1, type2...]

Bug fixes:
 * Properties containing Variants would return them doubly wrapped ([#111][]).

[#111]: https://github.com/mvidner/ruby-dbus/pull/111

## Ruby D-Bus 0.18.0.beta4 - 2022-04-21

Bug fixes:
 * Service-side properties: Fix Properties.Get, Properties.GetAll for
   properties that contain arrays, on other than outermost level ([#109][]).
 * Sending variants: fixed make_variant to correctly guess the signature
   for UInt64 and number-keyed hashes/dictionaries.

[#109]: https://github.com/mvidner/ruby-dbus/pull/109

## Ruby D-Bus 0.18.0.beta3 - 2022-04-10

Bug fixes:
 * Service-side properties: Fix Properties.Get, Properties.GetAll for Array,
   Dict, and Variant types ([#105][]).

[#105]: https://github.com/mvidner/ruby-dbus/pull/105

## Ruby D-Bus 0.18.0.beta2 - 2022-04-04

API:
 * Renamed the DBus::Type::Type class to DBus::Type
   (which was previously a module).
 * Introduced DBus::Data classes, use them in Properties.Get,
   Properties.GetAll to return correct types as declared (still [#97][]).

Bug fixes:
 * Signature validation: Ensure DBus.type produces a valid Type
 * Detect more malformed messages: non-NUL padding bytes, variants with
   multiple or no value.
 * Added thorough tests (`spec/data/marshall.yaml`) to detect nearly all
   invalid data at unmarshalling time.

## Ruby D-Bus 0.18.0.beta1 - 2022-02-24

API:
 * D-Bus structs have been passed as Ruby arrays. Now these arrays are frozen.
 * Ruby structs can be used as D-Bus structs.

Bug fixes:
 * Returning the value for o.fd.DBus.Properties.Get, use the specific property
   signature, not the generic Variant ([#97][]).

Requirements:
 * Require Ruby 2.4, because of RuboCop 1.0.

[#97]: https://github.com/mvidner/ruby-dbus/issues/97

## Ruby D-Bus 0.17.0 - 2022-02-11

API:
 * Export properties with `dbus_attr_accessor`, `dbus_reader` etc. ([#86][]).

Bug fixes:
 * Depend on rexml which is separate since Ruby 3.0 ([#87][],
   by Toshiaki Asai).
   Nokogiri is faster but bigger so it remains optional.
 * Fix connection in case ~/.dbus-keyrings has multiple cookies, showing
   as "Oops: undefined method `zero?' for nil:NilClass".
 * Add the missing name to the root introspection node.

[#86]: https://github.com/mvidner/ruby-dbus/pull/86
[#87]: https://github.com/mvidner/ruby-dbus/pull/87

## Ruby D-Bus 0.16.0 - 2019-10-15

API:
 * An invalid service name or an invalid object path will raise
   instead of being sent to the bus. The bus would then drop the connection,
   producing EOFError here ([#80][]).

[#80]: https://github.com/mvidner/ruby-dbus/issues/80

## Ruby D-Bus 0.15.0 - 2018-04-30

API:
 * Accessing an unknown interface will raise instead of returning nil ([#74][]).

Bug fixes:
 * Fixed a conflict with activesupport 5.2 ([#71])

[#71]: https://github.com/mvidner/ruby-dbus/issues/71
[#74]: https://github.com/mvidner/ruby-dbus/pull/74

## Ruby D-Bus 0.14.1 - 2018-01-05

Bug fixes:
 * Allow registering signal handlers while a signal is being handled
   ([#70][], Jan Biniok).

[#70]: https://github.com/mvidner/ruby-dbus/pull/70

## Ruby D-Bus 0.14.0 - 2017-10-13

Bug fixes:
 * Sending 16-bit signed integers ("n") did not work at all ([#68][]).

Requirements:
 * Stopped supporting ruby 2.0.0, because of Nokogiri.

[#68]: https://github.com/mvidner/ruby-dbus/issues/68

## Ruby D-Bus 0.13.0 - 2016-09-21

Bug fixes:
 * It is no longer required to explicitly call ProxyObject#introspect,
   it will be done automatically once ([#28][]).

Requirements:
 * Introduced RuboCop to keep a consistent coding style.
 * Replaced Gemfile.ci with a regular Gemfile.

[#28]: http://github.com/mvidner/ruby-dbus/issue/28

## Ruby D-Bus 0.12.0 - 2016-09-12

API:
 * Added proxy objects whose methods return single values instead of arrays
   (use Service#[] instead of Service#object; [#30][]).

Requirements:
 * Require ruby 2.0.0, stopped supporting 1.9.3.

[#30]: http://github.com/mvidner/ruby-dbus/issue/30

## Ruby D-Bus 0.11.2 - 2016-09-11

Bug fixes:
 * Fixed reading a quoted session bus address, as written by dbus-1.10.10
   ([#62][], Yasuhiro Asaka)

[#62]: https://github.com/mvidner/ruby-dbus/pull/62

## Ruby D-Bus 0.11.1 - 2016-05-12

Bug fixes:
 * Fix default path finding on FreeBSD (Greg)
 * Service#unexport fixed to really return the unexported object

Requirements:
 * made tests compatible with RSpec 3

## Ruby D-Bus 0.11.0 - 2014-02-17

API:
 * Connection: split off MessageQueue, marked other methods as private.

Requirements:
 * converted tests to RSpec, rather mechanically for now

## Ruby D-Bus 0.10.0 - 2014-01-10

Bug fixes:
 * fixed "Interfaces added with singleton_class.instance_eval aren't
   exported" ([#22][], by miaoufkirsh)

Requirements:
 * Require ruby 1.9.3, stopped supporting 1.8.7.

[#22]: https://github.com/mvidner/ruby-dbus/issue/22

## Ruby D-Bus 0.9.3 - 2014-01-02

Bug fixes:
 * re-added COPYING, NEWS, README.md to the gem ([#47][],
   by Cédric Boutillier)

Packaging:
 * use packaging_rake_tasks

[#47]: https://github.com/mvidner/ruby-dbus/issue/47

## Ruby D-Bus 0.9.2 - 2013-05-08

Features:
 * Ruby strings can be passed where byte arrays ("ay") are expected 
   ([#40][], by Jesper B. Rosenkilde)

Bug fixes:
 * Fixed accessing ModemManager properties ([#41][], reported
   by Ernest Bursa). MM introspection produces two elements
   for a single interface; merge them.

[#40]: https://github.com/mvidner/ruby-dbus/issue/40
[#41]: https://github.com/mvidner/ruby-dbus/issue/41

## Ruby D-Bus 0.9.1 - 2013-04-23

Bug fixes:
 * Prefer /etc/machine-id to /var/lib/dbus/machine-id
   when DBUS_SESSION_BUS_ADDRESS is unset ([#39][], by WU Jun).

[#39]: https://github.com/mvidner/ruby-dbus/issue/39

## Ruby D-Bus 0.9.0 - 2012-11-06

Features:
 * When calling methods, the interface can be left unspecified if unambiguous
  (Damiano Stoffie)
 * YARD documentation, Reference.md

Bug fixes:
 * Introspection attribute "direction" can be omitted
   as allowed by the specification (Noah Meyerhans).
 * ProxyObjectInterface#on_signal no longer needs the "bus" parameter
   ([#31][], by Damiano Stoffie)

[#31]: https://github.com/mvidner/ruby-dbus/issue/31

## Ruby D-Bus 0.8.0 - 2012-09-20

Features:
 * Add Anonymous authentication ([#27][], by Walter Brebels).
 * Use Nokogiri for XML parsing when available ([#24][], by Geoff Youngs).

Bug fixes:
 * Use SCM_CREDS authentication only on FreeBSD, not on OpenBSD ([#21][],
   reported by Adde Nilsson).
 * Recognize signature "h" (UNIX_FD) used eg. by Upstart ([#23][],
   by Bernd Ahlers).
 * Find the session bus also via launchd, on OS X ([#20][], reported
   by Paul Sturgess).

Other:
 * Now doing continuous integration with Travis:
     http://travis-ci.org/#!/mvidner/ruby-dbus

[#20]: https://github.com/mvidner/ruby-dbus/issue/20
[#21]: https://github.com/mvidner/ruby-dbus/issue/21
[#23]: https://github.com/mvidner/ruby-dbus/issue/23
[#24]: https://github.com/mvidner/ruby-dbus/issue/24
[#27]: https://github.com/mvidner/ruby-dbus/issue/27

## Ruby D-Bus 0.7.2 - 2012-04-05

A brown-paper-bag release.

Bug fixes:
 * Fixed "undefined local variable or method `continue'" in
   DBus::Main#run when a service becomes idle (by Ravil Bayramgalin)

## Ruby D-Bus 0.7.1 - 2012-04-04

Bug fixes:
 * Fixed calling asynchronous methods on the default interface ([#13][],
   by Eugene Korbut). 
 * Fixed Main#quit to really quit the loop (by Josef Reidinger)
 * Unbundled files from Active Support (by Bohuslav Kabrda)

[#13]: https://github.com/mvidner/ruby-dbus/issue/13

## Ruby D-Bus 0.7.0 - 2011-07-26

Features:
 * Added ASystemBus and ASessionBus, non-singletons useful in tests
   and threads.

Bug fixes:
 * Fixed handling of multibyte strings ([#8][], by Takayuki YAMAGUCHI).
 * Allow reopening of a dbus_interface declaration ([#9][], by T. YAMAGUCHI).
 * Fixed ruby-1.9.2 compatibility again ([#12][]).
 * Fixed authentication on BSD ([#11][], by Jonathan Walker)
 * Fixed exiting a nested event loop for synchronous calls
   (reported by Timo Warns).
 * Fixed introspection calls leaking reply handlers.
 * "rake test" now works, doing what was called "rake env:test"

[#8]: https://github.com/mvidner/ruby-dbus/issue/8
[#9]: https://github.com/mvidner/ruby-dbus/issue/9
[#11]: https://github.com/mvidner/ruby-dbus/issue/11
[#12]: https://github.com/mvidner/ruby-dbus/issue/12

## Ruby D-Bus 0.6.0 - 2010-12-11

Features:
 * Clients can access properties conveniently ([T#28][]).

Bug fixes:
 * Service won't crash whan handling an unknown method or interface ([T#31][]).
 * Don't send an invalid error name when it originates from a NameError.

[T#28]: https://trac.luon.net/ruby-dbus/ticket/28
[T#31]: https://trac.luon.net/ruby-dbus/ticket/31

## Ruby D-Bus 0.5.0 - 2010-11-07

Features:
 * Better binding of Ruby Exceptions to D-Bus Errors.
 * Converted the package to a Gem ([#6][]).
 * Converted the tutorial from Webgen to Markdown.

Bug fixes:
 * Don't pass file descriptors to subprocesses.
 * Fixed InterfaceElement::validate_name ([T#38][], by Herwin Weststrate).
 * Fixed a typo in InvalidDestinationName description ([T#40][]).

[#6]: https://github.com/mvidner/ruby-dbus/issue/6
[T#38]: https://trac.luon.net/ruby-dbus/ticket/38
[T#40]: https://trac.luon.net/ruby-dbus/ticket/40

## Ruby D-Bus 0.4.0 - 2010-08-20

Features:
 * TCP transport (by pangdudu)
 * Enabled test code coverage report (rcov)

Bug fixes:
 * Classes should not share all interfaces ([T#36][]/[#5][])
 * Ruby 1.9 compatibility ([T#37][], by Myra Nelson)

[#5]: https://github.com/mvidner/ruby-dbus/issue/5
[T#36]: https://trac.luon.net/ruby-dbus/ticket/36
[T#37]: https://trac.luon.net/ruby-dbus/ticket/37

## Ruby D-Bus 0.3.1 - 2010-07-22

Bug fixes:
 * Many on_signal could cause DBus.Error.LimitsExceeded [bsc#617350][]).
   Don't add a match rule that already exists, enable removing match
   rules. Now only one handler for a rule is called (but it is possible
   for one signal to match more rules). This reverts the half-fix done
   to fix [#3][]
 * Re-added InterfaceElement#add_param for compatibility.
 * Handle more ways which tell us that a bus connection has died.

[#3]: https://github.com/mvidner/ruby-dbus/issue/3
[bsc#617350]: https://bugzilla.suse.com/show_bug.cgi?id=617350

## Ruby D-Bus 0.3.0 - 2010-03-28

Bug fixes:
 
 * Fixed "undefined method `get_node' for nil:NilClass"
   on Ubuntu Karmic ([T#34][]).
 * Get the session bus address even if unset in ENV ([#4][]).
 * Improved exceptions a bit:
   UndefinedInterface, InvalidMethodName, NoMethodError, no RuntimeException

 These are by Klaus Kaempf:
 * Make the signal dispatcher call all handlers ([#3][]).
 * Run on Ruby < 1.8.7 ([#2][]).
 * Avoid needless DBus::IncompleteBufferException ([T#33][]).
 * Don't ignore DBus Errors in request_service, raise them ([T#32][]).

[#2]: https://github.com/mvidner/ruby-dbus/issue/2
[#3]: https://github.com/mvidner/ruby-dbus/issue/3
[#4]: https://github.com/mvidner/ruby-dbus/issue/4
[T#32]: https://trac.luon.net/ruby-dbus/ticket/32
[T#33]: https://trac.luon.net/ruby-dbus/ticket/33
[T#34]: https://trac.luon.net/ruby-dbus/ticket/34

Features:

 * Automatic signature inference for variants.
 * Introduced FormalParameter where a plain pair had been used.

## Ruby D-Bus 0.2.12 - 2010-01-24

Bug fixes:

 * Fixed a long-standing bug where a service activated by the bus
   would fail with "undefined method `get_node' for nil:NilClass"
   ([T#25][] and [T#29][]).

[T#25]: https://trac.luon.net/ruby-dbus/ticket/25
[T#29]: https://trac.luon.net/ruby-dbus/ticket/29


## Ruby D-Bus 0.2.11 - 2009-11-12

Features:

 * Added DBus::Service#unexport (da1l6).

Bug fixes:

 * Return org.freedesktop.DBus.Error.UnknownObject instead of crashing
   ([T#31][]).
 * Rescue exceptions in dbus_methods and reply with DBus errors instead of
   crashing (da1l6).
 * Better exception messages when sending nil, or mismatched structs.
 * Call mktemp without --tmpdir, to build on older distros.

[T#31]: https://trac.luon.net/ruby-dbus/ticket/31

## Ruby D-Bus 0.2.10 - 2009-09-10

Bug fixes:

 * DBus::Service.exists? fixed (Murat Demirten).
 * Ruby 1.9 fixes (Jedediah Smith).
 * Fixed an endless sleep in DBus::Main.run ([bsc#537401][]).
 * Added details to PacketMarshaller exceptions ([bsc#538050][]).

[bsc#537401]: https://bugzilla.suse.com/show_bug.cgi?id=537401
[bsc#538050]: https://bugzilla.suse.com/show_bug.cgi?id=538050

## Ruby D-Bus "I'm not dead" 0.2.9 - 2009-08-26

Thank you to Paul and Arnaud for starting the project. I, Martin
Vidner, am continuing with it on GitHub.

 * Fixed passing an array through a variant (no ticket).
 * Fixed marshalling "av" ([T#30][]).
 * Fixed variant alignment ([T#27][]).
 * Added DBus::Main.quit.
 * Mention the DBus interface in a NameError for an unknown method.
 * Fixed ruby-1.9 "warning: default `to_a' will be obsolete".
 * Added Rakefile and gemspec.

[T#27]: https://trac.luon.net/ruby-dbus/ticket/27
[T#30]: https://trac.luon.net/ruby-dbus/ticket/30

## Ruby D-Bus "Thanks for all the fish" 0.2.1 - 2007-12-29

More bugfixes, mostly supplied by users supplying us with patches.  Thanks!

 * Support for new types added: 
   - dict (courtesy of Drake Wilson);
   - double (courtesy of Patrick Sissons);
   - variant.
 * Improved exception raise support (courtesy of Sjoerd Simons,
   Patrick Sissons).
 * Some polish (removed debug output, solved unnecessary warnings).
 * Documentation updates, example fixes and updates.

## Ruby D-Bus "Almost live from DebConf 7" 0.2.0 - 2007-06-02

Again a bugfix release, also meant to be the public release
for exploratory purposes. New in 0.2.0:

 * Complete tutorial revamp.
 * Relicensed to the LGPL.

## Ruby D-Bus "Release Often" 0.1.1 - 2007-04-23

Bugfix release.  Fixes hardcoded string for requesting bus names,
found by Rudi Cilibrasi.

## Ruby D-Bus "Happy Birthday Paul" 0.1.0 - 2007-04-17

First release. Supports most of D-Bus' features.