nesstar-api 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/nesstar-api.rb CHANGED
@@ -14,13 +14,17 @@ require 'nesstar-api/study_date'
14
14
  require 'nesstar-api/variable'
15
15
  require 'nesstar-api/summary_stat'
16
16
 
17
+ #Methods for retrieving Nesstar catalog hierarchy and
18
+ #metadata information
17
19
  module Nesstar
18
20
  module Api
19
21
 
20
22
  class CatalogApi
21
23
 
22
- #given tree of datasets and catalogs figure out which are the
23
- #survey types, which are surveys and link them to child datasets
24
+ #Given tree of datasets and catalogs, contained in a RubyTree Node object
25
+ #figure out which are the survey types, which are surveys and link them to child datasets
26
+ #This is to match the MethodBox (http://www.methodbox.org) data model, basically
27
+ #a dataset belongs to a survey which has a survey type.
24
28
  def parse_surveys_from_nodes node, surveys_hash, survey_types_hash
25
29
  node.children.each do |node|
26
30
  if node.name.index('fStudy')
@@ -59,6 +63,14 @@ module Nesstar
59
63
  end
60
64
  end
61
65
 
66
+ #Get a hash of catalogs to child catalogs and datasets from a
67
+ #Nesstar instance. The children will be contained in an Array object
68
+ #Inputs are a url to the nesstar server eg
69
+ #http://nesstar.somewhere.com and a catalog id eg myCatalog
70
+ #If there appears to be no parent catalog for something then
71
+ #the key will be listed as 'none'
72
+ #
73
+ #Returns a Hash of catalogs to children
62
74
  def get_catalog url, catalog
63
75
 
64
76
  #Hash of catalogs to their child datasets
@@ -75,6 +87,11 @@ module Nesstar
75
87
  return catalog_hash
76
88
  end
77
89
 
90
+ #Given a Nesstar url and catalog eg
91
+ #http://nesstar.somewhere.com and a catalog id eg myCatalog
92
+ #the return a RubyTree node object containing the hierarchy.
93
+ #
94
+ #Returns a RubyTree Node
78
95
  def get_nodes url, catalog
79
96
  #tree of catalogs to their child datasets
80
97
  root_tree_node = Tree::TreeNode.new(catalog, "Catalog Content")
@@ -90,7 +107,10 @@ module Nesstar
90
107
  return root_tree_node
91
108
  end
92
109
 
93
- #get the ddi xml for a nesstar dataset
110
+ #Get the ddi xml for a nesstar dataset given a Nesstar url and catalog eg
111
+ #http://nesstar.somewhere.com and a catalog id eg myCatalog
112
+ #
113
+ #returns the ddi xml raw string
94
114
  def get_ddi uri, dataset
95
115
  ddi_uri = URI.parse(uri)
96
116
  ddi_uri.merge!("/obj/fStudy/" + dataset)
@@ -102,11 +122,13 @@ module Nesstar
102
122
  end
103
123
 
104
124
  #return a catalog object with information inside it
105
- #uri is something like http://nesstar.here.com
106
- #catalog is the name of the catalog eg Catalog20
107
- def get_catalog_information uri, catalog
125
+ #given a Nesstar url and catalog eg
126
+ #http://nesstar.somewhere.com and a catalog id eg myCatalog
127
+ #
128
+ #Returns a Nesstar::Catalog object
129
+ def get_catalog_information uri, catalog_id
108
130
  catalog_uri = URI.parse(uri)
109
- catalog_uri.merge!("/obj/fCatalog/" + catalog)
131
+ catalog_uri.merge!("/obj/fCatalog/" + catalog_id)
110
132
  catalog_res = Net::HTTP.get(catalog_uri)
111
133
  gz = Zlib::GzipReader.new(StringIO.new(catalog_res))
112
134
  catalog_info = gz.read
@@ -114,15 +136,21 @@ module Nesstar
114
136
  label = doc.xpath('//s:label')
115
137
  description = doc.xpath('//s:comment')
116
138
  catalog = Nesstar::Catalog.new
139
+ catalog.nesstar_id = catalog_id
140
+ catalog.nesstar_uri = uri
117
141
  catalog.label = label[0].content.strip unless label[0] == nil
118
142
  catalog.description = description[0].content.strip unless description[0] == nil
119
143
  return catalog
120
144
  end
121
145
 
122
- #information about the dataset only
123
- def get_simple_study_information uri, dataset
146
+ #Get basic information about the dataset only given a Nesstar url and catalog eg
147
+ #http://nesstar.somewhere.com and a catalog id eg myCatalog
148
+ #No information about the variables a study (ie dataset) contains are returned
149
+ #
150
+ #Returns a Nesstar::Study object
151
+ def get_simple_study_information uri, dataset_id
124
152
  dataset_uri = URI.parse(uri)
125
- dataset_uri.merge!("/obj/fStudy/" + dataset)
153
+ dataset_uri.merge!("/obj/fStudy/" + dataset_id)
126
154
  dataset_res = Net::HTTP.get(dataset_uri)
127
155
  gz = Zlib::GzipReader.new(StringIO.new(dataset_res))
128
156
  dataset_info = gz.read
@@ -130,23 +158,31 @@ module Nesstar
130
158
  label = doc.xpath('//s:label')
