imw 0.1.1 → 0.2.0
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/.gitignore +4 -1
- data/Rakefile +10 -0
- data/TODO +18 -0
- data/VERSION +1 -1
- data/bin/imw +1 -1
- data/etc/imwrc.rb +0 -50
- data/examples/dataset.rb +12 -0
- data/lib/imw/boot.rb +55 -9
- data/lib/imw/dataset/paths.rb +15 -24
- data/lib/imw/dataset/workflow.rb +131 -72
- data/lib/imw/dataset.rb +94 -186
- data/lib/imw/parsers/html_parser.rb +1 -1
- data/lib/imw/parsers.rb +1 -1
- data/lib/imw/repository.rb +3 -27
- data/lib/imw/resource.rb +190 -0
- data/lib/imw/resources/archive.rb +97 -0
- data/lib/imw/resources/archives_and_compressed/bz2.rb +18 -0
- data/lib/imw/resources/archives_and_compressed/gz.rb +18 -0
- data/lib/imw/resources/archives_and_compressed/rar.rb +23 -0
- data/lib/imw/resources/archives_and_compressed/tar.rb +23 -0
- data/lib/imw/resources/archives_and_compressed/tarbz2.rb +78 -0
- data/lib/imw/resources/archives_and_compressed/targz.rb +78 -0
- data/lib/imw/resources/archives_and_compressed/zip.rb +57 -0
- data/lib/imw/resources/archives_and_compressed.rb +32 -0
- data/lib/imw/resources/compressed_file.rb +89 -0
- data/lib/imw/resources/compressible.rb +77 -0
- data/lib/imw/resources/formats/delimited.rb +92 -0
- data/lib/imw/resources/formats/excel.rb +125 -0
- data/lib/imw/resources/formats/json.rb +53 -0
- data/lib/imw/resources/formats/sgml.rb +72 -0
- data/lib/imw/resources/formats/yaml.rb +53 -0
- data/lib/imw/resources/formats.rb +32 -0
- data/lib/imw/resources/local.rb +198 -0
- data/lib/imw/resources/remote.rb +110 -0
- data/lib/imw/resources/schemes/hdfs.rb +242 -0
- data/lib/imw/resources/schemes/http.rb +161 -0
- data/lib/imw/resources/schemes/s3.rb +137 -0
- data/lib/imw/resources/schemes.rb +19 -0
- data/lib/imw/resources.rb +118 -0
- data/lib/imw/runner.rb +5 -4
- data/lib/imw/transforms/archiver.rb +215 -0
- data/lib/imw/transforms/transferer.rb +103 -0
- data/lib/imw/transforms.rb +8 -0
- data/lib/imw/utils/error.rb +26 -30
- data/lib/imw/utils/extensions/array.rb +5 -15
- data/lib/imw/utils/extensions/hash.rb +6 -16
- data/lib/imw/utils/extensions/hpricot.rb +0 -14
- data/lib/imw/utils/extensions/string.rb +5 -15
- data/lib/imw/utils/extensions/symbol.rb +0 -13
- data/lib/imw/utils/extensions.rb +65 -0
- data/lib/imw/utils/log.rb +14 -13
- data/lib/imw/utils/misc.rb +0 -6
- data/lib/imw/utils/paths.rb +101 -42
- data/lib/imw/utils/version.rb +8 -9
- data/lib/imw/utils.rb +2 -18
- data/lib/imw.rb +92 -17
- data/spec/data/sample.csv +1 -1
- data/spec/data/sample.json +1 -0
- data/spec/data/sample.tsv +1 -1
- data/spec/data/sample.txt +1 -1
- data/spec/data/sample.xml +1 -1
- data/spec/data/sample.yaml +1 -1
- data/spec/imw/dataset/paths_spec.rb +32 -0
- data/spec/imw/dataset/workflow_spec.rb +41 -0
- data/spec/imw/resource_spec.rb +79 -0
- data/spec/imw/resources/archive_spec.rb +69 -0
- data/spec/imw/resources/archives_and_compressed/bz2_spec.rb +15 -0
- data/spec/imw/resources/archives_and_compressed/gz_spec.rb +15 -0
- data/spec/imw/resources/archives_and_compressed/rar_spec.rb +16 -0
- data/spec/imw/resources/archives_and_compressed/tar_spec.rb +16 -0
- data/spec/imw/resources/archives_and_compressed/tarbz2_spec.rb +24 -0
- data/spec/imw/resources/archives_and_compressed/targz_spec.rb +21 -0
- data/spec/imw/resources/archives_and_compressed/zip_spec.rb +16 -0
- data/spec/imw/resources/compressed_file_spec.rb +48 -0
- data/spec/imw/resources/compressible_spec.rb +36 -0
- data/spec/imw/resources/formats/delimited_spec.rb +33 -0
- data/spec/imw/resources/formats/json_spec.rb +32 -0
- data/spec/imw/resources/formats/sgml_spec.rb +24 -0
- data/spec/imw/resources/formats/yaml_spec.rb +41 -0
- data/spec/imw/resources/local_spec.rb +98 -0
- data/spec/imw/resources/remote_spec.rb +35 -0
- data/spec/imw/resources/schemes/hdfs_spec.rb +61 -0
- data/spec/imw/resources/schemes/http_spec.rb +19 -0
- data/spec/imw/resources/schemes/s3_spec.rb +19 -0
- data/spec/imw/transforms/archiver_spec.rb +120 -0
- data/spec/imw/transforms/transferer_spec.rb +113 -0
- data/spec/imw/utils/paths_spec.rb +5 -33
- data/spec/imw/utils/shared_paths_spec.rb +29 -0
- data/spec/spec_helper.rb +5 -5
- data/spec/support/paths_matcher.rb +67 -0
- data/spec/support/random.rb +39 -36
- metadata +88 -75
- data/lib/imw/dataset/task.rb +0 -41
- data/lib/imw/files/archive.rb +0 -113
- data/lib/imw/files/basicfile.rb +0 -122
- data/lib/imw/files/binary.rb +0 -28
- data/lib/imw/files/compressed_file.rb +0 -93
- data/lib/imw/files/compressed_files_and_archives.rb +0 -334
- data/lib/imw/files/compressible.rb +0 -103
- data/lib/imw/files/csv.rb +0 -113
- data/lib/imw/files/directory.rb +0 -62
- data/lib/imw/files/excel.rb +0 -84
- data/lib/imw/files/json.rb +0 -41
- data/lib/imw/files/sgml.rb +0 -46
- data/lib/imw/files/text.rb +0 -68
- data/lib/imw/files/yaml.rb +0 -46
- data/lib/imw/files.rb +0 -125
- data/lib/imw/packagers/archiver.rb +0 -126
- data/lib/imw/packagers/s3_mover.rb +0 -36
- data/lib/imw/packagers.rb +0 -8
- data/lib/imw/utils/components.rb +0 -61
- data/lib/imw/utils/config.rb +0 -46
- data/lib/imw/utils/extensions/class/attribute_accessors.rb +0 -8
- data/lib/imw/utils/extensions/core.rb +0 -27
- data/lib/imw/utils/extensions/dir.rb +0 -24
- data/lib/imw/utils/extensions/file_core.rb +0 -64
- data/lib/imw/utils/extensions/typed_struct.rb +0 -22
- data/lib/imw/utils/extensions/uri.rb +0 -59
- data/lib/imw/utils/view/dump_csv.rb +0 -112
- data/lib/imw/utils/view/dump_csv_older.rb +0 -117
- data/lib/imw/utils/view.rb +0 -113
- data/spec/imw/dataset/datamapper/uri_spec.rb +0 -43
- data/spec/imw/dataset/datamapper_spec_helper.rb +0 -11
- data/spec/imw/files/archive_spec.rb +0 -118
- data/spec/imw/files/basicfile_spec.rb +0 -121
- data/spec/imw/files/bz2_spec.rb +0 -32
- data/spec/imw/files/compressed_file_spec.rb +0 -96
- data/spec/imw/files/compressible_spec.rb +0 -100
- data/spec/imw/files/file_spec.rb +0 -144
- data/spec/imw/files/gz_spec.rb +0 -32
- data/spec/imw/files/rar_spec.rb +0 -33
- data/spec/imw/files/tar_spec.rb +0 -31
- data/spec/imw/files/text_spec.rb +0 -23
- data/spec/imw/files/zip_spec.rb +0 -31
- data/spec/imw/files_spec.rb +0 -38
- data/spec/imw/packagers/archiver_spec.rb +0 -125
- data/spec/imw/packagers/s3_mover_spec.rb +0 -7
- data/spec/imw/utils/extensions/file_core_spec.rb +0 -72
- data/spec/imw/utils/extensions/find_spec.rb +0 -113
- data/spec/imw/workflow/rip/local_spec.rb +0 -89
- data/spec/imw/workflow/rip_spec.rb +0 -27
- data/spec/support/archive_contents_matcher.rb +0 -94
- data/spec/support/directory_contents_matcher.rb +0 -61
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/../../spec_helper"
|
|
2
|
-
|
|
3
|
-
require "imw"
|
|
4
|
-
|
|
5
|
-
describe IMW::Files::BasicFile do
|
|
6
|
-
|
|
7
|
-
describe "a local file" do
|
|
8
|
-
before do
|
|
9
|
-
@path = "foobar.txt"
|
|
10
|
-
IMWTest::Random.file @path
|
|
11
|
-
@file = IMW.open(@path)
|
|
12
|
-
|
|
13
|
-
@new_path = "foobar2.txt"
|
|
14
|
-
|
|
15
|
-
@new_dir = "bazbaz"
|
|
16
|
-
FileUtils.mkdir_p(@new_dir)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should now that it's local" do
|
|
20
|
-
@file.local?.should be_true
|
|
21
|
-
@file.remote?.should be_false
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "knows the parts of its URI" do
|
|
25
|
-
@file.host.should == nil
|
|
26
|
-
@file.path.should == File.join(IMWTest::TMP_DIR, @path)
|
|
27
|
-
@file.dirname.should == IMWTest::TMP_DIR
|
|
28
|
-
@file.basename.should == @path
|
|
29
|
-
@file.extname.should == ".txt"
|
|
30
|
-
@file.name.should == "foobar"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "can copy a file" do
|
|
34
|
-
@file.cp(@new_path)
|
|
35
|
-
@path.should exist
|
|
36
|
-
@new_path.should exist
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "can move a file" do
|
|
40
|
-
@file.mv(@new_path)
|
|
41
|
-
@path.should_not exist
|
|
42
|
-
@new_path.should exist
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "can delete a file" do
|
|
46
|
-
@file.rm!
|
|
47
|
-
@path.should_not exist
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "can copy to a directory" do
|
|
51
|
-
@file.cp_to_dir(@new_dir)
|
|
52
|
-
@new_dir.should contain(@path)
|
|
53
|
-
@path.should exist
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "can move to a directory" do
|
|
57
|
-
@file.mv_to_dir(@new_dir)
|
|
58
|
-
@new_dir.should contain(@path)
|
|
59
|
-
@path.should_not exist
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
[:executable?, :executable_real?, :file?, :directory?, :ftype, :owned?, :pipe?, :readable?, :readable_real?, :setgid?, :setuid?, :size, :size?, :socket?, :split, :stat, :sticky?, :writable?, :writable_real?, :zero?].each do |method|
|
|
63
|
-
it "should respond to #{method}" do
|
|
64
|
-
@file.send(method).should == File.send(method, @file.path)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
describe "a remote file" do
|
|
71
|
-
before do
|
|
72
|
-
@path = "http://www.google.com"
|
|
73
|
-
@file = IMW.open(@path)
|
|
74
|
-
|
|
75
|
-
@new_path = "foobar2.txt"
|
|
76
|
-
|
|
77
|
-
@new_dir = "bazbaz"
|
|
78
|
-
FileUtils.mkdir_p(@new_dir)
|
|
79
|
-
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should know that it's remote" do
|
|
83
|
-
@file.local?.should be_false
|
|
84
|
-
@file.remote?.should be_true
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "knows the parts of its URI" do
|
|
88
|
-
@file.host.should == "www.google.com"
|
|
89
|
-
@file.path.should == ''
|
|
90
|
-
@file.dirname.should == '.'
|
|
91
|
-
@file.basename.should == ''
|
|
92
|
-
@file.extname.should == ''
|
|
93
|
-
@file.name.should == ''
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "can open the file" do
|
|
97
|
-
@file.should be
|
|
98
|
-
@file.class.should == IMW::Files::Text
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it "should raise an error when trying to write" do
|
|
102
|
-
lambda { IMW.open!(@path) }.should raise_error
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "can copy a file" do
|
|
106
|
-
@file.cp(@new_path)
|
|
107
|
-
@new_path.should exist
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "can move a file" do
|
|
111
|
-
@file.mv(@new_path)
|
|
112
|
-
@new_path.should exist
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should raise an error when trying to remove" do
|
|
116
|
-
lambda { @file.rm }.should raise_error
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
|
data/spec/imw/files/bz2_spec.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. spec/imw/model/files/bz2_spec.rb -- spec for bz2 files
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# RSpec code for <tt>IMW::Files::Bz2</tt>.
|
|
7
|
-
#
|
|
8
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
9
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
10
|
-
# License:: GPL 3.0
|
|
11
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
12
|
-
#
|
|
13
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
14
|
-
require IMW_SPEC_DIR+'/imw/model/files/compressed_file_spec'
|
|
15
|
-
|
|
16
|
-
require 'imw/model/files/bz2'
|
|
17
|
-
describe IMW::Files::Bz2 do
|
|
18
|
-
|
|
19
|
-
before(:all) do
|
|
20
|
-
@root_directory = IMW::DIRECTORIES[:dump] + "/bz2_spec"
|
|
21
|
-
|
|
22
|
-
@path = @root_directory + "/file.txt.bz2"
|
|
23
|
-
@file = IMW::Files::Bz2.new(@path)
|
|
24
|
-
|
|
25
|
-
@copy_of_original_path = @root_directory + "/file_copy.txt.bz2"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it_should_behave_like "a compressed file"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# puts "#{File.basename(__FILE__)}: You squeeze yourself and your Monkeywrench through a narrow opening, twice." # at bottom
|
|
32
|
-
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. spec/imw/model/files/compressed_file_spec.rb -- shared specs for compressed files
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# Defines a shared spec ("a compressed file") for inclusion in specs
|
|
7
|
-
# for classes which subclass <tt>IMW::Files::CompressedFile</tt>.
|
|
8
|
-
#
|
|
9
|
-
# An including spec must define the following instance variables:
|
|
10
|
-
#
|
|
11
|
-
# <tt>@root_directory</tt>:: directory inside which all files will be
|
|
12
|
-
# created
|
|
13
|
-
#
|
|
14
|
-
# <tt>@file</tt>:: the file to be decompressed
|
|
15
|
-
#
|
|
16
|
-
# <tt>@copy_of_original_path</tt>:: path where a copy of
|
|
17
|
-
# <tt>@file</tt> can be put during testing
|
|
18
|
-
#
|
|
19
|
-
# An including spec can also optionally redefine the
|
|
20
|
-
# +create_compressed_file+ method to create the proper file during
|
|
21
|
-
# each example.
|
|
22
|
-
#
|
|
23
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
24
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
25
|
-
# License:: GPL 3.0
|
|
26
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
27
|
-
#
|
|
28
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
29
|
-
require IMW_SPEC_DIR+'/imw/matchers/file_contents_matcher'
|
|
30
|
-
|
|
31
|
-
require 'imw/utils/random'
|
|
32
|
-
require 'imw/model/files/text'
|
|
33
|
-
share_examples_for "a compressed file" do
|
|
34
|
-
|
|
35
|
-
include Spec::Matchers::IMW
|
|
36
|
-
|
|
37
|
-
def create_compressed_file
|
|
38
|
-
text_file_path = @root_directory + "/sample.txt"
|
|
39
|
-
IMW::Random.file text_file_path
|
|
40
|
-
text_file = IMW::Files::Text.new(text_file_path)
|
|
41
|
-
compressed_text_file = text_file.compress! @file.compression[:program]
|
|
42
|
-
compressed_text_file.mv @file.path
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
describe "when decompressing" do
|
|
46
|
-
|
|
47
|
-
before(:each) do
|
|
48
|
-
FileUtils.mkdir_p @root_directory
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
after(:each) do
|
|
52
|
-
FileUtils.rm_rf @root_directory
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
describe "and discarding original file" do
|
|
56
|
-
|
|
57
|
-
it "should raise an error if the compressed file doesn't exist" do
|
|
58
|
-
lambda {@file.decompress! }.should raise_error(IMW::PathError)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should decompress a compressed file which exists" do
|
|
62
|
-
create_compressed_file
|
|
63
|
-
decompressed_file = @file.decompress!
|
|
64
|
-
decompressed_file.exist?.should eql(true)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should not exist after decompression" do
|
|
68
|
-
create_compressed_file
|
|
69
|
-
decompressed_file = @file.decompress!
|
|
70
|
-
@file.exist?.should eql(false)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
describe "and keeping original file" do
|
|
75
|
-
|
|
76
|
-
it "should raise an error if the compressed file doesn't exist" do
|
|
77
|
-
lambda {@file.decompress }.should raise_error(IMW::PathError)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should decompress a compressed file which exists" do
|
|
81
|
-
create_compressed_file
|
|
82
|
-
decompressed_file = @file.decompress
|
|
83
|
-
decompressed_file.exist?.should eql(true)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "should be identical to how it was before decompression" do
|
|
87
|
-
create_compressed_file
|
|
88
|
-
@file.cp @copy_of_original_path
|
|
89
|
-
decompressed_file = @file.decompress
|
|
90
|
-
@copy_of_original_path.should have_contents_matching_those_of(@file.path)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end unless defined? IMW_FILES_COMPRESSEDFILE_SHARED_SPEC
|
|
95
|
-
|
|
96
|
-
# puts "#{File.basename(__FILE__)}: You whack the cabinet with your Monkeywrench sending files and papers everywhere. You smile." # at bottom
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. spec/imw/model/files/compressible_spec.rb -- spec for compressible module
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# Defines shared example groups ("a file compressible by bzip2", "a
|
|
7
|
-
# file compressible by gzip") for the
|
|
8
|
-
# <tt>IMW::Files::Compressible</tt> module to be included in specs for
|
|
9
|
-
# classes which mixin the <tt>IMW::Files::Compressible</tt> module.
|
|
10
|
-
# The specs for these classes should define, for each example, the
|
|
11
|
-
# following instance variables:
|
|
12
|
-
#
|
|
13
|
-
# <tt>@file</tt>:: an object to be compressed which is a subclass of
|
|
14
|
-
# <tt>IMW::Files::BasicFile</tt>.
|
|
15
|
-
#
|
|
16
|
-
# <tt>@copy_of_original_path</tt>:: a string giving a path where a
|
|
17
|
-
# copy of <tt>@file</tt> can be made for comparison purposes.
|
|
18
|
-
#
|
|
19
|
-
# The including spec should also define a method +create_file+ for
|
|
20
|
-
# creating a real file at the path corresponding to <tt>@file</tt>.
|
|
21
|
-
#
|
|
22
|
-
# The including spec must handle the +before+ and +after+ clauses for
|
|
23
|
-
# the creation and removal of files and directories; this spec doesn't
|
|
24
|
-
# handle those details.
|
|
25
|
-
#
|
|
26
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
27
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
28
|
-
# License:: GPL 3.0
|
|
29
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
30
|
-
#
|
|
31
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
32
|
-
require IMW_SPEC_DIR+'/imw/matchers/directory_contents_matcher'
|
|
33
|
-
require IMW_SPEC_DIR+'/imw/matchers/file_contents_matcher'
|
|
34
|
-
require 'imw/utils/random'
|
|
35
|
-
|
|
36
|
-
share_examples_for "a file compressible by bzip2" do
|
|
37
|
-
|
|
38
|
-
describe "when compressing with bzip2" do
|
|
39
|
-
before(:each) do
|
|
40
|
-
@program = :bzip2
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it_should_behave_like "a file compressible by a given program"
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
share_examples_for "a file compressible by gzip" do
|
|
48
|
-
describe "when compressing with gzip" do
|
|
49
|
-
before(:each) do
|
|
50
|
-
@program = :gzip
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it_should_behave_like "a file compressible by a given program"
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
share_examples_for "a file compressible by a given program" do
|
|
58
|
-
|
|
59
|
-
include Spec::Matchers::IMW
|
|
60
|
-
|
|
61
|
-
describe "and discarding original file" do
|
|
62
|
-
|
|
63
|
-
it "should raise an error when compressing a non-existing file" do
|
|
64
|
-
lambda { @file.compress! @program }.should raise_error(IMW::PathError)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should compress itself to the correct path" do
|
|
68
|
-
create_file
|
|
69
|
-
compressed_file = @file.compress! @program
|
|
70
|
-
compressed_file.exist?.should eql(true)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should not exist after compressing itself" do
|
|
74
|
-
create_file
|
|
75
|
-
compressed_file = @file.compress! @program
|
|
76
|
-
@file.exist?.should eql(false)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
describe "and keeping original file" do
|
|
81
|
-
it "should raise an error when compressing a non-existing file" do
|
|
82
|
-
lambda { @file.compress @program }.should raise_error(IMW::PathError)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should compress itself to the correct path" do
|
|
86
|
-
create_file
|
|
87
|
-
compressed_file = @file.compress @program
|
|
88
|
-
compressed_file.exist?.should eql(true)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should be identical to the way it was before it was compressed" do
|
|
92
|
-
create_file
|
|
93
|
-
@file.cp @copy_of_original_path
|
|
94
|
-
compressed_file = @file.compress @program
|
|
95
|
-
@file.path.should have_contents_matching_those_of(@copy_of_original_path)
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# puts "#{File.basename(__FILE__)}: Is it squishy? Give it a squeeze and see!" # at bottom
|
data/spec/imw/files/file_spec.rb
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. spec/imw/model/files/basicfile_spec.rb -- spec for a file object
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# RSpec test code for <tt>IMW::Files::BasicFile</tt>.
|
|
7
|
-
#
|
|
8
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
9
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
10
|
-
# License:: GPL 3.0
|
|
11
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
12
|
-
#
|
|
13
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
14
|
-
require IMW_SPEC_DIR+'/imw/matchers/file_contents_matcher'
|
|
15
|
-
|
|
16
|
-
require 'imw/utils/random'
|
|
17
|
-
require 'imw/model/files/basicfile'
|
|
18
|
-
|
|
19
|
-
describe IMW::Files::BasicFile do
|
|
20
|
-
|
|
21
|
-
include Spec::Matchers::IMW
|
|
22
|
-
|
|
23
|
-
def create_file
|
|
24
|
-
IMW::Random.file @path
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
before(:all) do
|
|
28
|
-
@root_directory = IMW::DIRECTORIES[:dump] + "/file_spec"
|
|
29
|
-
FileUtils.mkdir @root_directory
|
|
30
|
-
|
|
31
|
-
@path = @root_directory + "/file.ext"
|
|
32
|
-
@copy_of_original_path = @root_directory + "/file_copy.ext"
|
|
33
|
-
|
|
34
|
-
@file = IMW::Files::BasicFile.new(@path)
|
|
35
|
-
|
|
36
|
-
@new_path_same_extension = @root_directory + "/file_new.ext"
|
|
37
|
-
@new_path_different_extension = @root_directory + "/file_new.next"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
after(:each) do
|
|
41
|
-
FileUtils.rm Dir.glob(@root_directory + "/*")
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
after(:all) do
|
|
45
|
-
FileUtils.rm_rf @root_directory
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
describe "(attributes)" do
|
|
49
|
-
it "should have the correct path" do
|
|
50
|
-
@file.path.should eql(@path)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should have the correct directory name" do
|
|
54
|
-
@file.dirname.should eql(@root_directory)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should have the correct basename" do
|
|
58
|
-
@file.basename.should eql("file.ext")
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should have the correct extension" do
|
|
62
|
-
@file.extname.should eql(".ext")
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should have the correct name" do
|
|
66
|
-
@file.name.should eql("file")
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
describe "(existence)" do
|
|
72
|
-
it "should not exist if there is no file matching it on disk" do
|
|
73
|
-
@file.exist?.should eql(false)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should exist if there is a file matching it on disk" do
|
|
77
|
-
create_file
|
|
78
|
-
@file.exist?.should eql(true)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
describe "(deletion)" do
|
|
83
|
-
it "should raise an error if it tries to delete itself but it doesn't exist" do
|
|
84
|
-
lambda { @file.rm }.should raise_error(IMW::PathError)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should delete itself if it it exists on disk" do
|
|
88
|
-
create_file
|
|
89
|
-
@file.rm
|
|
90
|
-
@file.exist?.should eql(false)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
describe "(copying)" do
|
|
95
|
-
it "should raise an error if it tries to copy itself but it doesn't exist" do
|
|
96
|
-
lambda { @file.cp @new_path_same_extension }.should raise_error(IMW::PathError)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "should copy itself with the same extension" do
|
|
100
|
-
create_file
|
|
101
|
-
new_file = @file.cp @new_path_same_extension
|
|
102
|
-
new_file.path.should have_contents_matching_those_of(@file.path)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "should raise an error if it tries to copy itself with a differing extension without :force" do
|
|
106
|
-
create_file
|
|
107
|
-
lambda { @file.cp @new_path_different_extension }.should raise_error(IMW::Error)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "should copy itself with a differing extension with :force" do
|
|
111
|
-
create_file
|
|
112
|
-
new_file = @file.cp @new_path_different_extension, :force => true
|
|
113
|
-
new_file.path.should have_contents_matching_those_of(@file.path)
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
describe "(moving)" do
|
|
118
|
-
it "should raise an error if it tries to move itself but it doesn't exist" do
|
|
119
|
-
lambda { @file.mv @new_path_same_extension }.should raise_error(IMW::PathError)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should move itself with the same extension" do
|
|
123
|
-
create_file
|
|
124
|
-
old_file = @file.cp @copy_of_original_path
|
|
125
|
-
new_file = @file.mv @new_path_same_extension
|
|
126
|
-
new_file.path.should have_contents_matching_those_of(old_file.path)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "should raise an error if it tries to move itself with a differing extension without :force" do
|
|
130
|
-
create_file
|
|
131
|
-
lambda { @file.mv @new_path_different_extension }.should raise_error(IMW::Error)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
it "should move itself with a differing extension with :force" do
|
|
135
|
-
create_file
|
|
136
|
-
old_file = @file.cp @copy_of_original_path
|
|
137
|
-
new_file = @file.mv @new_path_different_extension, :force => true
|
|
138
|
-
new_file.path.should have_contents_matching_those_of(old_file.path)
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
# puts "#{File.basename(__FILE__)}: You place the manilla file folder between the rusty teeth of your Monkeywrench and tighten..." # at bottom
|
data/spec/imw/files/gz_spec.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. spec/imw/model/files/gz_spec.rb -- spec for gz files
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# RSpec code for <tt>IMW::Files::Gz</tt>.
|
|
7
|
-
#
|
|
8
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
9
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
10
|
-
# License:: GPL 3.0
|
|
11
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
12
|
-
#
|
|
13
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
14
|
-
require IMW_SPEC_DIR+'/imw/model/files/compressed_file_spec'
|
|
15
|
-
|
|
16
|
-
require 'imw/utils'
|
|
17
|
-
require 'imw/model/files/gz'
|
|
18
|
-
describe IMW::Files::Gz do
|
|
19
|
-
|
|
20
|
-
before(:all) do
|
|
21
|
-
@root_directory = IMW::DIRECTORIES[:dump] + "/gz_spec"
|
|
22
|
-
|
|
23
|
-
@path = @root_directory + "/file.txt.gz"
|
|
24
|
-
@file = IMW::Files::Gz.new(@path)
|
|
25
|
-
|
|
26
|
-
@copy_of_original_path = @root_directory + "/file_copy.txt.gz"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it_should_behave_like "a compressed file"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# puts "#{File.basename(__FILE__)}: You squeeze yourself and your Monkeywrench through a narrow opening." # at bottom
|
data/spec/imw/files/rar_spec.rb
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. test/imw/model/files/rar_spec.rb -- tests of rar file
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# RSpec tests for <tt>IMW::Files::Rar</tt> class.
|
|
7
|
-
#
|
|
8
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
9
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
10
|
-
# License:: GPL 3.0
|
|
11
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
12
|
-
#
|
|
13
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
14
|
-
require IMW_SPEC_DIR+'/imw/model/files/archive_spec'
|
|
15
|
-
|
|
16
|
-
unless IMW::SpecConfig::SKIP_ARCHIVE_FORMATS.include? :rar
|
|
17
|
-
require 'imw/model/files/rar'
|
|
18
|
-
describe IMW::Files::Rar do
|
|
19
|
-
|
|
20
|
-
before(:all) do
|
|
21
|
-
@root_directory = ::IMW::DIRECTORIES[:dump] + "/archive_test"
|
|
22
|
-
@initial_directory = @root_directory + "/create_and_append/initial"
|
|
23
|
-
@appending_directory = @root_directory + "/create_and_append/appending"
|
|
24
|
-
@extraction_directory = ::IMW::DIRECTORIES[:dump] + "/extract"
|
|
25
|
-
@archive = IMW::Files::Rar.new(@root_directory + "/test.rar")
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it_should_behave_like "an archive of files"
|
|
29
|
-
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# puts "#{File.basename(__FILE__)}: You bang your Monkeywrench uselessly on the locked file cabinet." # at bottom
|
data/spec/imw/files/tar_spec.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. test/imw/model/files/tar_spec.rb -- tests of tar file
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# RSpec tests for <tt>IMW::Files::Tar</tt> class.
|
|
7
|
-
#
|
|
8
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
9
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
10
|
-
# License:: GPL 3.0
|
|
11
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
12
|
-
#
|
|
13
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
14
|
-
require IMW_SPEC_DIR+'/imw/model/files/archive_spec'
|
|
15
|
-
|
|
16
|
-
require 'imw/model/files/tar'
|
|
17
|
-
describe IMW::Files::Tar do
|
|
18
|
-
|
|
19
|
-
before(:all) do
|
|
20
|
-
@root_directory = ::IMW::DIRECTORIES[:dump] + "/archive_test"
|
|
21
|
-
@initial_directory = @root_directory + "/create_and_append/initial"
|
|
22
|
-
@appending_directory = @root_directory + "/create_and_append/appending"
|
|
23
|
-
@extraction_directory = ::IMW::DIRECTORIES[:dump] + "/extract"
|
|
24
|
-
@archive = IMW::Files::Tar.new(@root_directory + "/test.tar")
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it_should_behave_like "an archive of files"
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# puts "#{File.basename(__FILE__)}: The tar pits are just /wonderful/ today; really, you should go in for a dip!" # at bottom
|
data/spec/imw/files/text_spec.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(__FILE__),'../../spec_helper')
|
|
2
|
-
|
|
3
|
-
describe IMW::Files::Text do
|
|
4
|
-
|
|
5
|
-
before do
|
|
6
|
-
@path = "foobar.txt"
|
|
7
|
-
@text = <<EOF
|
|
8
|
-
Here is the first line
|
|
9
|
-
And here is the second
|
|
10
|
-
EOF
|
|
11
|
-
File.open(@path, 'w') { |f| f.write(@text) }
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "should return its entries" do
|
|
15
|
-
IMW.open(@path).entries.should == ["Here is the first line", "And here is the second"]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should be able to parse each line" do
|
|
19
|
-
file = IMW.open(@path)
|
|
20
|
-
results = file.parse :by_regexp => /^([^\s]+) ([^\s]+)/, :into_fields => [:word1, :word2]
|
|
21
|
-
file.parser.class.should == IMW::Parsers::RegexpParser
|
|
22
|
-
end
|
|
23
|
-
end
|
data/spec/imw/files/zip_spec.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# h2. test/imw/model/files/zip_spec.rb -- tests of zip file
|
|
3
|
-
#
|
|
4
|
-
# == About
|
|
5
|
-
#
|
|
6
|
-
# RSpec tests for <tt>IMW::Files::Zip</tt> class.
|
|
7
|
-
#
|
|
8
|
-
# Author:: (Philip flip Kromer, Dhruv Bansal) for Infinite Monkeywrench Project (mailto:coders@infochimps.org)
|
|
9
|
-
# Copyright:: Copyright (c) 2008 infochimps.org
|
|
10
|
-
# License:: GPL 3.0
|
|
11
|
-
# Website:: http://infinitemonkeywrench.org/
|
|
12
|
-
#
|
|
13
|
-
require File.join(File.dirname(__FILE__),'../../../spec_helper')
|
|
14
|
-
require IMW_SPEC_DIR+'/imw/model/files/archive_spec'
|
|
15
|
-
|
|
16
|
-
require 'imw/model/files/zip'
|
|
17
|
-
describe IMW::Files::Zip do
|
|
18
|
-
|
|
19
|
-
before(:all) do
|
|
20
|
-
@root_directory = ::IMW::DIRECTORIES[:dump] + "/archive_test"
|
|
21
|
-
@initial_directory = @root_directory + "/create_and_append/initial"
|
|
22
|
-
@appending_directory = @root_directory + "/create_and_append/appending"
|
|
23
|
-
@extraction_directory = ::IMW::DIRECTORIES[:dump] + "/extract"
|
|
24
|
-
@archive = IMW::Files::Zip.new(@root_directory + "/test.zip")
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it_should_behave_like "an archive of files"
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# puts "#{File.basename(__FILE__)}: No matter how many times you test the integrity of a zipper at the store before you buy something it /will/ break when you take it home!" # at bottom
|
data/spec/imw/files_spec.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/../spec_helper"
|
|
2
|
-
|
|
3
|
-
describe IMW::Files do
|
|
4
|
-
|
|
5
|
-
before do
|
|
6
|
-
@csv = "foobar.csv"
|
|
7
|
-
@weird = "foobar.awefawefawe"
|
|
8
|
-
@none = "foobar"
|
|
9
|
-
|
|
10
|
-
@files = [@csv, @weird, @none]
|
|
11
|
-
|
|
12
|
-
@files.each { |f| IMWTest::Random.file f }
|
|
13
|
-
|
|
14
|
-
@new = "newguy.txt"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "chooses the correct class based upon the extension" do
|
|
18
|
-
IMW.open(@csv).class.should == IMW::Files::Csv
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "uses Text as a default class when there's a weird or no extension" do
|
|
22
|
-
IMW.open(@weird).class.should == IMW::Files::Text
|
|
23
|
-
IMW.open(@none).class.should == IMW::Files::Text
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "will use a different class if asked" do
|
|
27
|
-
IMW.open(@csv, :as => :Text).class.should == IMW::Files::Text
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "can write to a new file" do
|
|
31
|
-
f = IMW.open!(@new)
|
|
32
|
-
f.write('whatever')
|
|
33
|
-
f.close
|
|
34
|
-
open(@new).read.should == 'whatever'
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
|