From: Eric Wong <e@80x24.org>
To: dtas-all@nongnu.org
Cc: Eric Wong <e@80x24.org>
Subject: [PATCH] use omap (ordered map) for env hashes
Date: Mon, 26 Jan 2015 21:52:38 +0000 [thread overview]
Message-ID: <1422309158-13329-1-git-send-email-e@80x24.org> (raw)
While the Ruby Hash class is ordered in 1.9+, the YAML
specifications do not specify hashes as ordered by default.
Thus we must explicitly declare ordering via !omap for
interopability with non-Ruby tools.
This makes the YAML output of dtas-sourcedit and dtas-sinkedit
slightly more verbose
Users of dtas-splitfx are also encouraged to declare !omap
when creating their YAML files for interoperability.
Ordering env is important because any implementation of
built-in variable expansion is dependent on it.
---
Documentation/dtas-splitfx.txt | 4 ++--
examples/splitfx.sample.yml | 2 +-
examples/tfx.sample.yml | 2 +-
lib/dtas/player.rb | 6 ++++++
4 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/Documentation/dtas-splitfx.txt b/Documentation/dtas-splitfx.txt
index 3c421a4..8e37523 100644
--- a/Documentation/dtas-splitfx.txt
+++ b/Documentation/dtas-splitfx.txt
@@ -38,8 +38,8 @@ to use ecasound(1), too.
# FILE FORMAT
* infile - string, the pathname of the original audio file
-* env - hash of environment variables to set for all commands
- env:
+* env - ordered hash of environment variables to set for all commands
+ env: !omap
FX: vol +3dB stats
* comments - hash of common tags for all audio (e.g. ARTIST, ALBUM, YEAR)
comments:
diff --git a/examples/splitfx.sample.yml b/examples/splitfx.sample.yml
index d7ee06b..bbd224b 100644
--- a/examples/splitfx.sample.yml
+++ b/examples/splitfx.sample.yml
@@ -11,7 +11,7 @@ comments:
# the sox command for dtas-player playback, there is no need to
# specify this as it is the default:
# command: exec sox "$INFILE" $SOXFMT - $TRIMFX $RGFX $FX
-env:
+env: !omap
PATH: $PATH
# these effects may be used in any command in this file, including targets
SOX_OPTS: $SOX_OPTS -R
diff --git a/examples/tfx.sample.yml b/examples/tfx.sample.yml
index 2cbfbbc..205a0a1 100644
--- a/examples/tfx.sample.yml
+++ b/examples/tfx.sample.yml
@@ -4,7 +4,7 @@
# test_trimfx.rb relies on this.
---
infile: foo.flac
-env:
+env: !omap
PATH: $PATH
SOX_OPTS: $SOX_OPTS -R
I2: second.flac
diff --git a/lib/dtas/player.rb b/lib/dtas/player.rb
index d63bc8a..d6707c3 100644
--- a/lib/dtas/player.rb
+++ b/lib/dtas/player.rb
@@ -120,6 +120,10 @@ class DTAS::Player # :nodoc:
rv
end
+ def to_omap(hash)
+ YAML::Omap === hash ? hash : YAML::Omap.new.merge!(hash)
+ end
+
def self.load(hash)
rv = new
rv.instance_eval do
@@ -150,6 +154,7 @@ class DTAS::Player # :nodoc:
@source_map.each do |name, src|
src_hsh = v[name] or next
src.load!(src_hsh)
+ src.env = to_omap(src.env)
end
source_map_reload
end
@@ -161,6 +166,7 @@ class DTAS::Player # :nodoc:
if sinks = hash["sinks"]
sinks.each do |sink_hsh|
sink = DTAS::Sink.load(sink_hsh)
+ sink.env = to_omap(sink.env)
@sinks[sink.name] = sink
end
end
--
EW
reply other threads:[~2015-01-26 21:52 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://80x24.org/dtas/README
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1422309158-13329-1-git-send-email-e@80x24.org \
--to=e@80x24.org \
--cc=dtas-all@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
http://80x24.org/dtas.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).