bcl 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10d084384705465f95b8b328994161d836c98c83
4
- data.tar.gz: ffdd20227e95f5b995f0c1bf0f228af53b287bc3
3
+ metadata.gz: cbd79659281ee21204429f1a34bb6f5d65ce7feb
4
+ data.tar.gz: 6dd76b45e44bddd5b2783fe25247aa8a52c51e64
5
5
  SHA512:
6
- metadata.gz: 19cfe476429d53381ff893040138977fddd2a9a6aab330f965e012c7dc346ee61624fc522aa13c92e7dd9df1bd16ab5cb9b7cb278d9ef8c68e64ed5920a3f5e6
7
- data.tar.gz: 55a8758853dd04845cfbcd9fce45187a63970d87c4f734bbca024322346d7ddc9b2051d80620e5a8d7b1448e9bdf369262e62967e2ea69150ea464bc7fdf7e86
6
+ metadata.gz: 9495c30a31a7c3ed00adb152dd484c38614b7c43266d613980a56e7572a586e1427234199ccfac79277507515627dd75c292abcc93991c7f96f842786bdc35e0
7
+ data.tar.gz: 3133b42d0e3c1e33790e5d56c843d881405c9ceaf62abefb79c356184a89c20317aa7b0c969a5525424c251ebe4b53108955bebcefca9afe564a35726826a922
data/lib/bcl.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'builder'
2
+ require 'zlib'
3
+
1
4
  require 'bcl/component_spreadsheet'
2
5
  require 'bcl/component_xml'
3
6
  require 'bcl/component_methods'
@@ -5,5 +8,4 @@ require 'bcl/measure_xml'
5
8
  require 'bcl/bcl_xml'
6
9
  require 'bcl/tar_ball'
7
10
  require 'bcl/master_taxonomy'
8
- require 'bcl/mongo_to_component'
9
- require 'bcl/version'
11
+ require 'bcl/version'
@@ -38,36 +38,22 @@ module BCL
38
38
  attr_accessor :config
39
39
  attr_accessor :session
40
40
  attr_accessor :http
41
+ attr_accessor :parsed_measures_path
41
42
 
42
43
  def initialize(group_id = nil)
44
+ @parsed_measures_path = './measures/parsed/'
43
45
  @config = nil
44
46
  @session = nil
45
47
  @access_token = nil
46
48
  @http = nil
47
49
  @api_version = 2.0
48
- #set group to NREL (32) if nil
49
- @group_id = group_id.nil? ? 32 : group_id
50
- config_path = File.expand_path('~') + '/.bcl'
51
- config_name = 'config.yml'
52
- if File.exists?(config_path + "/" + config_name)
53
- puts "loading config settings from #{config_path + "/" + config_name}"
54
- @config = YAML.load_file(config_path + "/" + config_name)
55
- else
56
- #location of template file
57
- FileUtils.mkdir_p(config_path)
58
- File.open(config_path + "/" + config_name, 'w') do |file|
59
- file << default_yaml.to_yaml
60
- end
61
- puts "******** Please fill in user credentials in #{config_path}/#{config_name} file. DO NOT COMMIT THIS FILE. **********"
62
- end
50
+ @group_id = group_id.nil? ? 32 : group_id #set group to NREL (32) if nil
63
51
 
52
+
53
+ load_config
64
54
  end
65
55
 
66
- def default_yaml
67
- settings = {:server => {:url => "https://bcl.nrel.gov", :user => {:username => "ENTER_BCL_USERNAME", :password => "ENTER_BCL_PASSWORD"}}}
68
-
69
- settings
70
- end
56
+
71
57
 
72
58
 
73
59
  def login(username=nil, password=nil, url=nil)
@@ -159,8 +145,8 @@ module BCL
159
145
  puts "error info: #{access_token.body}"
160
146
  end
161
147
 
162
- #puts "access_token = *#{@access_token}*"
163
- #puts "cookie = #{@session}"
148
+ #puts "access_token = *#{@access_token}*"
149
+ # puts "cookie = #{@session}"
164
150
 
165
151
  res
166
152
  else
@@ -173,6 +159,163 @@ module BCL
173
159
  end
