imw 0.2.16 → 0.2.17
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/imw/dataset.rb +1 -1
- data/lib/imw/formats/delimited.rb +9 -14
- data/lib/imw/metadata.rb +38 -21
- data/lib/imw/metadata/contains_metadata.rb +35 -25
- data/lib/imw/metadata/field.rb +0 -28
- data/lib/imw/metadata/has_metadata.rb +93 -0
- data/lib/imw/metadata/has_summary.rb +51 -0
- data/lib/imw/metadata/schema.rb +6 -216
- data/lib/imw/resource.rb +2 -5
- data/lib/imw/schemes/http.rb +1 -1
- data/lib/imw/schemes/local.rb +18 -46
- data/lib/imw/schemes/sql.rb +12 -0
- data/lib/imw/tools/summarizer.rb +12 -13
- data/spec/imw/formats/delimited_spec.rb +3 -12
- data/spec/imw/metadata/contains_metadata_spec.rb +56 -0
- data/spec/imw/metadata/field_spec.rb +4 -5
- data/spec/imw/metadata/has_metadata_spec.rb +58 -0
- data/spec/imw/metadata/has_summary_spec.rb +32 -0
- data/spec/imw/metadata/schema_spec.rb +10 -13
- data/spec/imw/metadata_spec.rb +68 -21
- data/spec/imw/schemes/local_spec.rb +12 -22
- data/spec/imw/schemes/s3_spec.rb +0 -1
- metadata +12 -5
- data/lib/imw/metadata/schematized.rb +0 -27
data/spec/imw/metadata_spec.rb
CHANGED
@@ -2,38 +2,85 @@ require File.dirname(__FILE__) + "/../spec_helper"
|
|
2
2
|
|
3
3
|
describe IMW::Metadata do
|
4
4
|
|
5
|
-
|
5
|
+
before do
|
6
|
+
@metadata = IMW::Metadata.new({'foobar' => {'description' => 'buzz', 'fields' => ['a','b', 'c']}, 'http://www.google.com' => { 'description' => 'google', 'fields' => ['d', 'e', 'f'] }})
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "matching URLs without a base" do
|
6
10
|
|
7
|
-
it "should
|
8
|
-
|
11
|
+
it "should be able to look up a relative URI literally" do
|
12
|
+
@metadata.describes?('foobar').should be_true
|
9
13
|
end
|
14
|
+
|
15
|
+
it "should be able to look up a relative URI when passed an IMW::Resource" do
|
16
|
+
@metadata.describes?(IMW.open('foobar')).should be_true
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be able to look up an absolute URI literally" do
|
20
|
+
@metadata.describes?('http://www.google.com').should be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should rightly fail to literally look up a URI it doesn't know about" do
|
24
|
+
@metadata.describes?('bungler').should be_false
|
25
|
+
end
|
26
|
+
|
10
27
|
end
|
11
28
|
|
12
|
-
describe
|
29
|
+
describe "setting URLs" do
|
30
|
+
describe "without a base URL" do
|
31
|
+
it "should set 'foobar' to 'foobar'" do
|
32
|
+
@metadata['foobar'] = {'description' => 'bhaarg', 'fields' => ['a','b','c']}
|
33
|
+
@metadata.keys.should include('foobar')
|
34
|
+
end
|
13
35
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
36
|
+
it "should set '/a/b/c/foobar' to '/a/b/c/foobar'" do
|
37
|
+
@metadata['/a/b/c/foobar'] = {'description' => 'bhaarg', 'fields' => ['a','b','c']}
|
38
|
+
@metadata.keys.should include('/a/b/c/foobar')
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "with a base URL" do
|
44
|
+
before do
|
45
|
+
FileUtils.mkdir_p('chimpo')
|
46
|
+
@metadata.base = File.join(IMWTest::TMP_DIR, 'chimpo')
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should set 'foobar' to '$base/foobar'" do
|
50
|
+
@metadata['foobar'] = {'description' => 'bhaarg', 'fields' => ['a','b','c']}
|
51
|
+
@metadata.keys.should include(File.join(IMWTest::TMP_DIR, 'chimpo', 'foobar'))
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should set '/a/b/c/foobar' to '/a/b/c/foobar'" do
|
55
|
+
@metadata['/a/b/c/foobar'] = {'description' => 'bhaarg', 'fields' => ['a','b','c']}
|
56
|
+
@metadata.keys.should include('/a/b/c/foobar')
|
57
|
+
end
|
58
|
+
|
20
59
|
end
|
21
60
|
end
|
22
61
|
|
23
|
-
describe "
|
62
|
+
describe "matching URLs with a base" do
|
24
63
|
|
25
|
-
|
26
|
-
|
27
|
-
it "should return the resource given without a base" do
|
28
|
-
@metadata.send(:absolute_uri, 'path/to/something').should == 'path/to/something'
|
64
|
+
it "should raise an error when trying to use a base URI that doesn't exist" do
|
65
|
+
lambda { @metadata.base = 'chimpo' }.should raise_error(IMW::PathError)
|
29
66
|
end
|
30
67
|
|
31
|
-
it "should
|
32
|
-
|
33
|
-
|
34
|
-
@metadata.base = path
|
35
|
-
@metadata.send(:absolute_uri, 'path/to/something').should == File.join(IMWTest::TMP_DIR, '/path/to/something')
|
68
|
+
it "should raise an error when trying to use a base URI that isn't a directory" do
|
69
|
+
IMW.open!('chimpo') { |f| f.write('a file') }
|
70
|
+
lambda { @metadata.base = 'chimpo' }.should raise_error(IMW::PathError)
|
36
71
|
end
|
72
|
+
|
73
|
+
it "should be able to look up a URI relative to its base" do
|
74
|
+
FileUtils.mkdir_p('chimpo')
|
75
|
+
@metadata.base = File.join(IMWTest::TMP_DIR, 'chimpo')
|
76
|
+
@metadata['foobar'] = {'description' => 'buzz', 'fields' => ['a','b', 'c']}
|
77
|
+
@metadata.describe?('foobar').should be_true
|
78
|
+
@metadata.describe?(IMW.open('foobar')).should be_true
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should continue to be able to look up an absolute URI literally" do
|
82
|
+
@metadata.describes?('http://www.google.com').should be_true
|
83
|
+
end
|
84
|
+
|
37
85
|
end
|
38
|
-
|
39
86
|
end
|
@@ -65,6 +65,11 @@ describe IMW::Schemes::Local::LocalFile do
|
|
65
65
|
# FIXME only look at the first 100 bytes b/c of subsequent non-ascii chars...
|
66
66
|
IMW.open(path).snippet[0..100].should == File.new(path).read(101)
|
67
67
|
end
|
68
|
+
|
69
|
+
it "can produce a summary with size and line count" do
|
70
|
+
@file.summary[:num_lines].should > 0
|
71
|
+
@file.summary[:size].should > 0
|
72
|
+
end
|
68
73
|
end
|
69
74
|
|
70
75
|
describe IMW::Schemes::Local::LocalDirectory do
|
@@ -130,28 +135,6 @@ describe IMW::Schemes::Local::LocalDirectory do
|
|
130
135
|
|
131
136
|
end
|
132
137
|
|
133
|
-
describe "handling schemata" do
|
134
|
-
|
135
|
-
it "should recognize a YAML schema file" do
|
136
|
-
schemata_path = File.join(@dir.path, 'schema.yaml')
|
137
|
-
IMWTest::Random.file(schemata_path)
|
138
|
-
@dir.schemata_path.should == schemata_path
|
139
|
-
end
|
140
|
-
|
141
|
-
it "should recognize a JSON schema file" do
|
142
|
-
schemata_path = File.join(@dir.path, 'schema.json')
|
143
|
-
IMWTest::Random.file(schemata_path)
|
144
|
-
@dir.schemata_path.should == schemata_path
|
145
|
-
end
|
146
|
-
|
147
|
-
it "should recognize a funny-named YAML schema file" do
|
148
|
-
schemata_path = File.join(@dir.path, 'schema-1838293.yml')
|
149
|
-
IMWTest::Random.file(schemata_path)
|
150
|
-
@dir.schemata_path.should == schemata_path
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|
154
|
-
|
155
138
|
it "can join with a path" do
|
156
139
|
@dir.join("a", "b/c").to_s.should == File.join(@dir.path, 'a/b/c')
|
157
140
|
end
|
@@ -170,6 +153,13 @@ describe IMW::Schemes::Local::LocalDirectory do
|
|
170
153
|
end
|
171
154
|
end
|
172
155
|
end
|
156
|
+
|
157
|
+
it "can produce a summary with size and number of files" do
|
158
|
+
@dir.create
|
159
|
+
@dir.summary[:num_files].should == @dir.contents.size
|
160
|
+
@dir.summary[:size].should > 0
|
161
|
+
end
|
162
|
+
|
173
163
|
end
|
174
164
|
|
175
165
|
|
data/spec/imw/schemes/s3_spec.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 53
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 17
|
10
|
+
version: 0.2.17
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dhruv Bansal
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2011-01-17 00:00:00 -06:00
|
20
20
|
default_executable:
|
21
21
|
dependencies: []
|
22
22
|
|
@@ -69,8 +69,9 @@ files:
|
|
69
69
|
- lib/imw/metadata/contains_metadata.rb
|
70
70
|
- lib/imw/metadata/dsl.rb
|
71
71
|
- lib/imw/metadata/field.rb
|
72
|
+
- lib/imw/metadata/has_metadata.rb
|
73
|
+
- lib/imw/metadata/has_summary.rb
|
72
74
|
- lib/imw/metadata/schema.rb
|
73
|
-
- lib/imw/metadata/schematized.rb
|
74
75
|
- lib/imw/parsers.rb
|
75
76
|
- lib/imw/parsers/flat.rb
|
76
77
|
- lib/imw/parsers/html_parser.rb
|
@@ -157,7 +158,10 @@ files:
|
|
157
158
|
- spec/imw/formats/json_spec.rb
|
158
159
|
- spec/imw/formats/sgml_spec.rb
|
159
160
|
- spec/imw/formats/yaml_spec.rb
|
161
|
+
- spec/imw/metadata/contains_metadata_spec.rb
|
160
162
|
- spec/imw/metadata/field_spec.rb
|
163
|
+
- spec/imw/metadata/has_metadata_spec.rb
|
164
|
+
- spec/imw/metadata/has_summary_spec.rb
|
161
165
|
- spec/imw/metadata/schema_spec.rb
|
162
166
|
- spec/imw/metadata_spec.rb
|
163
167
|
- spec/imw/parsers/line_parser_spec.rb
|
@@ -248,6 +252,9 @@ test_files:
|
|
248
252
|
- spec/imw/formats/sgml_spec.rb
|
249
253
|
- spec/imw/archives_spec.rb
|
250
254
|
- spec/imw/metadata/schema_spec.rb
|
255
|
+
- spec/imw/metadata/contains_metadata_spec.rb
|
256
|
+
- spec/imw/metadata/has_metadata_spec.rb
|
257
|
+
- spec/imw/metadata/has_summary_spec.rb
|
251
258
|
- spec/imw/metadata/field_spec.rb
|
252
259
|
- spec/imw/schemes/http_spec.rb
|
253
260
|
- spec/imw/schemes/local_spec.rb
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module IMW
|
2
|
-
class Metadata
|
3
|
-
module Schematized
|
4
|
-
|
5
|
-
# The schema for this object.
|
6
|
-
#
|
7
|
-
# @return [IMW::Metadata::Schema, nil]
|
8
|
-
def schema
|
9
|
-
@schema
|
10
|
-
end
|
11
|
-
|
12
|
-
# Set a new schema for this object.
|
13
|
-
#
|
14
|
-
# Will call the object's +validate_schema!+ hook which should
|
15
|
-
# check the record and take the appropriate action if it's
|
16
|
-
# invalid.
|
17
|
-
#
|
18
|
-
# @param [Array, IMW::Metadata::Schema] new_schema
|
19
|
-
# @return [IMW::Metadata::Schema]
|
20
|
-
def schema= new_schema
|
21
|
-
@schema = IMW::Metadata::Schema.new(new_schema)
|
22
|
-
validate_schema! if respond_to?(:validate_schema!)
|
23
|
-
@schema
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|