imw 0.2.16 → 0.2.17
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/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
|