rgovdata 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/.document +5 -0
  2. data/.rvmrc +2 -0
  3. data/CHANGELOG +7 -0
  4. data/Gemfile +18 -0
  5. data/Gemfile.lock +48 -0
  6. data/LICENSE +20 -0
  7. data/README.rdoc +114 -0
  8. data/Rakefile +61 -0
  9. data/bin/rgd +12 -0
  10. data/examples/all_quakes.rb +8 -0
  11. data/examples/arbitrary_data.rb +26 -0
  12. data/examples/catalog_traversal.rb +34 -0
  13. data/examples/earthquakes.rb +5 -0
  14. data/lib/rgovdata.rb +4 -0
  15. data/lib/rgovdata/catalog.rb +4 -0
  16. data/lib/rgovdata/catalog/catalog.rb +79 -0
  17. data/lib/rgovdata/catalog/dn.rb +63 -0
  18. data/lib/rgovdata/catalog/registry_strategy/internal_registry.rb +12 -0
  19. data/lib/rgovdata/catalog/registry_strategy/registry_strategy.rb +26 -0
  20. data/lib/rgovdata/config.rb +5 -0
  21. data/lib/rgovdata/config/common_config.rb +13 -0
  22. data/lib/rgovdata/config/config.rb +133 -0
  23. data/lib/rgovdata/data/config_template.yml +19 -0
  24. data/lib/rgovdata/data/sg/registry.yml +147 -0
  25. data/lib/rgovdata/data/template.rb +27 -0
  26. data/lib/rgovdata/data/us/registry.yml +12 -0
  27. data/lib/rgovdata/service.rb +10 -0
  28. data/lib/rgovdata/service/csv_service.rb +3 -0
  29. data/lib/rgovdata/service/dataset/csv_dataset.rb +43 -0
  30. data/lib/rgovdata/service/dataset/dataset.rb +91 -0
  31. data/lib/rgovdata/service/dataset/file_dataset.rb +46 -0
  32. data/lib/rgovdata/service/dataset/odata_dataset.rb +31 -0
  33. data/lib/rgovdata/service/file_service.rb +10 -0
  34. data/lib/rgovdata/service/listing.rb +47 -0
  35. data/lib/rgovdata/service/odata_service.rb +50 -0
  36. data/lib/rgovdata/service/service.rb +93 -0
  37. data/lib/rgovdata/shell/shell.rb +157 -0
  38. data/lib/rgovdata/version.rb +9 -0
  39. data/rgovdata.gemspec +128 -0
  40. data/spec/fixtures/sample.csv +821 -0
  41. data/spec/integration/service/sg/nlb_spec.rb +57 -0
  42. data/spec/integration/service/sg/places_spec.rb +73 -0
  43. data/spec/integration/service/us/eqs7day-M1_spec.rb +57 -0
  44. data/spec/spec_helper.rb +25 -0
  45. data/spec/support/config_examples.rb +8 -0
  46. data/spec/support/mocks.rb +22 -0
  47. data/spec/support/utility.rb +18 -0
  48. data/spec/unit/catalog/base_spec.rb +93 -0
  49. data/spec/unit/catalog/registry_strategy_spec.rb +28 -0
  50. data/spec/unit/config/config_spec.rb +130 -0
  51. data/spec/unit/data/template_spec.rb +32 -0
  52. data/spec/unit/service/dataset/csv_dataset_spec.rb +42 -0
  53. data/spec/unit/service/dataset/dataset_spec.rb +37 -0
  54. data/spec/unit/service/dataset/file_dataset_spec.rb +40 -0
  55. data/spec/unit/service/dataset/odata_dataset_spec.rb +36 -0
  56. data/spec/unit/service/file_service_spec.rb +25 -0
  57. data/spec/unit/service/listing_spec.rb +100 -0
  58. data/spec/unit/service/odata_service_spec.rb +42 -0
  59. data/spec/unit/service/service_spec.rb +82 -0
  60. data/spec/unit/shell/shell_spec.rb +10 -0
  61. 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