131
159
  description = doc.xpath('//s:comment')
132
160
  study = Nesstar::Study.new
161
+ study.nesstar_id = dataset_id
162
+ study.nesstar_uri = uri
133
163
  study.title = label[0].content.strip unless label[0] == nil
134
164
  study.abstract = description[0].content.strip unless description[0] == nil
135
165
  return study
136
166
  end
137
167
 
138
168
  #information about the dataset and its variables
139
- #inputs are the uri to a dataset file
140
- def get_study_information uri, dataset
169
+ #given a Nesstar url and catalog eg
170
+ #http://nesstar.somewhere.com and a catalog id eg myCatalog
171
+ #The study will contain variable level information if available
172
+ #
173
+ #Returns a Nesstar::Study object
174
+ def get_study_information uri, dataset_id
141
175
  #TODO use the get_ddi method above
142
176
  ddi_uri = URI.parse(uri)
143
- ddi_uri.merge!("/obj/fStudy/" + dataset)
177
+ ddi_uri.merge!("/obj/fStudy/" + dataset_id)
144
178
  ddi_uri.merge!('?http://www.nesstar.org/rdf/method=http://www.nesstar.org/rdf/Dataset/GetDDI')
145
179
  res = Net::HTTP.get(ddi_uri)
146
180
  gz = Zlib::GzipReader.new(StringIO.new(res))
147
181
  xml = gz.read
148
182
  catalog = Nesstar::Catalog.new
149
183
  study = Nesstar::Study.new
184
+ study.nesstar_id = dataset_id
185
+ study.nesstar_uri = uri
150
186
  study_info_hash = Hash.new
151
187
  parser = LibXML::XML::Parser.string(xml)
152
188
  doc = parser.parse
@@ -308,10 +344,17 @@ module Nesstar
308
344
  #categories in ddi are value domains in mb
309
345
  catgry.each do |cat|
310
346
  category = Nesstar::Category.new
311
- category.value = cat.find('./catValu').first.content
347
+ valxml = cat.find('./catValu')
348
+ if valxml != nil && valxml[0] != nil
349
+ category.value = valxml[0].first.content.strip unless valxml[0].first == nil
350
+ else
351
+ category.value = 'N/A'
352
+ end
312
353
  labxml = cat.find('./labl')
313
354
  if labxml != nil && labxml[0] != nil
314
355
  category.label = labxml[0].first.content.strip unless labxml[0].first == nil
356
+ else
357
+ category.label = 'N/A'
315
358
  end
316
359
  catstat = cat.find('./catStat')
317
360
  category_statistics = []
@@ -321,12 +364,11 @@ module Nesstar
321
364
  if a != nil
322
365
  category_statistic.type = a.get_attribute('type').strip unless a.get_attribute('type') == nil
323
366
  category_statistic.value = catstat.first.content.strip unless catstat.first == nil
324
- category_statistic.type = a.get_attribute('type').strip unless a.get_attribute('type') == nil
325
367
  category_statistics.push(category_statistic)
326
368
  end
327
369
  end
328
370
  category.category_statistics = category_statistics
329
- categories.push(category_statistics)
371
+ categories.push(category)
330
372
  end
331
373
  #what group is the variable in
332
374
  variable_info_hash.each_key do |key|
@@ -1,9 +1,9 @@
1
1
  module Nesstar
2
-
2
+ #A Nesstar catalog object, can contain 1 or more studies (ie datasets)
3
3
  class Catalog
4
4
 
5
- attr_reader :studies, :label, :description
6
- attr_writer :studies, :label, :description
5
+ attr_reader :studies, :label, :description, :nesstar_id, :nesstar_uri
6
+ attr_writer :studies, :label, :description, :nesstar_id, :nesstar_uri
7
7
 
8
8
  end
9
9
 
@@ -1,6 +1,6 @@
1
1
  module Nesstar
2
2
 
3
- #Stats about a category belonging to a a variable
3
+ #Stats about a category (ie value domain) belonging to a a variable
4
4
  class CategoryStatistic
5
5
 
6
6
  attr_reader :type, :value
@@ -3,8 +3,8 @@ module Nesstar
3
3
  #Contains a set of variables and belongs to a catalog
4
4
  class Study
5
5
 
6
- attr_reader :variables, :abstract, :title, :id, :dates, :sampling_procedure, :weight
7
- attr_writer :variables, :abstract, :title, :id, :dates, :sampling_procedure, :weight
6
+ attr_reader :variables, :abstract, :title, :id, :dates, :sampling_procedure, :weight, :nesstar_id, :nesstar_uri
7
+ attr_writer :variables, :abstract, :title, :id, :dates, :sampling_procedure, :weight, :nesstar_id, :nesstar_uri
8
8
 
9
9
  end
10
10
 
@@ -1,5 +1,6 @@
1
1
  module Nesstar
2
2
 
3
+ #Stats at the variable level, eg how many valid or invalid rows
3
4
  class SummaryStat
4
5
 
5
6
  attr_reader :type, :value
@@ -1,5 +1,5 @@
1
1
  module Nesstar
2
2
  module Api
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nesstar-api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ian Dunlop
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-24 00:00:00 +00:00
18
+ date: 2011-03-09 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency