From 3684e1f7b1a70989f359bc1f9ef6a1388811567c Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Sat, 13 May 2006 10:34:36 +0000 Subject: [PATCH] Deprecated Eet::File#list. Introduced Eet::File#entries and Eet::File#[] as replacements. --- ChangeLog | 7 +++- ext/ext.c | 82 ++++++++++++++++++++++++++++++----------------- lib/eet.rb | 11 ++++++- test/test_misc.rb | 14 ++++---- 4 files changed, 76 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0cf4671..a68b9b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,12 @@ -- -$Id: ChangeLog 73 2005-08-25 20:36:00Z tilman $ +$Id: ChangeLog 74 2006-05-13 10:34:36Z tilman $ ++ +2006-05-13 Tilman Sauerbeck (tilman at code-monkey de) + * lib/eet.rb, ext/ext.c, test/test_misc.rb: Deprecated + Eet::File#list and introduced Eet::File#entries and + Eet::File#[] instead. + 2005-08-25 Tilman Sauerbeck (tilman at code-monkey de) * README: Fixed bad link to project homepage diff --git a/ext/ext.c b/ext/ext.c index 4fb3f1e..0ab91b3 100644 --- a/ext/ext.c +++ b/ext/ext.c @@ -1,5 +1,5 @@ /* - * $Id: ext.c 72 2005-07-16 13:15:42Z tilman $ + * $Id: ext.c 74 2006-05-13 10:34:36Z tilman $ * * Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de) * @@ -36,6 +36,15 @@ if (!*(ef)) \ rb_raise (rb_eIOError, "closed stream"); +#define CHECK_READABLE(ef) \ + switch (eet_mode_get (*ef)) { \ + case EET_FILE_MODE_READ: \ + case EET_FILE_MODE_READ_WRITE: \ + break; \ + default: \ + rb_raise (rb_eIOError, "permission denied"); \ + } + #ifdef WORDS_BIGENDIAN # define BSWAP32(x) \ ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ @@ -179,47 +188,61 @@ c_close (VALUE self) return self; } +static VALUE +get_keys (Eet_File *ef, char *glob) +{ + VALUE ret; + char **keys; + int i, count = 0; + + keys = eet_list (ef, glob, &count); + ret = rb_ary_new2 (count); + + for (i = 0; i < count; i++) + rb_ary_store (ret, i, rb_str_new2 (keys[i])); + + free (keys); + + return ret; +} + /* * call-seq: - * ef.list([glob]) -> array + * ef.entries -> array * - * Returns an Array of entries in _ef_ that match the shell glob - * _glob_ (defaulting to "*"). + * Returns an Array with the keys of the entries in _ef_. + * If the keys cannot be retrieved, an +IOError+ is raised. */ static VALUE -c_list (int argc, VALUE *argv, VALUE self) +c_entries (VALUE self) { - VALUE glob = Qnil, ret; Eet_File **ef = NULL; - char **entries, *tmp = "*"; - int i, count = 0; Data_Get_Struct (self, Eet_File *, ef); CHECK_CLOSED (ef); + CHECK_READABLE (ef); - switch (eet_mode_get (*ef)) { - case EET_FILE_MODE_READ: - case EET_FILE_MODE_READ_WRITE: - break; - default: - rb_raise (rb_eIOError, "cannot list entries"); - } - - rb_scan_args (argc, argv, "01", &glob); - - if (!NIL_P (glob)) - tmp = StringValuePtr (glob); - - ret = rb_ary_new (); - - entries = eet_list (*ef, tmp, &count); + return get_keys (*ef, "*"); +} - for (i = 0; i < count; i++) - rb_ary_push (ret, rb_str_new2 (entries[i])); +/* + * call-seq: + * ef[glob] -> array + * + * Returns an Array with the keys of entries in _ef_ that match the + * shell glob _glob_. + * If the keys cannot be retrieved, an +IOError+ is raised. + */ +static VALUE +c_glob (VALUE self, VALUE glob) +{ + Eet_File **ef = NULL; - free (entries); + Data_Get_Struct (self, Eet_File *, ef); + CHECK_CLOSED (ef); + CHECK_READABLE (ef); - return ret; + return get_keys (*ef, StringValuePtr (glob)); } /* @@ -638,7 +661,8 @@ Init_eet_ext () rb_define_singleton_method (c, "open", c_open, -1); rb_define_method (c, "initialize", c_init, -1); rb_define_method (c, "close", c_close, 0); - rb_define_method (c, "list", c_list, -1); + rb_define_method (c, "entries", c_entries, 0); + rb_define_method (c, "[]", c_glob, 1); rb_define_method (c, "delete", c_delete, 1); rb_define_method (c, "read", c_read, 1); rb_define_method (c, "write", c_write, -1); diff --git a/lib/eet.rb b/lib/eet.rb index 95e1e46..f692129 100644 --- a/lib/eet.rb +++ b/lib/eet.rb @@ -1,5 +1,5 @@ #-- -# $Id: eet.rb 60 2005-06-08 16:18:32Z tilman $ +# $Id: eet.rb 74 2006-05-13 10:34:36Z tilman $ # # Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de) # @@ -98,6 +98,15 @@ module Eet class ChunkError < EetError; end + class File + def list(glob = "*") + warn "Eet::File#list is deprecated, " + + "use Eet::File#entries or Eet::File#[] instead" + + self[glob] + end + end + class Stream # :nodoc: def initialize(chunk = nil) super(chunk.nil? ? 0 : 1, chunk) diff --git a/test/test_misc.rb b/test/test_misc.rb index e97634a..80660b5 100644 --- a/test/test_misc.rb +++ b/test/test_misc.rb @@ -1,4 +1,4 @@ -# $Id: test_misc.rb 1 2005-03-26 01:45:38Z tilman $ +# $Id: test_misc.rb 74 2006-05-13 10:34:36Z tilman $ require "eet" require "test/unit" @@ -129,18 +129,18 @@ class MiscTest < Test::Unit::TestCase end end - def test_list + def test_entries_glob ["r", "r+"].each do |mode| Eet::File.open(@dest, mode) do |ef| - assert_equal(@keys, ef.list.sort) - assert_equal(@keys, ef.list("*").sort, @keys) - assert_equal([@keys[0]], ef.list(@keys[0])) + assert_equal(@keys, ef.entries.sort) + assert_equal(@keys, ef["*"].sort) + assert_equal([@keys[0]], ef[@keys[0]]) end end assert_raise(IOError) do Eet::File.open(@dest, "w") do |ef| - ef.list + ef.entries end end end @@ -154,7 +154,7 @@ class MiscTest < Test::Unit::TestCase Eet::File.open(@dest) do |ef| tmp = @keys.shift - assert_equal(@keys, ef.list.sort) + assert_equal(@keys, ef.entries.sort) @keys.unshift(tmp) end end -- 2.30.2