rgovdata 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rvmrc +2 -0
- data/CHANGELOG +7 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +48 -0
- data/LICENSE +20 -0
- data/README.rdoc +114 -0
- data/Rakefile +61 -0
- data/bin/rgd +12 -0
- data/examples/all_quakes.rb +8 -0
- data/examples/arbitrary_data.rb +26 -0
- data/examples/catalog_traversal.rb +34 -0
- data/examples/earthquakes.rb +5 -0
- data/lib/rgovdata.rb +4 -0
- data/lib/rgovdata/catalog.rb +4 -0
- data/lib/rgovdata/catalog/catalog.rb +79 -0
- data/lib/rgovdata/catalog/dn.rb +63 -0
- data/lib/rgovdata/catalog/registry_strategy/internal_registry.rb +12 -0
- data/lib/rgovdata/catalog/registry_strategy/registry_strategy.rb +26 -0
- data/lib/rgovdata/config.rb +5 -0
- data/lib/rgovdata/config/common_config.rb +13 -0
- data/lib/rgovdata/config/config.rb +133 -0
- data/lib/rgovdata/data/config_template.yml +19 -0
- data/lib/rgovdata/data/sg/registry.yml +147 -0
- data/lib/rgovdata/data/template.rb +27 -0
- data/lib/rgovdata/data/us/registry.yml +12 -0
- data/lib/rgovdata/service.rb +10 -0
- data/lib/rgovdata/service/csv_service.rb +3 -0
- data/lib/rgovdata/service/dataset/csv_dataset.rb +43 -0
- data/lib/rgovdata/service/dataset/dataset.rb +91 -0
- data/lib/rgovdata/service/dataset/file_dataset.rb +46 -0
- data/lib/rgovdata/service/dataset/odata_dataset.rb +31 -0
- data/lib/rgovdata/service/file_service.rb +10 -0
- data/lib/rgovdata/service/listing.rb +47 -0
- data/lib/rgovdata/service/odata_service.rb +50 -0
- data/lib/rgovdata/service/service.rb +93 -0
- data/lib/rgovdata/shell/shell.rb +157 -0
- data/lib/rgovdata/version.rb +9 -0
- data/rgovdata.gemspec +128 -0
- data/spec/fixtures/sample.csv +821 -0
- data/spec/integration/service/sg/nlb_spec.rb +57 -0
- data/spec/integration/service/sg/places_spec.rb +73 -0
- data/spec/integration/service/us/eqs7day-M1_spec.rb +57 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/config_examples.rb +8 -0
- data/spec/support/mocks.rb +22 -0
- data/spec/support/utility.rb +18 -0
- data/spec/unit/catalog/base_spec.rb +93 -0
- data/spec/unit/catalog/registry_strategy_spec.rb +28 -0
- data/spec/unit/config/config_spec.rb +130 -0
- data/spec/unit/data/template_spec.rb +32 -0
- data/spec/unit/service/dataset/csv_dataset_spec.rb +42 -0
- data/spec/unit/service/dataset/dataset_spec.rb +37 -0
- data/spec/unit/service/dataset/file_dataset_spec.rb +40 -0
- data/spec/unit/service/dataset/odata_dataset_spec.rb +36 -0
- data/spec/unit/service/file_service_spec.rb +25 -0
- data/spec/unit/service/listing_spec.rb +100 -0
- data/spec/unit/service/odata_service_spec.rb +42 -0
- data/spec/unit/service/service_spec.rb +82 -0
- data/spec/unit/shell/shell_spec.rb +10 -0
- metadata +228 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RGovData::Template do
|
4
|
+
subject { RGovData::Template }
|
5
|
+
it { should respond_to(:get) }
|
6
|
+
|
7
|
+
[
|
8
|
+
{ :name => 'config_template.yml', :realm => nil, :expect => 'credentials'},
|
9
|
+
{ :name => 'registry.yml', :realm => 'sg', :expect => 'description'},
|
10
|
+
{ :name => 'registry.yml', :realm => :sg, :expect => 'description'},
|
11
|
+
{ :name => 'registry.yml', :realm => 'zz', :expect => nil},
|
12
|
+
{ :name => 'not_found.yml', :realm => nil, :expect => nil}
|
13
|
+
].each do |options|
|
14
|
+
context "with #{options[:realm]}:#{options[:name]}" do
|
15
|
+
|
16
|
+
describe "##path" do
|
17
|
+
subject { RGovData::Template.path(options[:name],options[:realm]) }
|
18
|
+
it { File.exists?(subject).should == options[:expect].present? }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "##get" do
|
22
|
+
subject { RGovData::Template.get(options[:name],options[:realm]) }
|
23
|
+
if options[:expect]
|
24
|
+
it { should include(options[:expect]) }
|
25
|
+
else
|
26
|
+
it { should be_nil }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
include MocksHelper
|
3
|
+
|
4
|
+
describe RGovData::CsvDataSet do
|
5
|
+
|
6
|
+
let(:dataset_key) { 'csv' }
|
7
|
+
let(:sample_file) { mock_file_path('sample.csv') }
|
8
|
+
let(:expect_row_count) { 820 }
|
9
|
+
let(:expect_headers) { ["Src", "Eqid", "Version", "Datetime", "Lat", "Lon", "Magnitude", "Depth", "NST", "Region"] }
|
10
|
+
|
11
|
+
let(:service) { RGovData::CsvService.new({:uri=>sample_file,:type=>'csv'}) }
|
12
|
+
let(:dataset) { RGovData::CsvDataSet.new({:dataset_key=>dataset_key},service) }
|
13
|
+
|
14
|
+
describe "#native_dataset_key" do
|
15
|
+
let(:expect) { dataset_key }
|
16
|
+
subject { dataset.native_dataset_key }
|
17
|
+
it { should eql(expect) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#attributes" do
|
21
|
+
subject { dataset.attributes }
|
22
|
+
it { should eql(expect_headers) }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#records" do
|
26
|
+
subject { dataset.records }
|
27
|
+
its(:count) { should eql(expect_row_count) }
|
28
|
+
|
29
|
+
context "with a record_limit" do
|
30
|
+
let(:record_limit) { 3 }
|
31
|
+
before {
|
32
|
+
dataset.limit = record_limit
|
33
|
+
}
|
34
|
+
subject { dataset.records(true) }
|
35
|
+
it { should be_a(Array) }
|
36
|
+
its(:first) { should be_a(CSV::Row) }
|
37
|
+
its(:count) { should eql(record_limit) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RGovData::DataSet do
|
4
|
+
|
5
|
+
let(:dataset_key) { 'Test' }
|
6
|
+
let(:service) { RGovData::Service.new({:type=>'dummy'}) }
|
7
|
+
let(:dataset) { RGovData::DataSet.new({:dataset_key=>dataset_key},service) }
|
8
|
+
|
9
|
+
describe "#limit" do
|
10
|
+
subject { dataset.limit }
|
11
|
+
context "not set" do
|
12
|
+
it { should be_nil }
|
13
|
+
end
|
14
|
+
context "set" do
|
15
|
+
let(:expect) { 5 }
|
16
|
+
before { dataset.limit = 5 }
|
17
|
+
it { should eql(expect) }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#records" do
|
22
|
+
subject { dataset.records }
|
23
|
+
context "with only a single result from load_records" do
|
24
|
+
before {
|
25
|
+
dataset.stub(:load_records).and_return('single result')
|
26
|
+
}
|
27
|
+
it { should eql('single result') }
|
28
|
+
end
|
29
|
+
context "with only a single result from load_records" do
|
30
|
+
before {
|
31
|
+
dataset.stub(:load_records).and_return(['result 1','result 2'])
|
32
|
+
}
|
33
|
+
it { should be_a(Array) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
include MocksHelper
|
3
|
+
|
4
|
+
describe RGovData::FileDataSet do
|
5
|
+
|
6
|
+
let(:dataset_key) { 'file' }
|
7
|
+
let(:sample_file) { mock_file_path('sample.csv') }
|
8
|
+
let(:service) { RGovData::FileService.new({:uri=>sample_file,:type=>dataset_key}) }
|
9
|
+
let(:dataset) { RGovData::FileDataSet.new({:dataset_key=>dataset_key},service) }
|
10
|
+
|
11
|
+
describe "#native_dataset_key" do
|
12
|
+
let(:expect) { dataset_key }
|
13
|
+
subject { dataset.native_dataset_key }
|
14
|
+
it { should eql(expect) }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#attributes" do
|
18
|
+
let(:expect) { ['row'] }
|
19
|
+
subject { dataset.attributes }
|
20
|
+
it { should eql(expect) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#records" do
|
24
|
+
subject { dataset.records }
|
25
|
+
it { should be_a(StringIO) }
|
26
|
+
|
27
|
+
context "with a record_limit" do
|
28
|
+
let(:record_limit) { 3 }
|
29
|
+
before {
|
30
|
+
dataset.limit = record_limit
|
31
|
+
}
|
32
|
+
subject { dataset.records(true) }
|
33
|
+
it { should be_a(Array) }
|
34
|
+
its(:first) { should be_a(String) }
|
35
|
+
its(:count) { should eql(record_limit) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RGovData::OdataDataSet do
|
4
|
+
|
5
|
+
let(:credentialset) { 'basic' }
|
6
|
+
let(:dataset_key) { 'Test' }
|
7
|
+
let(:service) { RGovData::OdataService.new({:uri=>'uri',:type=>'odata',:credentialset=>credentialset}) }
|
8
|
+
let(:dataset) { RGovData::OdataDataSet.new({:dataset_key=>dataset_key},service) }
|
9
|
+
|
10
|
+
before {
|
11
|
+
# These tests won't call on a real service
|
12
|
+
OData::Service.any_instance.stub(:build_collections_and_classes).and_return(nil)
|
13
|
+
RGovData::Config.stub(:default_config_file).and_return(mock_configfile_path)
|
14
|
+
RGovData::Config.instance.load_default_config
|
15
|
+
}
|
16
|
+
|
17
|
+
describe "#native_dataset_key" do
|
18
|
+
let(:expect) { 'Test' }
|
19
|
+
subject { dataset.native_dataset_key }
|
20
|
+
it { should eql(expect) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#entity_name" do
|
24
|
+
{
|
25
|
+
'Test' => 'Test',
|
26
|
+
'TestSet'=>'Test'
|
27
|
+
}.each do |given_key,expect|
|
28
|
+
context "with dataset_key:#{given_key}" do
|
29
|
+
let(:dataset_key) { given_key }
|
30
|
+
subject { dataset.entity_name }
|
31
|
+
it { should eql(expect) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RGovData::FileService do
|
4
|
+
|
5
|
+
let(:dataset_key) { 'file' }
|
6
|
+
let(:sample_file) { mock_file_path('sample.csv') }
|
7
|
+
let(:service) { RGovData::FileService.new({:uri=>sample_file,:type=>'file'}) }
|
8
|
+
|
9
|
+
|
10
|
+
describe "#dataset_keys" do
|
11
|
+
let(:expect) { [dataset_key] }
|
12
|
+
subject { service.dataset_keys }
|
13
|
+
it { should eql(expect) }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#native_instance" do
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#datasets" do
|
20
|
+
subject { service.datasets }
|
21
|
+
it { should be_a(Array) }
|
22
|
+
its(:first) { should be_a(RGovData::FileDataSet) }
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RGovData::ServiceListing do
|
4
|
+
|
5
|
+
describe "property:" do
|
6
|
+
subject { RGovData::ServiceListing.new }
|
7
|
+
[
|
8
|
+
:realm,:key,:name,:description,:keywords,:publisher,
|
9
|
+
:uri,:license,:type,:credentialset
|
10
|
+
].each do |property|
|
11
|
+
describe property do
|
12
|
+
it "should support setter and getter" do
|
13
|
+
value = "x"
|
14
|
+
subject.send("#{property}=",value)
|
15
|
+
subject.send(property).should eql(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#id" do
|
22
|
+
let(:realm) { :sg }
|
23
|
+
let(:key) { 'key_name' }
|
24
|
+
let(:expect) { '//sg/key_name' }
|
25
|
+
let(:listing) { RGovData::ServiceListing.new }
|
26
|
+
subject { listing }
|
27
|
+
before do
|
28
|
+
listing.realm = realm
|
29
|
+
listing.key = key
|
30
|
+
end
|
31
|
+
its(:id) { should eql(expect) }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#service" do
|
35
|
+
[
|
36
|
+
{:type => :odata, :uri => 'http://example.com', :expect_class => RGovData::OdataService },
|
37
|
+
{:type => 'odata', :uri => 'http://example.com', :expect_class => RGovData::OdataService },
|
38
|
+
{:type => :csv, :uri => 'http://example.com', :expect_class => RGovData::FileService },
|
39
|
+
{:type => 'csv', :uri => 'http://example.com', :expect_class => RGovData::FileService },
|
40
|
+
{:type => :dummy, :uri => 'http://example.com', :expect_class => nil }
|
41
|
+
].each do |options|
|
42
|
+
context "with type:#{options[:type]}" do
|
43
|
+
let(:listing) { RGovData::ServiceListing.new }
|
44
|
+
before do
|
45
|
+
listing.type = options[:type]
|
46
|
+
listing.uri = options[:uri]
|
47
|
+
end
|
48
|
+
subject { listing.service }
|
49
|
+
if options[:expect_class]
|
50
|
+
it { should be_a(options[:expect_class]) }
|
51
|
+
else
|
52
|
+
it { should be_nil }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#datasets" do
|
59
|
+
let(:listing) { RGovData::ServiceListing.new }
|
60
|
+
let(:mock_datasets) { ['a','b'] }
|
61
|
+
before {
|
62
|
+
RGovData::Service.stub(:get_instance).and_return(RGovData::Service.new({:uri=>'uri',:type=>'type',:credentialset=>'credentialset'}))
|
63
|
+
RGovData::Service.any_instance.stub(:datasets).and_return(mock_datasets)
|
64
|
+
}
|
65
|
+
subject { listing.datasets }
|
66
|
+
it { should be_a(Array) }
|
67
|
+
it { should eql(mock_datasets) }
|
68
|
+
|
69
|
+
describe "#records" do
|
70
|
+
subject { listing.records }
|
71
|
+
it { should eql(mock_datasets) }
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#get_dataset" do
|
75
|
+
let(:key) { 'key' }
|
76
|
+
let(:mock_dataset_a) { 'mock_dataset_a' }
|
77
|
+
let(:mock_dataset_b) { 'mock_dataset_b' }
|
78
|
+
let(:mock_dataset) { [mock_dataset_a,mock_dataset_b] }
|
79
|
+
before {
|
80
|
+
RGovData::Service.any_instance.stub(:get_dataset).and_return(mock_dataset)
|
81
|
+
}
|
82
|
+
subject { listing.get_dataset(key) }
|
83
|
+
it { should eql(mock_dataset) }
|
84
|
+
describe "#find" do
|
85
|
+
subject { listing.find(key) }
|
86
|
+
it { should eql(mock_dataset_a) }
|
87
|
+
end
|
88
|
+
describe "#find_by_id" do
|
89
|
+
subject { listing.find_by_id(key) }
|
90
|
+
it { should eql(mock_dataset_a) }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "#to_s" do
|
96
|
+
its(:to_s) { should be_a(String) }
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RGovData::OdataService do
|
4
|
+
|
5
|
+
let(:credentialset) { 'basic' }
|
6
|
+
let(:service) { RGovData::OdataService.new({:uri=>'uri',:type=>'odata',:credentialset=>credentialset}) }
|
7
|
+
|
8
|
+
before {
|
9
|
+
# These tests won't call on a real service
|
10
|
+
OData::Service.any_instance.stub(:build_collections_and_classes).and_return(nil)
|
11
|
+
RGovData::Config.stub(:default_config_file).and_return(mock_configfile_path)
|
12
|
+
RGovData::Config.instance.load_default_config
|
13
|
+
}
|
14
|
+
|
15
|
+
describe "#native_instance" do
|
16
|
+
subject { service.native_instance }
|
17
|
+
it { should be_a(OData::Service) }
|
18
|
+
|
19
|
+
context "with basic credentials" do
|
20
|
+
subject { service.native_instance.instance_variable_get(:@rest_options) }
|
21
|
+
it "should have user set" do
|
22
|
+
subject[:user].should_not be_nil
|
23
|
+
end
|
24
|
+
it "should have password set" do
|
25
|
+
subject[:password].should_not be_nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "with projectnimbus credentials" do
|
30
|
+
let(:credentialset) { 'projectnimbus' }
|
31
|
+
subject { service.native_instance.instance_variable_get(:@rest_options) }
|
32
|
+
it "should have headers set" do
|
33
|
+
subject[:headers].should_not be_nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#datasets" do
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RGovData::Service do
|
4
|
+
|
5
|
+
describe "##get_instance" do
|
6
|
+
context "with unsupported options" do
|
7
|
+
subject { RGovData::Service.get_instance({:uri=>'uri',:type=>'type',:transport=>'transport',:credentialset=>'credentialset'}) }
|
8
|
+
it { should be_nil }
|
9
|
+
end
|
10
|
+
context "with odata type" do
|
11
|
+
subject { RGovData::Service.get_instance({:uri=>'uri',:type=>'odata',:transport=>'odata',:credentialset=>'credentialset'}) }
|
12
|
+
it { should be_a(RGovData::OdataService) }
|
13
|
+
end
|
14
|
+
context "with csv type" do
|
15
|
+
subject { RGovData::Service.get_instance({:uri=>'uri',:type=>'csv',:transport=>'get',:credentialset=>'credentialset'}) }
|
16
|
+
it { should be_a(RGovData::FileService) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:service) { RGovData::Service.new({:realm=>:sg, :service_key=>'service_name', :uri=>'uri',:type=>'csv',:transport=>'get',:credentialset=>'credentialset'}) }
|
21
|
+
subject { service }
|
22
|
+
|
23
|
+
it_behaves_like "includes common config"
|
24
|
+
|
25
|
+
describe "#native_instance" do
|
26
|
+
subject { service.native_instance }
|
27
|
+
it { should eql(service) }
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#meta_attributes" do
|
31
|
+
subject { service.meta_attributes }
|
32
|
+
it { should be_a(Array) }
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#initialization_hash" do
|
36
|
+
subject { service.initialization_hash }
|
37
|
+
let(:keys) { service.initialization_hash.keys }
|
38
|
+
it { should be_a(Hash) }
|
39
|
+
it "should contain members for all attributes" do
|
40
|
+
service.meta_attributes.each do |attribute|
|
41
|
+
keys.should include(attribute)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#id" do
|
47
|
+
let(:expect) { '//sg/service_name' }
|
48
|
+
its(:id) { should eql(expect) }
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#datasets" do
|
52
|
+
let(:mock_dataset_a) { RGovData::DataSet.new({:dataset_key=>'mock_dataset_a'},service) }
|
53
|
+
let(:mock_dataset_b) { RGovData::DataSet.new({:dataset_key=>'mock_dataset_b'},service) }
|
54
|
+
let(:mock_datasets) { [mock_dataset_a,mock_dataset_b] }
|
55
|
+
before {
|
56
|
+
service.stub(:datasets).and_return(mock_datasets)
|
57
|
+
}
|
58
|
+
subject { service.datasets }
|
59
|
+
it { should be_a(Array) }
|
60
|
+
it { should eql(mock_datasets) }
|
61
|
+
|
62
|
+
describe "#records" do
|
63
|
+
subject { service.records }
|
64
|
+
it { should eql(mock_datasets) }
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#get_dataset" do
|
68
|
+
let(:key) { 'mock_dataset' }
|
69
|
+
subject { service.get_dataset(key) }
|
70
|
+
it { should eql(mock_datasets) }
|
71
|
+
describe "#find" do
|
72
|
+
subject { service.find(key) }
|
73
|
+
it { should eql(mock_dataset_a) }
|
74
|
+
end
|
75
|
+
describe "#find_by_id" do
|
76
|
+
subject { service.find_by_id(key) }
|
77
|
+
it { should eql(mock_dataset_a) }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|