Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rubygem-xdg for openSUSE:Factory checked in at 2021-01-21 21:56:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-xdg (Old) and /work/SRC/openSUSE:Factory/.rubygem-xdg.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-xdg" Thu Jan 21 21:56:33 2021 rev:3 rq:865267 version:5.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-xdg/rubygem-xdg.changes 2019-08-06 15:09:33.435801615 +0200 +++ /work/SRC/openSUSE:Factory/.rubygem-xdg.new.28504/rubygem-xdg.changes 2021-01-21 21:56:36.785841626 +0100 @@ -1,0 +2,13 @@ +Thu Jan 21 08:34:35 UTC 2021 - Stephan Kulow <[email protected]> + +- updated to version 5.1.0 + no changelog found +- limit to ruby 3.0 (as from upstream) + +------------------------------------------------------------------- +Thu May 7 21:41:43 UTC 2020 - Stephan Kulow <[email protected]> + +- updated to version 4.1.0 + no changelog found + +------------------------------------------------------------------- Old: ---- xdg-3.0.1.gem New: ---- xdg-5.1.0.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-xdg.spec ++++++ --- /var/tmp/diff_new_pack.5dVUCA/_old 2021-01-21 21:56:37.573841895 +0100 +++ /var/tmp/diff_new_pack.5dVUCA/_new 2021-01-21 21:56:37.577841897 +0100 @@ -1,7 +1,7 @@ # # spec file for package rubygem-xdg # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,16 +24,20 @@ # Name: rubygem-xdg -Version: 3.0.1 +Version: 5.1.0 Release: 0 %define mod_name xdg %define mod_full_name %{mod_name}-%{version} +# MANUAL +%define rb_build_versions ruby30 +%define rb_build_ruby_abis ruby:3.0.0 +# /MANUAL BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: %{ruby < 3} -BuildRequires: %{ruby => 2.6} +BuildRequires: %{ruby < 4} +BuildRequires: %{ruby => 3.0} BuildRequires: %{rubygem gem2rpm} BuildRequires: ruby-macros >= 5 -Url: https://github.com/bkuhlmann/xdg +URL: https://www.alchemists.io/projects/xdg Source: https://rubygems.org/gems/%{mod_full_name}.gem Source1: gem2rpm.yml Summary: Provides an implementation of the XDG Base Directory Specification @@ -49,7 +53,6 @@ %install %gem_install \ - --doc-files="LICENSE.md README.md" \ -f %gem_packages ++++++ gem2rpm.yml ++++++ --- /var/tmp/diff_new_pack.5dVUCA/_old 2021-01-21 21:56:37.605841906 +0100 +++ /var/tmp/diff_new_pack.5dVUCA/_new 2021-01-21 21:56:37.609841908 +0100 @@ -1,78 +1,3 @@ -# --- -# ## used by gem2rpm -# :summary: this is a custom summary -# ## used by gem2rpm -# :description: |- -# this is a custom description -# -# it can be multiline -# ## used by gem2rpm -# :license: MIT or Ruby -# ## used by gem2rpm and gem_packages -# :version_suffix: -x_y -# ## used by gem2rpm and gem_packages -# :disable_docs: true -# ## used by gem2rpm -# :disable_automatic_rdoc_dep: true -# ## used by gem2rpm -# :preamble: |- -# BuildRequires: foobar -# Requires: foobar -# ## used by gem2rpm -# :patches: -# foo.patch: -p1 -# bar.patch: -# :post_patch: -# if you need to fiddle with the source dir before rebuilding the gem -# ## used by gem2rpm -# :sources: -# - foo.desktop -# - bar.desktop -# :gem_install_args: '....' -# ## used by gem2rpm -# :pre_install: |- -# %if 0%{?use_system_libev} -# export USE_VENDORED_LIBEV="no" -# %endif -# ## used by gem2rpm -# :post_install: |- -# # delete custom files here or do other fancy stuff -# install -D -m 0644 %{S:1} %{buildroot}%{_bindir}/gem2rpm-opensuse -# ## used by gem2rpm -# :testsuite_command: |- -# (pushd %{buildroot}%{gem_base}/gems/%{mod_full_name} && rake test) -# ## used by gem2rpm -# :filelist: |- -# /usr/bin/gem2rpm-opensuse -# ## used by gem2rpm -# :scripts: -# :post: |- -# /bin/echo foo -# ## used by gem_packages -# :main: -# :preamble: |- -# Requires: util-linux -# Recommends: pwgen -# :filelist: |- -# /usr/bin/gem2rpm-opensuse -# ## used by gem_packages -# :custom_pkgs: -# apache: -# :preamble: |- -# Requires: ..... -# :filelist: |- -# /etc/apache2/conf.d/passenger.conf -# :summary: Custom summary is optional -# :description: |- -# Custom description is optional -# -# bar -# :post: |- -# /bin/echo foo -# -:sources: -# :preamble: |- -# %if 0%{?suse_version} && 0%{?suse_version} < 1330 -# %define rb_build_versions ruby22 ruby23 ruby24 -# %define rb_default_ruby_abi ruby:2.2.0 ruby:2.3.0 ruby:2.4.0 -# %endif +:preamble: |- + %define rb_build_versions ruby30 + %define rb_build_ruby_abis ruby:3.0.0 ++++++ xdg-3.0.1.gem -> xdg-5.1.0.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/LICENSE.adoc new/LICENSE.adoc --- old/LICENSE.adoc 1970-01-01 01:00:00.000000000 +0100 +++ new/LICENSE.adoc 2021-01-20 03:26:45.000000000 +0100 @@ -0,0 +1,162 @@ += Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +== 1. Definitions + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by +Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is +granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are +controlled by, or are under common control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the direction or management of such +entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this +License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to +software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a +Source form, including but not limited to compiled object code, generated documentation, and +conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the +License, as indicated by a copyright notice that is included in or attached to the work (an example +is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or +derived from) the Work and for which the editorial revisions, annotations, elaborations, or other +modifications represent, as a whole, an original work of authorship. For the purposes of this +License, Derivative Works shall not include works that remain separable from, or merely link (or +bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any +modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted +to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity +authorized to submit on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent to the Licensor or +its representatives, including but not limited to communication on electronic mailing lists, source +code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor +for the purpose of discussing and improving the Work, but excluding communication that is +conspicuously marked or otherwise designated in writing by the copyright owner as "Not a +Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a +Contribution has been received by Licensor and subsequently incorporated within the Work. + +== 2. Grant of Copyright License + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a +perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to +reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and +distribute the Work and such Derivative Works in Source or Object form. + +== 3. Grant of Patent License + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a +perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this +section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer +the Work, where such license applies only to those patent claims licensable by such Contributor that +are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or +a Contribution incorporated within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that Work shall terminate as of the +date such litigation is filed. + +== 4. Redistribution + +You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with +or without modifications, and in Source or Object form, provided that You meet the following +conditions: + +. You must give any other recipients of the Work or Derivative Works a copy of this License; and + +. You must cause any modified files to carry prominent notices stating that You changed the files; + and + +. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, + patent, trademark, and attribution notices from the Source form of the Work, excluding those + notices that do not pertain to any part of the Derivative Works; and + +. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works + that You distribute must include a readable copy of the attribution notices contained within such + NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in + at least one of the following places: within a NOTICE text file distributed as part of the + Derivative Works; within the Source form or documentation, if provided along with the Derivative + Works; or, within a display generated by the Derivative Works, if and wherever such third-party + notices normally appear. The contents of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution notices within Derivative Works that + You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such + additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or +different license terms and conditions for use, reproduction, or distribution of Your modifications, +or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of +the Work otherwise complies with the conditions stated in this License. + +== 5. Submission of Contributions + +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the +Work by You to the Licensor shall be under the terms and conditions of this License, without any +additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed with Licensor regarding such +Contributions. + +== 6. Trademarks + +This License does not grant permission to use the trade names, trademarks, service marks, or product +names of the Licensor, except as required for reasonable and customary use in describing the origin +of the Work and reproducing the content of the NOTICE file. + +== 7. Disclaimer of Warranty + +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied, including, without limitation, any warranties or conditions of +TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely +responsible for determining the appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +== 8. Limitation of Liability + +In no event and under no legal theory, whether in tort (including negligence), contract, or +otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or +agreed to in writing, shall any Contributor be liable to You for damages, including any direct, +indirect, special, incidental, or consequential damages of any character arising as a result of this +License or out of the use or inability to use the Work (including but not limited to damages for +loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial +damages or losses), even if such Contributor has been advised of the possibility of such damages. + +== 9. Accepting Warranty or Additional Liability + +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee +for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights +consistent with this License. However, in accepting such obligations, You may act only on Your own +behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or +claims asserted against, such Contributor by reason of your accepting any such warranty or +additional liability. + +END OF TERMS AND CONDITIONS + +Copyright 2019 link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann]. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in +compliance with the License. You may obtain a link:https://www.apache.org/licenses/LICENSE-2.0[copy] +of the License. + +Unless required by applicable law or agreed to in writing, software distributed under the License is +distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied. See the License for the specific language governing permissions and limitations under the +License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/LICENSE.md new/LICENSE.md --- old/LICENSE.md 2019-07-02 01:02:10.000000000 +0200 +++ new/LICENSE.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,163 +0,0 @@ -# Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -## 1. Definitions - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by -Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is -granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are -controlled by, or are under common control with that entity. For the purposes of this definition, -"control" means (i) the power, direct or indirect, to cause the direction or management of such -entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this -License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to -software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a -Source form, including but not limited to compiled object code, generated documentation, and -conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the -License, as indicated by a copyright notice that is included in or attached to the work (an example -is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or -derived from) the Work and for which the editorial revisions, annotations, elaborations, or other -modifications represent, as a whole, an original work of authorship. For the purposes of this -License, Derivative Works shall not include works that remain separable from, or merely link (or -bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any -modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted -to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity -authorized to submit on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent to the Licensor or -its representatives, including but not limited to communication on electronic mailing lists, source -code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor -for the purpose of discussing and improving the Work, but excluding communication that is -conspicuously marked or otherwise designated in writing by the copyright owner as "Not a -Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a -Contribution has been received by Licensor and subsequently incorporated within the Work. - -## 2. Grant of Copyright License - -Subject to the terms and conditions of this License, each Contributor hereby grants to You a -perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to -reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and -distribute the Work and such Derivative Works in Source or Object form. - -## 3. Grant of Patent License - -Subject to the terms and conditions of this License, each Contributor hereby grants to You a -perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this -section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer -the Work, where such license applies only to those patent claims licensable by such Contributor that -are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) -with the Work to which such Contribution(s) was submitted. If You institute patent litigation -against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or -a Contribution incorporated within the Work constitutes direct or contributory patent infringement, -then any patent licenses granted to You under this License for that Work shall terminate as of the -date such litigation is filed. - -## 4. Redistribution - -You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with -or without modifications, and in Source or Object form, provided that You meet the following -conditions: - -1. You must give any other recipients of the Work or Derivative Works a copy of this License; and - -2. You must cause any modified files to carry prominent notices stating that You changed the - files; and - -3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, - patent, trademark, and attribution notices from the Source form of the Work, excluding those - notices that do not pertain to any part of the Derivative Works; and - -4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative - Works that You distribute must include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not pertain to any part of the - Derivative Works, in at least one of the following places: within a NOTICE text file - distributed as part of the Derivative Works; within the Source form or documentation, if - provided along with the Derivative Works; or, within a display generated by the Derivative - Works, if and wherever such third-party notices normally appear. The contents of the NOTICE - file are for informational purposes only and do not modify the License. You may add Your own - attribution notices within Derivative Works that You distribute, alongside or as an addendum to - the NOTICE text from the Work, provided that such additional attribution notices cannot be - construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or -different license terms and conditions for use, reproduction, or distribution of Your modifications, -or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of -the Work otherwise complies with the conditions stated in this License. - -## 5. Submission of Contributions - -Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the -Work by You to the Licensor shall be under the terms and conditions of this License, without any -additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify -the terms of any separate license agreement you may have executed with Licensor regarding such -Contributions. - -## 6. Trademarks - -This License does not grant permission to use the trade names, trademarks, service marks, or product -names of the Licensor, except as required for reasonable and customary use in describing the origin -of the Work and reproducing the content of the NOTICE file. - -## 7. Disclaimer of Warranty - -Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each -Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied, including, without limitation, any warranties or conditions of -TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely -responsible for determining the appropriateness of using or redistributing the Work and assume any -risks associated with Your exercise of permissions under this License. - -## 8. Limitation of Liability - -In no event and under no legal theory, whether in tort (including negligence), contract, or -otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or -agreed to in writing, shall any Contributor be liable to You for damages, including any direct, -indirect, special, incidental, or consequential damages of any character arising as a result of this -License or out of the use or inability to use the Work (including but not limited to damages for -loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial -damages or losses), even if such Contributor has been advised of the possibility of such damages. - -## 9. Accepting Warranty or Additional Liability - -While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee -for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights -consistent with this License. However, in accepting such obligations, You may act only on Your own -behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or -claims asserted against, such Contributor by reason of your accepting any such warranty or -additional liability. - -END OF TERMS AND CONDITIONS - -Copyright 2019 [Alchemists](https://www.alchemists.io). - -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in -compliance with the License. You may obtain a [copy](http://www.apache.org/licenses/LICENSE-2.0) of -the License. - -Unless required by applicable law or agreed to in writing, software distributed under the License is -distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied. See the License for the specific language governing permissions and limitations under the -License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.adoc new/README.adoc --- old/README.adoc 1970-01-01 01:00:00.000000000 +0100 +++ new/README.adoc 2021-01-20 03:26:45.000000000 +0100 @@ -0,0 +1,298 @@ +:toc: macro +:toclevels: 5 +:figure-caption!: + += XDG + +[link=http://badge.fury.io/rb/xdg] +image::https://badge.fury.io/rb/xdg.svg[Gem Version] +[link=https://www.alchemists.io/projects/code_quality] +image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchemists Style Guide] +[link=https://circleci.com/gh/bkuhlmann/xdg] +image::https://circleci.com/gh/bkuhlmann/xdg.svg?style=svg[Circle CI Status] + +Provides a Ruby implementation of the +https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html[XDG Base Directory +Specification]. + +???? If you write a lot of Command Line Interfaces and would like additional syntactic sugar that +includes what is found in this gem, make sure to check out the +link:https://www.alchemists.io/projects/runcom[Runcom] gem too. + +toc::[] + +== Features + +* Provides a `XDG::Environment` object that adheres to the _XDG Base Directory Specification_ with +access to the following environment settings: +** `$XDG_CACHE_HOME` +** `$XDG_CONFIG_HOME` +** `$XDG_CONFIG_DIRS` +** `$XDG_DATA_HOME` +** `$XDG_DATA_DIRS` + +== Requirements + +. https://www.ruby-lang.org[Ruby] + +== Setup + +To install, run: + +[source,bash] +---- +gem install xdg +---- + +Add the following to your Gemfile: + +[source,ruby] +---- +gem "xdg" +---- + +== Usage + +The following describes how to use this XDG implementation. + +=== Overview + +To get up and running quickly, use `+XDG::Environment+` as follows: + +[source,ruby] +---- +xdg = XDG::Environment.new +xdg.cache_home # <= Answers computed `$XDG_CACHE_HOME` value. +xdg.config_home # <= Answers computed `$XDG_CONFIG_HOME` value. +xdg.config_dirs # <= Answers computed `$XDG_CONFIG_DIRS` value. +xdg.data_home # <= Answers computed `$XDG_DATA_HOME` value. +xdg.data_dirs # <= Answers computed `$XDG_DATA_DIRS` value. +---- + +The _computed_ value, in this case, is either the user-defined value of the key or the default +value, per specification, when the key is not defined or empty. For more on this, scroll down to the +_Variable Defaults_ section to learn more. + +The `XDG::Environment` wraps the following objects which can be used individually if you don???t +want to load the entire environment: + +[source,ruby] +---- +cache = XDG::Cache.new +config = XDG::Config.new +data = XDG::Data.new +---- + +The `cache`, `config`, and `data` objects share the same API which means you can ask each the +following messages: + +* `#home` - Answers the home directory as computed via the `$XDG_*_HOME` key. +* `#directories` - Answers an array directories as computed via the `$XDG_*_DIRS` key. +* `#all` - Answers an array of _all_ directories as computed from the combined `$XDG_*_HOME` and + `$XDG_*_DIRS` values (with `$XDG_*_HOME` prefixed at the start of the array). + +=== Examples + +The following are examples of what you would see when playing around with the XDG objects within an +IRB console (taken from my own environment): + +[source,ruby] +---- +require "xdg" + +# Initialization +environment = XDG::Environment.new +cache = XDG::Cache.new +config = XDG::Config.new +data = XDG::Data.new + +# Inspection +environment.inspect # => XDG_CACHE_HOME=/Users/bkuhlmann/.cache XDG_CONFIG_HOME=/Users/bkuhlmann/.config XDG_CONFIG_DIRS=/etc/xdg XDG_DATA_HOME=/Users/bkuhlmann/.local/share XDG_DATA_DIRS=/usr/local/share:/usr/share +cache.inspect # => "XDG_CACHE_HOME=/Users/bkuhlmann/.cache" +config.inspect # => "XDG_CONFIG_HOME=/Users/bkuhlmann/.config XDG_CONFIG_DIRS=/etc/xdg" +data.inspect # => "XDG_DATA_HOME=/Users/bkuhlmann/.local/share XDG_DATA_DIRS=/usr/local/share:/usr/share" + +# Paths +environment.cache_home # => #<Pathname:/Users/bkuhlmann/.cache> +environment.config_home # => #<Pathname:/Users/bkuhlmann/.config> +environment.config_dirs # => [#<Pathname:/etc/xdg>] +environment.data_home # => #<Pathname:/Users/bkuhlmann/.local/share> +environment.data_dirs # => [#<Pathname:/usr/local/share>, #<Pathname:/usr/share>] + +cache.home # => #<Pathname:/Users/bkuhlmann/.cache> +cache.directories # => [] +cache.all # => [#<Pathname:/Users/bkuhlmann/.cache>] + +config.home # => #<Pathname:/Users/bkuhlmann/.config> +config.directories # => [#<Pathname:/etc/xdg>] +config.all # => [#<Pathname:/Users/bkuhlmann/.config>, #<Pathname:/etc/xdg>] + +data.home # => #<Pathname:/Users/bkuhlmann/.local/share> +data.directories # => [#<Pathname:/usr/local/share>, #<Pathname:/usr/share>] +data.all # => [#<Pathname:/Users/bkuhlmann/.local/share>, #<Pathname:/usr/local/share>, #<Pathname:/usr/share>] +---- + +As you can see from above, each XDG object answers back a `Pathname` which means you have the full +`Pathname` API at your fingertips to build upon the output of these objects as needed. + +=== Variable Defaults + +The _XDG Base Directory Specification_ defines environment variables and associated default values +when not defined or empty. The following defaults, per specification, are implemented by the `XDG` +objects: + +* `$XDG_CACHE_HOME="$HOME/.cache"` +* `$XDG_CONFIG_HOME="$HOME/.config"` +* `$XDG_CONFIG_DIRS="/etc/xdg"` +* `$XDG_DATA_HOME="$HOME/.local/share"` +* `$XDG_DATA_DIRS="/usr/local/share/:/usr/share/"` +* `$XDG_RUNTIME_DIR` + +The `$XDG_RUNTIME_DIR` deserves special mention as it???s not, _currently_, implemented as part of +this gem because it is more user/environment specific. Here is how the `$XDG_RUNTIME_DIR` is meant +to be used should you choose to use it: + +* _Must_ reference user-specific non-essential runtime files and other file objects (such as +sockets, named pipes, etc.) +* _Must_ be owned by the user with _only_ the user having read and write access to it. +* _Must_ have a Unix access mode of `0700`. +* _Must_ be bound to the user when logging in. +* _Must_ be removed when the user logs out. +* _Must_ be pointed to the same directory when the user logs in more than once. +* _Must_ exist from first login to last logout on the system and not removed in between. +* _Must_ not allow files in the directory to survive reboot or a full logout/login cycle. +* _Must_ keep the directory on the local file system and not shared with any other file systems. +* _Must_ keep the directory fully-featured by the standards of the operating system. Specifically, +on Unix-like operating systems AF_UNIX sockets, symbolic links, hard links, proper permissions, file +locking, sparse files, memory mapping, file change notifications, a reliable hard link count must be +supported, and no restrictions on the file name character set should be imposed. Files in this +directory _may_ be subjected to periodic clean-up. To ensure files are not removed, they should have +their access time timestamp modified at least once every 6 hours of monotonic time or the '`sticky`' +bit should be set on the file. +* When not set, applications should fall back to a replacement directory with similar capabilities +and print a warning message. Applications should use this directory for communication and +synchronization purposes and should not place larger files in it, since it might reside in runtime +memory and cannot necessarily be swapped out to disk. + +=== Variable Behavior + +The behavior of most XDG environment variables can be lumped into two categories: + +* `$XDG_*_HOME` +* `$XDG_*_DIRS` + +Each is described in detail below. + +==== `$XDG_*_DIRS` + +These variables are used to define a colon (`:`) delimited list of directories. Order is important +as the first directory defined will take precedent over the following directory and so forth. For +example, here is a situation where the `XDG_CONFIG_DIRS` key has a custom value: + +[source,bash] +---- +XDG_CONFIG_DIRS="/example/one/.config:/example/two/.settings:/example/three/.configuration" +---- + +Yields the following, colon delimited, array: + +[source,ruby] +---- +[ + "/example/one/.config", + "/example/two/.settings", + "/example/three/.configuration" +] +---- + +In the above example, the `"/example/one/.config"` path takes _highest_ priority since it was +defined first. + +==== `$XDG_*_HOME` + +These variables take precidence over the corresponding `$XDG_*_DIRS` environment variables. Using +a modified version of the `$XDG_*_DIRS` example, shown above, we could have the following setup: + +[source,bash] +---- +XDG_CONFIG_HOME="/example/priority" +XDG_CONFIG_DIRS="/example/one/.config:/example/two/.settings" +---- + +Yields the following, colon delimited, array: + +[source,ruby] +---- +[ + "/example/priority", + "/example/one/.config", + "/example/two/.settings" +] +---- + +Due to `XDG_CONFIG_HOME` taking precidence over the `XDG_CONFIG_DIRS`, the path with the +_highest_ priority in this example is: `"/example/priority"`. + +=== Variable Priority + +Path precedence is determined in the following order (with the first taking highest priority): + +. `$XDG_*_HOME` - Will be used if defined. Otherwise, falls back to specification default. +. `$XDG_*_DIRS` - Iterates through directories in order defined (with first taking highest + priority). Otherwise, falls back to specification default. + +== Development + +To contribute, run: + +[source,bash] +---- +git clone https://github.com/bkuhlmann/xdg.git +cd xdg +bin/setup +---- + +You can also use the IRB console for direct access to all objects: + +[source,bash] +---- +bin/console +---- + +== Tests + +To test, run: + +[source,bash] +---- +bundle exec rake +---- + +== Versioning + +Read link:https://semver.org[Semantic Versioning] for details. Briefly, it means: + +* Major (X.y.z) - Incremented for any backwards incompatible public API changes. +* Minor (x.Y.z) - Incremented for new, backwards compatible, public API enhancements/fixes. +* Patch (x.y.Z) - Incremented for small, backwards compatible, bug fixes. + +== Code of Conduct + +Please note that this project is released with a link:CODE_OF_CONDUCT.adoc[CODE OF CONDUCT]. By +participating in this project you agree to abide by its terms. + +== Contributions + +Read link:CONTRIBUTING.adoc[CONTRIBUTING] for details. + +== License + +Read link:LICENSE.adoc[LICENSE] for details. + +== History + +Read link:CHANGES.adoc[CHANGES] for details. + +== Credits + +Engineered by link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann]. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2019-07-02 01:02:10.000000000 +0200 +++ new/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,229 +0,0 @@ -<p align="center"> - <img src="xdg.png" alt="XDG Icon"/> -</p> - -# XDG - -[](http://badge.fury.io/rb/xdg) -[](https://codeclimate.com/github/bkuhlmann/xdg/maintainability) -[](https://codeclimate.com/github/bkuhlmann/xdg/test_coverage) -[](https://circleci.com/gh/bkuhlmann/xdg) - -Provides a Ruby implementation of the [XDG Base Directory -Specification](https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html). - -:bulb: If you write a lot of Command Line Interfaces and would like additional syntactic -sugar that includes what is found in this gem, make sure to check out the -[Runcom](https://github.com/bkuhlmann/runcom) gem too. - -<!-- Tocer[start]: Auto-generated, don't remove. --> - -## Table of Contents - - - [Features](#features) - - [Requirements](#requirements) - - [Setup](#setup) - - [Usage](#usage) - - [Overview](#overview) - - [Variable Defaults](#variable-defaults) - - [Variable Behavior](#variable-behavior) - - [`$XDG_*_DIRS`](#xdg__dirs) - - [`$XDG_*_HOME`](#xdg__home) - - [Variable Priority](#variable-priority) - - [Tests](#tests) - - [Versioning](#versioning) - - [Code of Conduct](#code-of-conduct) - - [Contributions](#contributions) - - [License](#license) - - [History](#history) - - [Credits](#credits) - -<!-- Tocer[finish]: Auto-generated, don't remove. --> - -## Features - -- Provides a `XDG::Environment` object that adheres to the *XDG Base Directory Specification* with - access to the following environment settings: - - `$XDG_CACHE_HOME` - - `$XDG_CONFIG_HOME` - - `$XDG_CONFIG_DIRS` - - `$XDG_DATA_HOME` - - `$XDG_DATA_DIRS` - -## Requirements - -1. [Ruby 2.6.3](https://www.ruby-lang.org) - -## Setup - -To install, run: - - gem install xdg - -Add the following to your Gemfile: - - gem "xdg" - -## Usage - -The following describes how to use this XDG implementation. - -#### Overview - -To get up and running quickly, use `XDG::Environment` as follows: - - xdg = XDG::Environment.new - xdg.cache_home # <= Answers computed `$XDG_CACHE_HOME` value. - xdg.config_home # <= Answers computed `$XDG_CONFIG_HOME` value. - xdg.config_dirs # <= Answers computed `$XDG_CONFIG_DIRS` value. - xdg.data_home # <= Answers computed `$XDG_DATA_HOME` value. - xdg.data_dirs # <= Answers computed `$XDG_DATA_DIRS` value. - -The *computed* value, in this case, is either the user-defined value of the key or the default -value, per specification, when the key is not defined or empty. For more on this, scroll down to the -*Variable Defaults* section to learn more. - -The `XDG::Environment` wraps the following objects which can be used individually if you -don't want to load the entire environment: - - cache = XDG::Cache.new - config = XDG::Config.new - data = XDG::Data.new - -The `cache`, `config`, and `data` objects share the same API which means you can ask each the -following messages: - -- `#home` - Answers the home directory as computed via the `$XDG_*_HOME` key. -- `#directories` - Answers an array directories as computed via the `$XDG_*_DIRS` key. -- `#all` - Answers an array of *all* directories as computed from the combined `$XDG_*_HOME` and - `$XDG_*_DIRS` values (with `$XDG_*_HOME` prefixed at the start of the array). - -#### Variable Defaults - -The *XDG Base Directory Specification* defines environment variables and associated default values -when not defined or empty. The following defaults, per specification, are implemented by the -`XDG` objects: - -- `$XDG_CACHE_HOME="$HOME/.cache"` -- `$XDG_CONFIG_HOME="$HOME/.config"` -- `$XDG_CONFIG_DIRS="/etc/xdg"` -- `$XDG_DATA_HOME="$HOME/.local/share"` -- `$XDG_DATA_DIRS="/usr/local/share/:/usr/share/"` -- `$XDG_RUNTIME_DIR` - -The `$XDG_RUNTIME_DIR` deserves special mention as it's not, *currently*, implemented as part of -this gem because it is more user/environment specific. Here is how the `$XDG_RUNTIME_DIR` is meant -to be used should you choose to use it: - -- *Must* reference user-specific non-essential runtime files and other file objects (such as - sockets, named pipes, etc.) -- *Must* be owned by the user with *only* the user having read and write access to it. -- *Must* have a Unix access mode of `0700`. -- *Must* be bound to the user when logging in. -- *Must* be removed when the user logs out. -- *Must* be pointed to the same directory when the user logs in more than once. -- *Must* exist from first login to last logout on the system and not removed in between. -- *Must* not allow files in the directory to survive reboot or a full logout/login cycle. -- *Must* keep the directory on the local file system and not shared with any other file systems. -- *Must* keep the directory fully-featured by the standards of the operating system. Specifically, - on Unix-like operating systems AF_UNIX sockets, symbolic links, hard links, proper permissions, - file locking, sparse files, memory mapping, file change notifications, a reliable hard link count - must be supported, and no restrictions on the file name character set should be imposed. Files in - this directory *may* be subjected to periodic clean-up. To ensure files are not removed, - they should have their access time timestamp modified at least once every 6 hours of monotonic - time or the 'sticky' bit should be set on the file. -- When not set, applications should fall back to a replacement directory with similar capabilities - and print a warning message. Applications should use this directory for communication and - synchronization purposes and should not place larger files in it, since it might reside in runtime - memory and cannot necessarily be swapped out to disk. - -#### Variable Behavior - -The behavior of most XDG environment variables can be lumped into two categories: - -- `$XDG_*_HOME` -- `$XDG_*_DIRS` - -Each is described in detail below. - -##### `$XDG_*_DIRS` - -These variables are used to define a colon (`:`) delimited list of directories. Order is important -as the first directory defined will take precedent over the following directory and so forth. For -example, here is a situation where the `XDG_CONFIG_DIRS` key has a custom value: - - XDG_CONFIG_DIRS="/example/one/.config:/example/two/.settings:/example/three/.configuration" - - # Yields the following, colon delimited, array: - [ - "/example/one/.config", - "/example/two/.settings", - "/example/three/.configuration" - ] - -In the above example, the `"/example/one/.config"` path takes *highest* priority since it was -defined first. - -##### `$XDG_*_HOME` - -These variables take precidence over the corresponding `$XDG_*_DIRS` environment variables. Using a -modified version of the `$XDG_*_DIRS` example, shown above, we could have the following setup: - - XDG_CONFIG_HOME="/example/priority" - XDG_CONFIG_DIRS="/example/one/.config:/example/two/.settings" - - # Yields the following, colon delimited, array: - [ - "/example/priority", - "/example/one/.config", - "/example/two/.settings" - ] - -Due to `XDG_CONFIG_HOME` taking precidence over the `XDG_CONFIG_DIRS`, the path with the *highest* -priority in this example is: `"/example/priority"`. - -#### Variable Priority - -Path precedence is determined in the following order (with the first taking highest priority): - -1. `$XDG_*_HOME` - Will be used if defined. Otherwise, falls back to specification default. -1. `$XDG_*_DIRS` - Iterates through directories in order defined (with first taking highest - priority). Otherwise, falls back to specification default. - -## Tests - -To test, run: - - bundle exec rake - -## Versioning - -Read [Semantic Versioning](https://semver.org) for details. Briefly, it means: - -- Major (X.y.z) - Incremented for any backwards incompatible public API changes. -- Minor (x.Y.z) - Incremented for new, backwards compatible, public API enhancements/fixes. -- Patch (x.y.Z) - Incremented for small, backwards compatible, bug fixes. - -## Code of Conduct - -Please note that this project is released with a [CODE OF CONDUCT](CODE_OF_CONDUCT.md). By -participating in this project you agree to abide by its terms. - -## Contributions - -Read [CONTRIBUTING](CONTRIBUTING.md) for details. - -## License - -Copyright 2019 [Alchemists](https://www.alchemists.io). -Read [LICENSE](LICENSE.md) for details. - -## History - -Read [CHANGES](CHANGES.md) for details. -Built with [Gemsmith](https://github.com/bkuhlmann/gemsmith). - -## Credits - -Developed by [Brooke Kuhlmann](https://www.alchemists.io) at -[Alchemists](https://www.alchemists.io). Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ Binary files old/checksums.yaml.gz.sig and new/checksums.yaml.gz.sig differ Binary files old/data.tar.gz.sig and new/data.tar.gz.sig differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/cache.rb new/lib/xdg/cache.rb --- old/lib/xdg/cache.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/cache.rb 2021-01-20 03:26:45.000000000 +0100 @@ -6,11 +6,11 @@ class Cache extend Forwardable - HOME_PAIR = Pair.new("XDG_CACHE_HOME", ".cache").freeze + HOME_PAIR = Pair["XDG_CACHE_HOME", ".cache"].freeze - delegate %i[home directories all] => :combined + delegate %i[home directories all inspect] => :combined - def initialize home: Paths::Standard, directories: Paths::Directory, environment: ENV + def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV @combined = Paths::Combined.new home.new(HOME_PAIR, environment), directories.new(Pair.new, environment) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/config.rb new/lib/xdg/config.rb --- old/lib/xdg/config.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/config.rb 2021-01-20 03:26:45.000000000 +0100 @@ -6,12 +6,12 @@ class Config extend Forwardable - HOME_PAIR = Pair.new("XDG_CONFIG_HOME", ".config").freeze - DIRS_PAIR = Pair.new("XDG_CONFIG_DIRS", "/etc/xdg").freeze + HOME_PAIR = Pair["XDG_CONFIG_HOME", ".config"].freeze + DIRS_PAIR = Pair["XDG_CONFIG_DIRS", "/etc/xdg"].freeze - delegate %i[home directories all] => :combined + delegate %i[home directories all inspect] => :combined - def initialize home: Paths::Standard, directories: Paths::Directory, environment: ENV + def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV @combined = Paths::Combined.new home.new(HOME_PAIR, environment), directories.new(DIRS_PAIR, environment) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/data.rb new/lib/xdg/data.rb --- old/lib/xdg/data.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/data.rb 2021-01-20 03:26:45.000000000 +0100 @@ -6,12 +6,12 @@ class Data extend Forwardable - HOME_PAIR = Pair.new("XDG_DATA_HOME", ".local/share").freeze - DIRS_PAIR = Pair.new("XDG_DATA_DIRS", "/usr/local/share:/usr/share").freeze + HOME_PAIR = Pair["XDG_DATA_HOME", ".local/share"].freeze + DIRS_PAIR = Pair["XDG_DATA_DIRS", "/usr/local/share:/usr/share"].freeze - delegate %i[home directories all] => :combined + delegate %i[home directories all inspect] => :combined - def initialize home: Paths::Standard, directories: Paths::Directory, environment: ENV + def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV @combined = Paths::Combined.new home.new(HOME_PAIR, environment), directories.new(DIRS_PAIR, environment) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/environment.rb new/lib/xdg/environment.rb --- old/lib/xdg/environment.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/environment.rb 2021-01-20 03:26:45.000000000 +0100 @@ -2,7 +2,7 @@ module XDG class Environment - def initialize home: Paths::Standard, directories: Paths::Directory, environment: ENV + def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV @cache = Cache.new home: home, directories: directories, environment: environment @config = Config.new home: home, directories: directories, environment: environment @data = Data.new home: home, directories: directories, environment: environment @@ -28,6 +28,10 @@ data.directories end + def inspect + "#{cache.inspect} #{config.inspect} #{data.inspect}" + end + private attr_reader :cache, :config, :data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/identity.rb new/lib/xdg/identity.rb --- old/lib/xdg/identity.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/identity.rb 2021-01-20 03:26:45.000000000 +0100 @@ -3,20 +3,9 @@ module XDG # Gem identity information. module Identity - def self.name - "xdg" - end - - def self.label - "XDG" - end - - def self.version - "3.0.1" - end - - def self.version_label - "#{label} #{version}" - end + NAME = "xdg" + LABEL = "XDG" + VERSION = "5.1.0" + VERSION_LABEL = "#{LABEL} #{VERSION}" end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/pair.rb new/lib/xdg/pair.rb --- old/lib/xdg/pair.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/pair.rb 2021-01-20 03:26:45.000000000 +0100 @@ -1,10 +1,30 @@ # frozen_string_literal: true module XDG + PAIR_DELIMITER = "=" + # A generic key-value pair (KVP). Pair = Struct.new :key, :value do def to_env Hash[*values] end + + def key? + key.to_s.size.positive? + end + + def value? + value.to_s.size.positive? + end + + def empty? + !(key? && value?) + end + + def inspect + return "" unless key? || value? + + "#{key}#{PAIR_DELIMITER}#{value}" + end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/paths/combined.rb new/lib/xdg/paths/combined.rb --- old/lib/xdg/paths/combined.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/paths/combined.rb 2021-01-20 03:26:45.000000000 +0100 @@ -23,6 +23,10 @@ directories.prepend home end + def inspect + [initial_home.inspect, initial_directories.inspect].reject(&:empty?).join " " + end + private attr_reader :initial_home, :initial_directories diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/paths/directory.rb new/lib/xdg/paths/directory.rb --- old/lib/xdg/paths/directory.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/paths/directory.rb 2021-01-20 03:26:45.000000000 +0100 @@ -14,18 +14,29 @@ end def default - paths.split(DELIMITER).map(&method(:expand)) + value.split(DELIMITER).map { |path| expand path } end def dynamic - environment.fetch(pair.key, paths).split(DELIMITER).uniq.map(&method(:expand)) + String(environment[key]).then { |env_value| env_value.empty? ? value : env_value } + .split(DELIMITER) + .uniq + .map { |path| expand path } + end + + def inspect + [key, dynamic.join(DELIMITER)].reject(&:empty?).join XDG::PAIR_DELIMITER end private attr_reader :pair, :environment - def paths + def key + String pair.key + end + + def value String pair.value end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/paths/home.rb new/lib/xdg/paths/home.rb --- old/lib/xdg/paths/home.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/xdg/paths/home.rb 2021-01-20 03:26:45.000000000 +0100 @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require "forwardable" +require "pathname" + +module XDG + module Paths + # A XDG home path. + class Home + extend Forwardable + + KEY = "HOME" + + delegate %i[key value] => :pair + + def initialize pair, environment = ENV + @pair = pair + @environment = environment + end + + def default + expand String(value) + end + + def dynamic + String(environment[key]).then { |path| path.empty? ? default : expand(path) } + end + + def inspect + [pair.key, dynamic].compact.join XDG::PAIR_DELIMITER + end + + private + + attr_reader :pair, :environment + + def expand path + home.join(path).expand_path + end + + def home + Pathname environment.fetch(KEY) + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg/paths/standard.rb new/lib/xdg/paths/standard.rb --- old/lib/xdg/paths/standard.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg/paths/standard.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -require "forwardable" -require "pathname" - -module XDG - module Paths - # A XDG home path. - class Standard - extend Forwardable - - HOME_KEY = "HOME" - - delegate %i[key value] => :pair - - def initialize pair, environment = ENV - @pair = pair - @environment = environment - end - - def default - expand_home_for String(value) - end - - def dynamic - String(environment[key]).then { |path| path.empty? ? default : expand_home_for(path) } - end - - private - - attr_reader :pair, :environment - - def home - Pathname environment.fetch(HOME_KEY) - end - - def expand_home_for path - home.join(path).expand_path - end - end - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/xdg.rb new/lib/xdg.rb --- old/lib/xdg.rb 2019-07-02 01:02:10.000000000 +0200 +++ new/lib/xdg.rb 2021-01-20 03:26:45.000000000 +0100 @@ -2,7 +2,7 @@ require "xdg/identity" require "xdg/pair" -require "xdg/paths/standard" +require "xdg/paths/home" require "xdg/paths/directory" require "xdg/paths/combined" require "xdg/config" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2019-07-02 01:02:10.000000000 +0200 +++ new/metadata 2021-01-20 03:26:45.000000000 +0100 @@ -1,18 +1,18 @@ --- !ruby/object:Gem::Specification name: xdg version: !ruby/object:Gem::Version - version: 3.0.1 + version: 5.1.0 platform: ruby authors: - Brooke Kuhlmann -autorequire: +autorequire: bindir: bin cert_chain: - | -----BEGIN CERTIFICATE----- - MIIC/jCCAeagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v - a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0xOTAyMTcxNjAxMTFaFw0yMDAyMTcx - NjAxMTFaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB + MIIC/jCCAeagAwIBAgIBAzANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v + a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMDAzMTUxNDQ1MzJaFw0yMTAzMTUx + NDQ1MzJaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6l1qpXTiomH1RfMRloyw7MiE xyVx/x8Yc3EupdH7uhNaTXQGyORN6aOY//1QXXMHIZ9tW74nZLhesWMSUMYy0XhB brs+KkurHnc9FnEJAbG7ebGvl/ncqZt72nQvaxpDxvuCBHgJAz+8i5wl6FhLw+oT @@ -20,209 +20,27 @@ D5vkU0YlAm1r98BymuJlcQ1qdkVEI1d48ph4kcS0S0nv1RiuyVb6TCAR3Nu3VaVq 3fPzZKJLZBx67UvXdbdicWPiUR75elI4PXpLIic3xytaF52ZJYyKZCNZJhNwfQID AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU0nzow9vc - 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBANgfX7kPZkJvsbdWMvbe - DUUYxRTqTUzCDpLd2p3sQvgLMKjTNSKt6CFq/kh+98b6RCgO6DqiVfxvOEq02dvf - ebMN/ylQqan2FgiAs1rpP0/D4C0MlBjoDktsT+2IyLol1KmkDB20ExJ4Sf1GRNdA - hpWOtcgqHtmrc7xzgB6BuyoYufrKKUlCO3ewTM4C375D2qO7hIdKuMOO3CdPMtSk - OrWpbzCL+nbbXqeoqiHgZaUvcyyQrGj5sQRxMTzuMXzzQxtHnuTuKrcz16HMTX/O - dKvURM+1PwDCzC5tvRwjhUJIizau6+MtkFCvJHmaAj1aZL3odcPejHj5Hxt/0CUW - y84= + 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAIHhAlD3po4sTYqacXaQ + XI9jIhrfMy//2PgbHWcETtlJPBeNUbbSNBABcllUHKqYsVDlSvSmss034KSWNR8F + bF1GcloicyvcCC4y6IoW4it0COAcdeaaxkxiBSgKdQFpff9REnDlIKK4uQ9lLxIo + Y2G5xubiziKZkyfWFuSr67PIjW3Bu673D1JVBArhA1qbgQmYQcy1CkGOjo+iO8Nf + 7u/QSfBHb+r/bXhKscDgPpnKwbUmvgO2+94zJG9KsrmIydlzYfsD09aXKx0t6Xy4 + 2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv + QWc= -----END CERTIFICATE----- -date: 2019-07-01 00:00:00.000000000 Z -dependencies: -- !ruby/object:Gem::Dependency - name: bundler-audit - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.6' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.6' -- !ruby/object:Gem::Dependency - name: gemsmith - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '13.5' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '13.5' -- !ruby/object:Gem::Dependency - name: git-cop - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '3.5' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '3.5' -- !ruby/object:Gem::Dependency - name: guard-rspec - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '4.7' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '4.7' -- !ruby/object:Gem::Dependency - name: pry - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.10' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.10' -- !ruby/object:Gem::Dependency - name: pry-byebug - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '3.5' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '3.5' -- !ruby/object:Gem::Dependency - name: rake - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '12.3' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '12.3' -- !ruby/object:Gem::Dependency - name: reek - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '5.4' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '5.4' -- !ruby/object:Gem::Dependency - name: rspec - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '3.8' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '3.8' -- !ruby/object:Gem::Dependency - name: rubocop - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.69' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.69' -- !ruby/object:Gem::Dependency - name: rubocop-performance - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '1.4' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '1.4' -- !ruby/object:Gem::Dependency - name: rubocop-rspec - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '1.33' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '1.33' -- !ruby/object:Gem::Dependency - name: simplecov - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.13' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '0.13' -description: +date: 2021-01-20 00:00:00.000000000 Z +dependencies: [] +description: email: - [email protected] executables: [] extensions: [] extra_rdoc_files: -- README.md -- LICENSE.md +- README.adoc +- LICENSE.adoc files: -- LICENSE.md -- README.md +- LICENSE.adoc +- README.adoc - lib/xdg.rb - lib/xdg/cache.rb - lib/xdg/config.rb @@ -232,15 +50,16 @@ - lib/xdg/pair.rb - lib/xdg/paths/combined.rb - lib/xdg/paths/directory.rb -- lib/xdg/paths/standard.rb -homepage: https://github.com/bkuhlmann/xdg +- lib/xdg/paths/home.rb +homepage: https://www.alchemists.io/projects/xdg licenses: - Apache-2.0 metadata: - source_code_uri: https://github.com/bkuhlmann/xdg - changelog_uri: https://github.com/bkuhlmann/xdg/blob/master/CHANGES.md bug_tracker_uri: https://github.com/bkuhlmann/xdg/issues -post_install_message: + changelog_uri: https://www.alchemists.io/projects/xdg/changes.html + documentation_uri: https://www.alchemists.io/projects/xdg + source_code_uri: https://github.com/bkuhlmann/xdg +post_install_message: rdoc_options: [] require_paths: - lib @@ -248,15 +67,15 @@ requirements: - - "~>" - !ruby/object:Gem::Version - version: '2.6' + version: '3.0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] -rubygems_version: 3.0.4 -signing_key: +rubygems_version: 3.2.5 +signing_key: specification_version: 4 summary: Provides an implementation of the XDG Base Directory Specification. test_files: [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata.gz.sig new/metadata.gz.sig --- old/metadata.gz.sig 2019-07-02 01:02:10.000000000 +0200 +++ new/metadata.gz.sig 2021-01-20 03:26:45.000000000 +0100 @@ -1,2 +1 @@ -h]W????0Mm<[|?#???Ef??EL??????????K-}?]???1??<q????????.?Us?? ???=T?T7??v??\?C??g??b?27C ??,E!n???P?}??v???yr?%?n ??d[[???%?-?X(^??k??%?`???}?,?????b|??w/?C??-?}3??~?& -?$J??n~b??0????%;?????'?E??-^?i?[???:M??7?Y?~GB?]R?1???P'h?????? \ No newline at end of file +D?Z?)|{j$W-kJ"???m???Q???S ?cBy=?p??????????/[??p?+ed?? ??e?.???3???u??????????????%??:?Fi"???I??A;S6%p??N?c??v???iCr?*?? }e?t??`D?V?????W?}????-?{??????5h???????:??7??U??e?????A?To~F/h\?2??u?D???P?????C??!eV&Vi?b(}O?V-$?(;?9C? \ No newline at end of file
