From 8202decff56e5189952e9838b70573a123ac38ce Mon Sep 17 00:00:00 2001 From: Derek Kastner Date: Sat, 3 Mar 2012 16:47:17 -0500 Subject: [PATCH] Added YAML support --- lib/remote_table/config.rb | 2 ++ lib/remote_table/format.rb | 1 + lib/remote_table/format/yaml.rb | 14 ++++++++++++++ test/fixtures/data.yml | 4 ++++ test/test_remote_table.rb | 8 ++++++++ 5 files changed, 29 insertions(+) create mode 100644 lib/remote_table/format/yaml.rb create mode 100644 test/fixtures/data.yml diff --git a/lib/remote_table/config.rb b/lib/remote_table/config.rb index d1b7323..9198eb2 100644 --- a/lib/remote_table/config.rb +++ b/lib/remote_table/config.rb @@ -243,6 +243,8 @@ def format Format::HTML when /xml/ Format::XML + when /yaml/, /yml/ + Format::Yaml else Format::Delimited end diff --git a/lib/remote_table/format.rb b/lib/remote_table/format.rb index 849d5e6..e5e6da4 100644 --- a/lib/remote_table/format.rb +++ b/lib/remote_table/format.rb @@ -10,6 +10,7 @@ require 'remote_table/format/fixed_width' require 'remote_table/format/html' require 'remote_table/format/xml' +require 'remote_table/format/yaml' class RemoteTable class Format diff --git a/lib/remote_table/format/yaml.rb b/lib/remote_table/format/yaml.rb new file mode 100644 index 0000000..754c8ed --- /dev/null +++ b/lib/remote_table/format/yaml.rb @@ -0,0 +1,14 @@ +require 'yaml' + +class RemoteTable + class Format + class Yaml < Format + def each(&blk) + data = YAML.load_file t.local_file.path + data.each &blk + ensure + t.local_file.cleanup + end + end + end +end diff --git a/test/fixtures/data.yml b/test/fixtures/data.yml new file mode 100644 index 0000000..878a3a4 --- /dev/null +++ b/test/fixtures/data.yml @@ -0,0 +1,4 @@ +- name: Seamus Abshere + city: Madison +- name: Derek Kastner + city: Lansing diff --git a/test/test_remote_table.rb b/test/test_remote_table.rb index 2ca6892..391f8f4 100644 --- a/test/test_remote_table.rb +++ b/test/test_remote_table.rb @@ -22,6 +22,14 @@ class TestRemoteTable < Test::Unit::TestCase assert_equal 'name', t[0]['col2'] assert_equal 'Seamus Abshere', t[1]['col2'] end + + should "open a yaml" do + t = RemoteTable.new "file://#{File.expand_path('../fixtures/data.yml', __FILE__)}" + assert_equal 'Seamus Abshere', t[0]['name'] + assert_equal 'Madison', t[0]['city'] + assert_equal 'Derek Kastner', t[1]['name'] + assert_equal 'Lansing', t[1]['city'] + end should "return an ordered hash" do t = RemoteTable.new 'http://spreadsheets.google.com/pub?key=tObVAGyqOkCBtGid0tJUZrw'