174
160
  end
175
161
 
162
+ #retrieve, parse, and save metadata for BCL measures
163
+ def measure_metadata(search_term = nil, filter_term=nil, return_all_pages = false)
164
+
165
+ #setup results directory
166
+ if !Dir.exists?(@parsed_measures_path)
167
+ FileUtils.mkdir_p(@parsed_measures_path)
168
+ end
169
+ puts "...storing parsed metadata in #{@parsed_measures_path}"
170
+
171
+ #retrieve measures
172
+ puts "retrieving measures that match search_term: #{search_term.nil? ? "nil":search_term} and filters: #{filter_term.nil? ? "nil":filter_term}"
173
+ retrieve_measures(search_term, filter_term, return_all_pages) do |measure|
174
+ #parse and save
175
+ parse_measure_metadata(measure)
176
+
177
+ end
178
+
179
+ return true
180
+
181
+ end
182
+
183
+ #expects a JSON measure object
184
+ def parse_measure_metadata(measure)
185
+
186
+ #check for valid measure
187
+ if measure[:measure][:name] && measure[:measure][:uuid]
188
+
189
+ file_data = download_component(measure[:measure][:uuid])
190
+
191
+ if file_data
192
+ save_file = File.expand_path("@{parsed_measures_path}#{measure[:measure][:name].downcase.gsub(" ", "_")}.zip")
193
+ File.open(save_file, 'wb') { |f| f << file_data }
194
+
195
+ #unzip file and delete zip.
196
+ #TODO check that something was downloaded here before extracting zip
197
+ if File.exists?(save_file)
198
+ BCL.extract_zip(save_file, @parsed_measures_path, true)
199
+
200
+ # catch a weird case where there is an extra space in an unzip file structure but not in the measure.name
201
+ if measure[:measure][:name] == "Add Daylight Sensor at Center of Spaces with a Specified Space Type Assigned"
202
+ if !File.exists? "#{@parsed_measures_path}#{measure[:measure][:name]}"
203
+ temp_dir_name = "#{@parsed_measures_path}Add Daylight Sensor at Center of Spaces with a Specified Space Type Assigned"
204
+ FileUtils.move(temp_dir_name, "#{@parsed_measures_path}#{measure[:measure][:name]}")
205
+ end
206
+ end
207
+
208
+ temp_dir_name = "#{@parsed_measures_path}#{measure[:measure][:name]}"
209
+
210
+ # Read the measure.rb file
211
+ #puts "save dir name #{temp_dir_name}"
212
+ measure_filename = "#{temp_dir_name}/measure.rb"
213
+ if File.exists?(measure_filename)
214
+ measure_hash = {}
215
+ # read in the measure file and extract some information
216
+ measure_string = File.read(measure_filename)
217
+
218
+ measure_hash[:classname] = measure_string.match(/class (.*) </)[1]
219
+ measure_hash[:path] = "#{@parsed_measures_path}#{measure_hash[:classname]}"
220
+ measure_hash[:name] = measure[:measure][:name]
221
+ if measure_string =~ /OpenStudio::Ruleset::WorkspaceUserScript/
222
+ measure_hash[:measure_type] = "EnergyPlusMeasure"
223
+ elsif measure_string =~ /OpenStudio::Ruleset::ModelUserScript/
224
+ measure_hash[:measure_type] = "RubyMeasure"
225
+ elsif measure_string =~ /OpenStudio::Ruleset::ReportingUserScript/
226
+ measure_hash[:measure_type] = "ReportingMeasure"
227
+ else
228
+ raise "measure type is unknown with an inherited class in #{measure_filename}: #{measure_hash.inspect}"
229
+ end
230
+
231
+ # move the directory to the class name
232
+ FileUtils.rm_rf(measure_hash[:path]) if Dir.exists?(measure_hash[:path]) && temp_dir_name != measure_hash[:path]
233
+ FileUtils.move(temp_dir_name, measure_hash[:path]) unless temp_dir_name == measure_hash[:path]
234
+
235
+ measure_hash[:arguments] = []
236
+
237
+ args = measure_string.scan(/(.*).*=.*OpenStudio::Ruleset::OSArgument::make(.*)Argument\((.*).*\)/)
238
+ #puts "found #{args.size} arguments for measure '#{measure[:measure][:name]}'"
239
+ args.each do |arg|
240
+ new_arg = {}
241
+ new_arg[:local_variable] = arg[0].strip
242
+ new_arg[:variable_type] = arg[1]
243
+ arg_params = arg[2].split(",")
244
+ new_arg[:name] = arg_params[0].gsub(/"|'/, "")
245
+ choice_vector = arg_params[1]
246
+
247
+ # local variable name to get other attributes
248
+ new_arg[:display_name] = measure_string.match(/#{new_arg[:local_variable]}.setDisplayName\((.*)\)/)[1]
249
+ new_arg[:display_name].gsub!(/"|'/, "") if new_arg[:display_name]
250
+
251
+ if measure_string =~ /#{new_arg[:local_variable]}.setDefaultValue/
252
+ new_arg[:default_value] = measure_string.match(/#{new_arg[:local_variable]}.setDefaultValue\((.*)\)/)[1]
253
+ case new_arg[:variable_type]
254
+ when "Choice"
255
+ # Choices to appear to only be strings?
256
+ new_arg[:default_value].gsub!(/"|'/, "")
257
+
258
+ # parse the choices from the measure
259
+ choices = measure_string.scan(/#{choice_vector}.*<<.*("|')(.*)("|')/)
260
+
261
+ new_arg[:choices] = choices.map { |c| c[1] }
262
+ # if the choices are inherited from the model, then need to just display the default value which
263
+ # somehow magically works because that is the display name
264
+ new_arg[:choices] << new_arg[:default_value] unless new_arg[:choices].include?(new_arg[:default_value])
265
+ when "String"
266
+ new_arg[:default_value].gsub!(/"|'/, "")
267
+ when "Bool"
268
+ new_arg[:default_value] = new_arg[:default_value].downcase == "true" ? true : false
269
+ when "Integer"
270
+ new_arg[:default_value] = new_arg[:default_value].to_i
271
+ when "Double"
272
+ new_arg[:default_value] = new_arg[:default_value].to_f
273
+ else
274
+ raise "unknown variable type of #{new_arg[:variable_type]}"
275
+ end
276
+ end
277
+
278
+ measure_hash[:arguments] << new_arg
279
+ end
280
+
281
+ # create a new measure.json file for parsing later if need be
282
+ File.open("#{measure_hash[:path]}/measure.json", 'w') { |f| f << JSON.pretty_generate(measure_hash) }
283
+
284
+ end
285
+ else
286
+ puts "Problems downloading #{measure[:measure][:name]}...moving on"
287
+ end
288
+ end
289
+ end
290
+ end
291
+
292
+ # retrieve measures for parsing metadata.
293
+ # specify a search term to narrow down search or leave nil to retrieve all
294
+ # set all_pages to true to iterate over all pages of results
295
+ # can't specify filters other than the hard-coded bundle and show_rows
296
+ def retrieve_measures(search_term = nil, filter_term=nil, return_all_pages = false, &block)
297
+ #raise "Please login before performing this action" if @session.nil?
298
+
299
+ #make sure filter_term includes bundle
300
+ if filter_term.nil?
301
+ filter_term = "fq[]=bundle%3Anrel_measure"
302
+ elsif !filter_term.include? "bundle"
303
+ filter_term = filter_term + "&fq[]=bundle%3Anrel_measure"
304
+ end
305
+
306
+
307
+ # use provided search term or nil.
308
+ # if return_all_pages is true, iterate over pages of API results. Otherwise only return first 100
309
+ results = search(search_term, filter_term, return_all_pages)
310
+ puts "#{results[:result].count} results returned"
311
+
312
+ results[:result].each do |result|
313
+ puts "retrieving measure: #{result[:measure][:name]}"
314
+ yield result
315
+ end
316
+
317
+ end
318
+
176
319
  # pushes component to the bcl and publishes them (if logged-in as BCL Website Admin user).
177
320
  # username and password set in ~/.bcl/config.yml file
178
321
  def push_content(filename_and_path, write_receipt_file, content_type)
@@ -196,10 +339,10 @@ module BCL
196
339
  "node" =>
197
340
  {
198
341
  "type" => "#{content_type}",
199
- #"field_component_tags" => #TODO remove this field_component_tags once BCL is fixed
200
- # {
201
- # "und" => "1289"
202
- # },
342
+ "field_component_tags" => #TODO remove this field_component_tags once BCL is fixed
343
+ {
344
+ "und" => "1289"
345
+ },
203
346
  "og_group_ref" =>
204
347
  {
205
348
  "und" =>
@@ -215,14 +358,17 @@ module BCL
215
358
 
216
359
  path = "/api/content.json"
217
360
  headers = {'Content-Type' => 'application/json', 'X-CSRF-Token' => @access_token, 'Cookie' => @session}
218
- #puts headers.inspect
361
+
362
+
219
363
  res = @http.post(path, @data.to_json, headers)
220
364
 
221
365
  res_j = "could not get json from http post response"
222
366
  if res.code == '200'
367
+ puts "200"
223
368
  res_j = JSON.parse(res.body)
224
369
  puts " 200 - Successful Upload"
225
370
  valid = true
371
+
226
372
  elsif res.code == '404'
227
373
  puts " error code: #{res.code} - #{res.body}"
228
374
  puts " 404 - check these common causes first:"
@@ -249,6 +395,7 @@ module BCL
249
395
  end
250
396
 
251
397
  [valid, res_j]
398
+
252
399
  end
253
400
 
254
401
  def push_contents(array_of_components, skip_files_with_receipts, content_type)
@@ -293,10 +440,10 @@ module BCL
293
440
  "node" =>
294
441
  {
295
442
  "uuid" => "#{uuid}",
296
- #"field_component_tags" => #TODO remove this field_component_tags once BCL is fixed
297
- # {
298
- # "und" => "1289"
299
- # },
443
+ "field_component_tags" => #TODO remove this field_component_tags once BCL is fixed
444
+ {
445
+ "und" => "1289"
446
+ },
300
447
  "og_group_ref" =>
301
448
  {
302
449
  "und" =>
@@ -375,7 +522,7 @@ module BCL
375
522
  else
376
523
  log_message = "pushing updated content #{File.basename(comp)}"
377
524
  puts log_message
378
- valid, res = update_content(comp, true, uuid, @group_id)
525
+ valid, res = update_content(comp, true, uuid)
379
526
  log_message += " #{valid} #{res.inspect.chomp}"
380
527
  end
381
528
  end
@@ -384,28 +531,84 @@ module BCL
384
531
  logs
385
532
  end
386
533
 
387
- # Simple method to search bcl and return the result as an XML object
388
- def search(search_str=nil, filter_str=nil)
389
- full_url = "/api/search.json"
534
+ # Simple method to search bcl and return the result as hash with symbols
535
+ # If all = true, iterate over pages of results and return all
536
+ # JSON ONLY
537
+ def search(search_str=nil, filter_str=nil, all=false)
538
+ full_url = "/api/search/"
390
539
 
391
540
  #add search term
392
- if !search_str.nil?
393
- full_url = full_url + "/" + search_str
541
+ if !search_str.nil? and search_str != ""
542
+ full_url = full_url + search_str
543
+ #strip out xml in case it's included. make sure .json is included
544
+ full_url = full_url.gsub('.xml', '')
545
+ unless search_str.include? ".json"
546
+ full_url = full_url + ".json"
547
+ end
548
+ else
549
+ full_url = full_url + "*.json"
394
550
  end
551
+
395
552
  #add api_version
553
+ if @api_version < 2.0
554
+ puts "WARNING: attempting to use search with api_version #{@api_version}. Use API v2.0 for this functionality."
555
+ end
396
556
  full_url = full_url + "?api_version=#{@api_version}"
557
+
397
558
  #add filters
398
559
  if !filter_str.nil?
560
+ #strip out api_version from filters, if included
561
+ if filter_str.include? "api_version="
562
+ filter_str = filter_str.gsub(/api_version=\d{1,}/, '')
563
+ filter_str = filter_str.gsub(/&api_version=\d{1,}/, '')
564
+ end
399
565
  full_url = full_url + "&" + filter_str
400
566
  end
401
567
 
402
- res = @http.get(full_url)
403
-
404
- #retrieve in json
405
- res.body
568
+ #simple search vs. all results
569
+ if !all
570
+ puts "search url: #{full_url}"
571
+ res = @http.get(full_url)
572
+ #return unparsed
573
+ JSON.parse(res.body, :symbolize_names => true)
574
+ else
575
+ #iterate over result pages
576
+ #modify filter_str for show_rows=200 for maximum returns
577
+ if filter_str.include? "show_rows="
578
+ full_url = full_url.gsub(/show_rows=\d{1,}/, "show_rows=200")
579
+ else
580
+ full_url = full_url + "&show_rows=200"
581
+ end
582
+ #make sure filter_str doesn't already have a page=x
583
+ full_url.gsub(/page=\d{1,}/, '')
584
+
585
+ pagecnt = 0
586
+ continue = 1
587
+ results = Array.new
588
+ while continue == 1
589
+ #retrieve current page
590
+ full_url_all = full_url + "&page=#{pagecnt}"
591
+ puts "search url: #{full_url_all}"
592
+ response = @http.get(full_url_all)
593
+ #parse here so you can build results array
594
+ res = JSON.parse(response.body)
595
+
596
+ if res["result"].count > 0
597
+ pagecnt += 1
598
+ res["result"].each do |r|
599
+ results << r
600
+ end
601
+ else
602
+ continue = 0
603
+ end
604
+ end
605
+ #return unparsed b/c that is what is expected
606
+ formatted_results = {"result" => results}
607
+ results_to_return = JSON.parse(formatted_results.to_json, :symbolize_names => true)
608
+ end
406
609
  end
407
610
 
408
- # Delete receipt files
611
+ # Delete receipt files
409
612
  def delete_receipts(array_of_components)
410
613
  array_of_components.each do |comp|
411
614
  receipt_file = File.dirname(comp) + "/" + File.basename(comp, '.tar.gz') + ".receipt"
@@ -417,21 +620,59 @@ module BCL
417
620
  end
418
621
 
419
622
  def list_all_measures()
420
- json = JSON.parse(search(nil, "f[0]=bundle%3Anrel_measure&show_rows=100"), :symbolize_names => true)
623
+ json = search(nil, "fq[]=bundle%3Anrel_measure&show_rows=100")
421
624
 
422
625
  json
423
626
  end
424
-
627
+
425
628
  def download_component(uid)
426
- result = @http.get("/api/component/download?uids=#{uid}")
427
-
428
- #https://bcl.nrel.gov/api/component/download?uids=a667a52f-aa04-4997-9292-c81671d75f84
429
- result.body ? result.body : nil
629
+
630
+ begin
631
+ result = @http.get("/api/component/download?uids=#{uid}")
632
+ puts "DOWNLOADING: /api/component/download?uids=#{uid}"
633
+ #puts "RESULTS: #{result.inspect}"
634
+ #puts "RESULTS BODY: #{result.body}"
635
+
636
+ #look at response code
637
+ if result.code == '200'
638
+ puts "Download Successful"
639
+ result.body ? result.body : nil
640
+ else
641
+ puts "Download fail. Error code #{result.code}"
642
+ nil
643
+ end
644
+
645
+ rescue
646
+ puts "Couldn't download uid(s): #{uid}...skipping"
647
+ nil
648
+ end
649
+
430
650
  end
431
651
 
652
+ private
653
+
654
+ def load_config()
655
+ config_filename = File.expand_path("~/.bcl/config.yml")
656
+
657
+ if File.exists?(config_filename)
658
+ puts "loading config settings from #{config_filename}"
659
+ @config = YAML.load_file(config_filename)
660
+ else
661
+ #location of template file
662
+ FileUtils.mkdir_p(File.dirname(config_filename))
663
+ File.open(config_filename, 'w') { |f| f << default_yaml.to_yaml }
664
+ File.chmod(0600, config_filename)
665
+ puts "******** Please fill in user credentials in #{config_filename} file if you need to upload data **********"
666
+ end
667
+ end
668
+
669
+ def default_yaml
670
+ settings = {:server => {:url => "https://bcl.nrel.gov", :user => {:username => "ENTER_BCL_USERNAME", :password => "ENTER_BCL_PASSWORD"}}}
671
+
672
+ settings
673
+ end
432
674
  end #class ComponentMethods
433
675
 
434
-
435
676
 
436
677
  # TODO make this extend the component_xml class (or create a super class around components)
437
678
 
@@ -495,4 +736,5 @@ module BCL
495
736
 
496
737
  end
497
738
 
739
+
498
740
  end # module BCL
@@ -383,4 +383,4 @@ module BCL
383
383
  end
384
384
  end
385
385
 
386
- end # module BCL
386
+ end # module BCL
@@ -27,12 +27,10 @@ require 'fileutils'
27
27
  require 'csv'
28
28
 
29
29
  # required gems
30
- require 'builder' #gem install builder (creates xml files)
31
30
  require 'bcl/tar_ball'
32
31
  require 'bcl/bcl_xml'
33
32
 
34
33
  module BCL
35
-
36
34
  class Measure
37
35
  def initialize(save_path)
38
36
  super(save_path)
@@ -43,12 +41,10 @@ module BCL
43
41
  xmlfile = File.open(filepath, 'r').read
44
42
 
45
43
  @xml = LibXML::XML::Document.string(xmlfile)
46
-
47
-
48
44
  end
49
45
 
50
46
 
51
47
 
52
48
  end
53
49
 
54
- end
50
+ end
data/lib/bcl/tar_ball.rb CHANGED
@@ -1,4 +1,4 @@
1
- ######################################################################
1
+ ######################################################################
2
2
  # Copyright (c) 2008-2013, Alliance for Sustainable Energy.
3
3
  # All rights reserved.
4
4
  #
@@ -19,8 +19,8 @@
19
19
 
20
20
  require 'rubygems'
21
21
 
22
- require 'zlib' #gem install zliby # need to convert this to another library (this is olllld)
23
22
  require 'archive/tar/minitar' #gem install archive-tar-minitar
23
+ require 'zip/zip' #gem install rubyzip -v 0.9.9
24
24
 
25
25
  module BCL
26
26
 
@@ -55,4 +55,33 @@ module BCL
55
55
  }
56
56
  end
57
57
 
58
+ def create_zip(destination, paths)
59
+
60
+ Zip::ZipFile.open(zipfile_name, Zip::File::CREATE) do |zipfile|
61
+ paths.each do |fi|
62
+ # Two arguments:
63
+ # - The name of the file as it will appear in the archive
64
+ # - The original file, including the path to find it
65
+ zipfile.add(fi.basename, fi)
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ def extract_zip(filename, destination, delete_zip = false)
72
+ Zip::ZipFile.open(filename) { |zip_file|
73
+ zip_file.each { |f|
74
+ f_path=File.join(destination, f.name)
75
+ FileUtils.mkdir_p(File.dirname(f_path))
76
+ zip_file.extract(f, f_path) unless File.exist?(f_path)
77
+ }
78
+ }
79
+
80
+ if delete_zip
81
+ fileList = Array.new
82
+ fileList << filename
83
+ FileUtils.rm(fileList)
84
+ end
85
+ end
86
+
58
87
  end # module BCL
data/lib/bcl/version.rb CHANGED
@@ -18,5 +18,5 @@
18
18
  ######################################################################
19
19
 
20
20
  module BCL
21
- VERSION = "0.3.7"
21
+ VERSION = "0.3.8"
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Macumber
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-11-19 00:00:00.000000000 Z
14
+ date: 2014-01-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: uuid
@@ -69,20 +69,6 @@ dependencies:
69
69
  - - '>='
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
- - !ruby/object:Gem::Dependency
73
- name: mongo
74
- requirement: !ruby/object:Gem::Requirement
75
- requirements:
76
- - - '>='
77
- - !ruby/object:Gem::Version
78
- version: '0'
79
- type: :runtime
80
- prerelease: false
81
- version_requirements: !ruby/object:Gem::Requirement
82
- requirements:
83
- - - '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
72
  - !ruby/object:Gem::Dependency
87
73
  name: json_pure
88
74
  requirement: !ruby/object:Gem::Requirement
@@ -141,7 +127,6 @@ files:
141
127
  - lib/bcl/current_taxonomy.xml
142
128
  - lib/bcl/master_taxonomy.rb
143
129
  - lib/bcl/measure_xml.rb
144
- - lib/bcl/mongo_to_component.rb
145
130
  - lib/bcl/tar_ball.rb
146
131
  - lib/bcl/version.rb
147
132
  - lib/bcl.rb
@@ -165,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
150
  version: '0'
166
151
  requirements: []
167
152
  rubyforge_project:
168
- rubygems_version: 2.0.2
153
+ rubygems_version: 2.0.3
169
154
  signing_key:
170
155
  specification_version: 4
171
156
  summary: Classes for creating component XML files for the BCL
@@ -1,114 +0,0 @@
1
- ######################################################################
2
- # Copyright (c) 2008-2013, Alliance for Sustainable Energy.
3
- # All rights reserved.
4
- #
5
- # This library is free software; you can redistribute it and/or
6
- # modify it under the terms of the GNU Lesser General Public
7
- # License as published by the Free Software Foundation; either
8
- # version 2.1 of the License, or (at your option) any later version.
9
- #
10
- # This library is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- # Lesser General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU Lesser General Public
16
- # License along with this library; if not, write to the Free Software
17
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
- ######################################################################
19
-
20
- #Mongo Record to Component
21
- require 'bcl/component_xml'
22
-
23
- module BCL
24
- class MongoToComponent
25
- attr_accessor :component
26
- attr_accessor :error_message
27
-
28
- def initialize(record)
29
- @component = nil
30
- @error_message = ""
31
-
32
- if record.has_key? "general"
33
- @component = BCL::Component.new('tmp')
34
- general = record["general"]
35
-
36
- #add uid/vid
37
- if record.has_key? "unique_id"
38
- component.uid = record["unique_id"]
39
- else
40
- @error_message = "Invalid Mongo record: no unique_id"
41
- end
42
- if record.has_key? "version_id"
43
- component.comp_version_id = record["version_id"]
44
- else
45
- @error_message = "Invalid Mongo record: no version_id"
46
- end
47
-
48
- #add general info
49
- if general.has_key? "name"
50
- component.name = general["name"]
51
- end
52
- if general.has_key? "description"
53
- @component.description = general["description"]
54
- end
55
- if general.has_key? "fidelity_level"
56
- @component.fidelity_level = general["fidelity_level"]
57
- end
58
- if general.has_key? "source_manufacturer"
59
- @component.source_manufacturer = general["source_manufacturer"]
60
- end
61
- if general.has_key? "source_url"
62
- @component.source_url = general["source_url"]
63
- end
64
-
65
- #add tags
66
- if general.has_key? "tags"
67
- tags = general["tags"]
68
- tags.each do |name,value|
69
- @component.add_tag(value)
70
- end
71
- end
72
-
73
- #add attributes
74
- if general.has_key? "attributes"
75
- attribute_container = general["attributes"]
76
- attribute_container.each do |a,attributes|
77
- #attributes iterator is an array of hashes
78
- #NOTE: double check this...could be old messed-up structure?
79
- attributes.each do |attribute|
80
- name = ""
81
- units = ""
82
- value = ""
83
- datatype = ""
84
- if attribute.has_key? "name"
85
- name = attribute["name"]
86
- end
87
- if attribute.has_key? "value"
88
- value = attribute["value"]
89
- end
90
- if attribute.has_key? "units"
91
- units = attribute["units"]
92
- end
93
- @component.add_attribute(name, value, units)
94
-
95
- #TODO: eventually find a way to validate the datatype in record with datatype in component
96
- end
97
- end
98
- end
99
-
100
- #todo: add provenance
101
-
102
- else
103
- @error_message = "Invalid Mongo record: no 'general' section"
104
- end
105
- #set component to NIL if there were errors
106
- if !@error_message == nil
107
- @component = nil
108
- end
109
- end
110
-
111
- end
112
-
113
- end # module BCL
114
-