imw 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +34 -14
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/imw.rb +9 -6
- data/lib/imw/{resources/archive.rb → archives.rb} +20 -10
- data/lib/imw/archives/rar.rb +19 -0
- data/lib/imw/archives/tar.rb +19 -0
- data/lib/imw/archives/tarbz2.rb +73 -0
- data/lib/imw/archives/targz.rb +73 -0
- data/lib/imw/archives/zip.rb +51 -0
- data/lib/imw/{resources/compressed_file.rb → compressed_files.rb} +16 -11
- data/lib/imw/compressed_files/bz2.rb +16 -0
- data/lib/imw/{resources → compressed_files}/compressible.rb +2 -4
- data/lib/imw/compressed_files/gz.rb +16 -0
- data/lib/imw/formats.rb +31 -0
- data/lib/imw/formats/delimited.rb +90 -0
- data/lib/imw/formats/excel.rb +125 -0
- data/lib/imw/formats/json.rb +51 -0
- data/lib/imw/formats/sgml.rb +69 -0
- data/lib/imw/formats/yaml.rb +51 -0
- data/lib/imw/resource.rb +108 -10
- data/lib/imw/schemes.rb +21 -0
- data/lib/imw/schemes/hdfs.rb +240 -0
- data/lib/imw/schemes/http.rb +166 -0
- data/lib/imw/schemes/local.rb +219 -0
- data/lib/imw/schemes/remote.rb +114 -0
- data/lib/imw/schemes/s3.rb +135 -0
- data/lib/imw/tools.rb +8 -0
- data/lib/imw/{transforms → tools}/archiver.rb +1 -1
- data/lib/imw/{transforms → tools}/transferer.rb +10 -10
- data/spec/imw/{resources/archive_spec.rb → archive_spec.rb} +3 -3
- data/spec/imw/{resources/archives_and_compressed → archives}/rar_spec.rb +2 -2
- data/spec/imw/{resources/archives_and_compressed → archives}/tar_spec.rb +2 -2
- data/spec/imw/{resources/archives_and_compressed → archives}/tarbz2_spec.rb +4 -4
- data/spec/imw/{resources/archives_and_compressed → archives}/targz_spec.rb +4 -4
- data/spec/imw/{resources/archives_and_compressed → archives}/zip_spec.rb +2 -2
- data/spec/imw/compressed_files/bz2_spec.rb +15 -0
- data/spec/imw/{resources → compressed_files}/compressible_spec.rb +1 -1
- data/spec/imw/compressed_files/gz_spec.rb +15 -0
- data/spec/imw/{resources/compressed_file_spec.rb → compressed_files_spec.rb} +3 -3
- data/spec/imw/{resources/formats → formats}/delimited_spec.rb +2 -2
- data/spec/imw/{resources/formats → formats}/json_spec.rb +2 -2
- data/spec/imw/{resources/formats → formats}/sgml_spec.rb +2 -2
- data/spec/imw/{resources/formats → formats}/yaml_spec.rb +2 -2
- data/spec/imw/resource_spec.rb +4 -4
- data/spec/imw/{resources/schemes → schemes}/hdfs_spec.rb +7 -7
- data/spec/imw/{resources/schemes → schemes}/http_spec.rb +2 -2
- data/spec/imw/{resources → schemes}/local_spec.rb +5 -5
- data/spec/imw/{resources → schemes}/remote_spec.rb +7 -3
- data/spec/imw/{resources/schemes → schemes}/s3_spec.rb +2 -2
- data/spec/imw/{transforms → tools}/archiver_spec.rb +2 -2
- data/spec/imw/tools/transferer_spec.rb +113 -0
- metadata +69 -71
- data/lib/imw/resources.rb +0 -118
- data/lib/imw/resources/archives_and_compressed.rb +0 -32
- data/lib/imw/resources/archives_and_compressed/bz2.rb +0 -18
- data/lib/imw/resources/archives_and_compressed/gz.rb +0 -18
- data/lib/imw/resources/archives_and_compressed/rar.rb +0 -23
- data/lib/imw/resources/archives_and_compressed/tar.rb +0 -23
- data/lib/imw/resources/archives_and_compressed/tarbz2.rb +0 -78
- data/lib/imw/resources/archives_and_compressed/targz.rb +0 -78
- data/lib/imw/resources/archives_and_compressed/zip.rb +0 -57
- data/lib/imw/resources/formats.rb +0 -32
- data/lib/imw/resources/formats/delimited.rb +0 -92
- data/lib/imw/resources/formats/excel.rb +0 -125
- data/lib/imw/resources/formats/json.rb +0 -53
- data/lib/imw/resources/formats/sgml.rb +0 -72
- data/lib/imw/resources/formats/yaml.rb +0 -53
- data/lib/imw/resources/local.rb +0 -198
- data/lib/imw/resources/remote.rb +0 -110
- data/lib/imw/resources/schemes.rb +0 -19
- data/lib/imw/resources/schemes/hdfs.rb +0 -242
- data/lib/imw/resources/schemes/http.rb +0 -161
- data/lib/imw/resources/schemes/s3.rb +0 -137
- data/lib/imw/transforms.rb +0 -8
- data/spec/imw/resources/archives_and_compressed/bz2_spec.rb +0 -15
- data/spec/imw/resources/archives_and_compressed/gz_spec.rb +0 -15
- data/spec/imw/transforms/transferer_spec.rb +0 -113
data/lib/imw/tools.rb
ADDED
@@ -1,5 +1,5 @@
|
|
1
1
|
module IMW
|
2
|
-
module
|
2
|
+
module Tools
|
3
3
|
class Transferer
|
4
4
|
|
5
5
|
attr_accessor :action, :source, :destination
|
@@ -59,19 +59,19 @@ module IMW
|
|
59
59
|
#
|
60
60
|
|
61
61
|
def file_to_s3
|
62
|
-
IMW::
|
62
|
+
IMW::Schemes::S3.put(source, destination)
|
63
63
|
end
|
64
64
|
|
65
65
|
def http_to_s3
|
66
|
-
IMW::
|
66
|
+
IMW::Schemes::S3.put(source, destination)
|
67
67
|
end
|
68
68
|
|
69
69
|
def s3_to_file
|
70
|
-
IMW::
|
70
|
+
IMW::Schemes::S3.get(source, destination)
|
71
71
|
end
|
72
72
|
|
73
73
|
def s3_to_s3
|
74
|
-
IMW::
|
74
|
+
IMW::Schemes::S3.copy(source, destination)
|
75
75
|
end
|
76
76
|
|
77
77
|
#
|
@@ -79,23 +79,23 @@ module IMW
|
|
79
79
|
#
|
80
80
|
|
81
81
|
def hdfs_to_hdfs
|
82
|
-
IMW::
|
82
|
+
IMW::Schemes::HDFS.fs(action, source.path, destination.path)
|
83
83
|
end
|
84
84
|
|
85
85
|
def file_to_hdfs
|
86
|
-
IMW::
|
86
|
+
IMW::Schemes::HDFS.fs(:put, source.path, destination.path)
|
87
87
|
end
|
88
88
|
|
89
89
|
def hdfs_to_file
|
90
|
-
IMW::
|
90
|
+
IMW::Schemes::HDFS.fs(:get, source.path, destination.path)
|
91
91
|
end
|
92
92
|
|
93
93
|
def s3_to_hdfs
|
94
|
-
IMW::
|
94
|
+
IMW::Schemes::HDFS.fs(action, source.s3n_url, destination.path)
|
95
95
|
end
|
96
96
|
|
97
97
|
def hdfs_to_s3
|
98
|
-
IMW::
|
98
|
+
IMW::Schemes::HDFS.fs(action, source.path, destination.s3n_url)
|
99
99
|
end
|
100
100
|
|
101
101
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../spec_helper')
|
2
2
|
|
3
3
|
# To use this shared example group define instance variables
|
4
4
|
# <tt>@extension</tt> and <tt>@cannot_append</tt> in your tests:
|
@@ -11,8 +11,8 @@ require File.join(File.dirname(__FILE__),'../../spec_helper')
|
|
11
11
|
#
|
12
12
|
# it_should_behave_like "an archive of files"
|
13
13
|
#
|
14
|
-
# The <tt>@extension</tt> should correspond to an IMW
|
15
|
-
#
|
14
|
+
# The <tt>@extension</tt> should correspond to an IMW module with a
|
15
|
+
# registered handler.
|
16
16
|
#
|
17
17
|
# If <tt>@cannot_append</tt> evaluates to true then the specs for
|
18
18
|
# appending to files will check for an error (this is because one
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require File.dirname(__FILE__) + "
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
2
|
require File.dirname(__FILE__) + "/../archive_spec"
|
3
3
|
|
4
|
-
describe IMW::
|
4
|
+
describe IMW::Archives::Rar do
|
5
5
|
|
6
6
|
before do
|
7
7
|
@extension = 'rar'
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require File.dirname(__FILE__) + "
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
2
|
require File.dirname(__FILE__) + "/../archive_spec"
|
3
3
|
|
4
|
-
describe IMW::
|
4
|
+
describe IMW::Archives::Tar do
|
5
5
|
|
6
6
|
before do
|
7
7
|
@extension = 'tar'
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require File.dirname(__FILE__) + "
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
2
|
require File.dirname(__FILE__) + "/../archive_spec"
|
3
|
-
require File.dirname(__FILE__) + "/../
|
3
|
+
require File.dirname(__FILE__) + "/../compressed_files_spec"
|
4
4
|
|
5
|
-
describe IMW::
|
5
|
+
describe IMW::Archives::Tarbz2 do
|
6
6
|
@cannot_append = true
|
7
7
|
before do
|
8
8
|
@extension = 'tar.bz2'
|
@@ -11,7 +11,7 @@ describe IMW::Resources::Archives::Tarbz2 do
|
|
11
11
|
it_should_behave_like 'an archive of files'
|
12
12
|
end
|
13
13
|
|
14
|
-
describe IMW::
|
14
|
+
describe IMW::Archives::Tarbz2 do
|
15
15
|
before do
|
16
16
|
@extension = 'tar.bz2'
|
17
17
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require File.dirname(__FILE__) + "
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
2
|
require File.dirname(__FILE__) + "/../archive_spec"
|
3
|
-
require File.dirname(__FILE__) + "/../
|
3
|
+
require File.dirname(__FILE__) + "/../compressed_files_spec"
|
4
4
|
|
5
|
-
describe IMW::
|
5
|
+
describe IMW::Archives::Targz do
|
6
6
|
@cannot_append = true
|
7
7
|
before do
|
8
8
|
@extension = 'tar.gz'
|
@@ -12,7 +12,7 @@ describe IMW::Resources::Archives::Targz do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
|
15
|
-
describe IMW::
|
15
|
+
describe IMW::Archives::Targz do
|
16
16
|
before do
|
17
17
|
@extension = 'tar.gz'
|
18
18
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require File.dirname(__FILE__) + "
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
2
|
require File.dirname(__FILE__) + "/../archive_spec"
|
3
3
|
|
4
|
-
describe IMW::
|
4
|
+
describe IMW::Archives::Zip do
|
5
5
|
|
6
6
|
before do
|
7
7
|
@extension = 'zip'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
|
+
require File.dirname(__FILE__) + "/../compressed_files_spec"
|
3
|
+
|
4
|
+
describe IMW::CompressedFiles::Bz2 do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@extension = 'bz2'
|
8
|
+
end
|
9
|
+
|
10
|
+
it_should_behave_like 'a compressed file'
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
|
+
require File.dirname(__FILE__) + "/../compressed_files_spec"
|
3
|
+
|
4
|
+
describe IMW::CompressedFiles::Gz do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@extension = 'gz'
|
8
|
+
end
|
9
|
+
|
10
|
+
it_should_behave_like 'a compressed file'
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../spec_helper')
|
2
2
|
|
3
3
|
# To use this shared example group define an instance variable
|
4
4
|
# <tt>@extension</tt> in your tests:
|
@@ -10,8 +10,8 @@ require File.join(File.dirname(__FILE__),'../../spec_helper')
|
|
10
10
|
#
|
11
11
|
# it_should_behave_like "a compressed file"
|
12
12
|
#
|
13
|
-
# The <tt>@extension</tt> should correspond to an IMW
|
14
|
-
#
|
13
|
+
# The <tt>@extension</tt> should correspond to an IMW module with a
|
14
|
+
# registered handler.
|
15
15
|
|
16
16
|
share_examples_for "a compressed file" do
|
17
17
|
include Spec::Matchers::IMW
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Formats::Csv do
|
4
4
|
# we don't test Tsv as the differences from Csv are trivial and
|
5
5
|
# effect only code within the FasterCSV library
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Formats::Json do
|
4
4
|
|
5
5
|
before do
|
6
6
|
@sample = IMW.open(File.join(IMWTest::DATA_DIR, 'sample.json'))
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Formats::Xml do
|
4
4
|
# just spec Xml now as the others are identical
|
5
5
|
|
6
6
|
before do
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Formats::Yaml do
|
4
4
|
|
5
5
|
before do
|
6
6
|
@sample = IMW.open(File.join(IMWTest::DATA_DIR, 'sample.yaml'))
|
data/spec/imw/resource_spec.rb
CHANGED
@@ -17,10 +17,10 @@ describe IMW::Resource do
|
|
17
17
|
|
18
18
|
it "should print the modules it's been extended by when raising an IMW::NoMethodError" do
|
19
19
|
begin
|
20
|
-
@resource.extend(IMW::
|
20
|
+
@resource.extend(IMW::Schemes::Local::Base)
|
21
21
|
@resource.do_something
|
22
22
|
rescue IMW::NoMethodError => e
|
23
|
-
e.message.should match(/extended by IMW::
|
23
|
+
e.message.should match(/extended by IMW::Schemes::Local::Base/)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -28,7 +28,7 @@ describe IMW::Resource do
|
|
28
28
|
describe "parsing various and sundry URIs should correctly parse a" do
|
29
29
|
|
30
30
|
before do
|
31
|
-
IMW::
|
31
|
+
IMW::Resource.should_receive(:extend_resource!).with(an_instance_of(IMW::Resource))
|
32
32
|
end
|
33
33
|
|
34
34
|
it "local file path" do
|
@@ -68,7 +68,7 @@ describe IMW::Resource do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should open a URI without attempting to extend with modules if so asked" do
|
71
|
-
IMW::
|
71
|
+
IMW::Resource.should_not_receive(:extend_resource!)
|
72
72
|
IMW::Resource.new("/path/to/some/file.txt", :skip_modules => true)
|
73
73
|
end
|
74
74
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Schemes::HDFS do
|
4
4
|
before do
|
5
5
|
def fake_hdfs_resource path, num_dirs=nil, num_files=nil, size=nil
|
6
6
|
if num_dirs && num_files && size
|
@@ -8,7 +8,7 @@ describe IMW::Resources::Schemes::HDFS do
|
|
8
8
|
else
|
9
9
|
response = ""
|
10
10
|
end
|
11
|
-
IMW::
|
11
|
+
IMW::Schemes::HDFS.should_receive(:fs).with(:count, path).and_return(response)
|
12
12
|
IMW.open("hdfs://#{path}")
|
13
13
|
end
|
14
14
|
@path = '/path/to/myfile'
|
@@ -30,13 +30,13 @@ describe IMW::Resources::Schemes::HDFS do
|
|
30
30
|
|
31
31
|
it "should execute the correct command to delete the path" do
|
32
32
|
resource = fake_hdfs_resource(@path, 2, 3, 1000)
|
33
|
-
IMW::
|
33
|
+
IMW::Schemes::HDFS.should_receive(:fs).with(:rm, resource.path)
|
34
34
|
resource.rm
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should execute the correct command to delete the path when skipping the trash" do
|
38
38
|
resource = fake_hdfs_resource(@path, 2, 3, 1000)
|
39
|
-
IMW::
|
39
|
+
IMW::Schemes::HDFS.should_receive(:fs).with(:rm, '-skipTrash', resource.path)
|
40
40
|
resource.rm :skip_trash => true
|
41
41
|
end
|
42
42
|
|
@@ -46,7 +46,7 @@ describe IMW::Resources::Schemes::HDFS do
|
|
46
46
|
resource.num_files.should == 1
|
47
47
|
resource.exist?.should be_true
|
48
48
|
resource.is_directory?.should be_false
|
49
|
-
resource.resource_modules.should include(IMW::
|
49
|
+
resource.resource_modules.should include(IMW::Schemes::HDFSFile)
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should recognize a directory and extend it properly" do
|
@@ -55,7 +55,7 @@ describe IMW::Resources::Schemes::HDFS do
|
|
55
55
|
resource.num_files.should == 1
|
56
56
|
resource.exist?.should be_true
|
57
57
|
resource.is_directory?.should be_true
|
58
|
-
resource.resource_modules.should include(IMW::
|
58
|
+
resource.resource_modules.should include(IMW::Schemes::HDFSDirectory)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'
|
1
|
+
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Schemes::HTTP do
|
4
4
|
|
5
5
|
describe "finding its effective basename" do
|
6
6
|
it "should use the real basename when present" do
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Schemes::Local::Base do
|
4
4
|
|
5
5
|
it "should not extend a local file with LocalDirectory" do
|
6
6
|
@file = IMW::Resource.new('foo.txt', :skip_modules => true)
|
7
|
-
@file.should_not_receive(:extend).with(IMW::
|
7
|
+
@file.should_not_receive(:extend).with(IMW::Schemes::Local::LocalDirectory)
|
8
8
|
@file.extend_appropriately!
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should not extend a local directory with LocalFile" do
|
12
12
|
@dir = IMW::Resource.new(IMWTest::TMP_DIR, :skip_modules => true)
|
13
|
-
@dir.should_not_receive(:extend).with(IMW::
|
13
|
+
@dir.should_not_receive(:extend).with(IMW::Schemes::Local::LocalFile)
|
14
14
|
@dir.extend_appropriately!
|
15
15
|
end
|
16
16
|
|
@@ -19,7 +19,7 @@ describe IMW::Resources::LocalObj do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
describe IMW::
|
22
|
+
describe IMW::Schemes::Local::LocalFile do
|
23
23
|
before do
|
24
24
|
IMWTest::Random.file('original.txt')
|
25
25
|
@file = IMW::Resource.new('original.txt')
|
@@ -55,7 +55,7 @@ describe IMW::Resources::LocalFile do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
describe IMW::
|
58
|
+
describe IMW::Schemes::Local::LocalDirectory do
|
59
59
|
before do
|
60
60
|
FileUtils.mkdir_p('dir')
|
61
61
|
FileUtils.mkdir_p('dir/subdir')
|
@@ -1,11 +1,15 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Schemes::Remote::Base do
|
4
4
|
end
|
5
5
|
|
6
|
-
describe IMW::
|
6
|
+
describe IMW::Schemes::Remote::RemoteFile do
|
7
7
|
|
8
|
-
before
|
8
|
+
before do
|
9
|
+
# skip modules or else it will automatically become HTML!
|
10
|
+
@file = IMW.open('http://www.google.com', :skip_modules => true)
|
11
|
+
@file.extend(IMW::Schemes::Remote::Base)
|
12
|
+
end
|
9
13
|
|
10
14
|
describe 'with the file' do
|
11
15
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
2
|
|
3
|
-
describe IMW::
|
3
|
+
describe IMW::Tools::Archiver do
|
4
4
|
before do
|
5
5
|
@name = 'foobar'
|
6
6
|
|
@@ -37,7 +37,7 @@ describe IMW::Transforms::Archiver do
|
|
37
37
|
IMWTest::Random.file path
|
38
38
|
end
|
39
39
|
|
40
|
-
@archiver = IMW::
|
40
|
+
@archiver = IMW::Tools::Archiver.new @name, @all_files
|
41
41
|
end
|
42
42
|
|
43
43
|
after do
|