bcl 0.1.7 → 0.1.8

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.
@@ -0,0 +1,476 @@
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
+ # Provides programmatic access to the component.xsd schema needed for
21
+ # generating the component information that will be uploaded to
22
+ # the Building Component Library.
23
+
24
+ require 'rubygems'
25
+ require 'pathname'
26
+ require 'fileutils'
27
+ require 'csv'
28
+
29
+ # required gems
30
+ require 'builder' #gem install builder (creates xml files)
31
+ require 'uuid' # gem install uuid
32
+ require 'bcl/tar_ball'
33
+
34
+
35
+ module BCL
36
+
37
+ SCHEMA_LOCATION = "component.xsd"
38
+
39
+ ProvStruct = Struct.new(:author, :datetime, :comment)
40
+ TagsStruct = Struct.new(:descriptor)
41
+ AttrStruct = Struct.new(:name, :value, :datatype, :units)
42
+ FileStruct = Struct.new(:version_software_program, :version_id, :fqp_file, :filename, :filetype)
43
+ #cost_type is an enumeration (not enforced) of installation, material, operations and maintenance,
44
+ #variable operations and maintenance, salvage
45
+ CostStruct = Struct.new(:cost_name, :cost_type, :category, :value, :interval,
46
+ :interval_units, :year, :location, :units, :currency, :source,
47
+ :reference_component_name, :reference_component_id)
48
+ ObjectStruct = Struct.new(:obj_type, :obj_instance)
49
+
50
+ class Component
51
+ attr_accessor :name
52
+ attr_accessor :uid
53
+ attr_accessor :comp_version_id
54
+ attr_accessor :description
55
+ attr_accessor :comment
56
+ attr_accessor :source_manufacturer
57
+ attr_accessor :source_model
58
+ attr_accessor :source_serial_no
59
+ attr_accessor :source_year
60
+ attr_accessor :source_url
61
+ attr_accessor :tags
62
+ attr_accessor :provenance
63
+ attr_accessor :attributes
64
+ attr_accessor :files
65
+ attr_accessor :costs
66
+ attr_accessor :objects
67
+
68
+ public
69
+
70
+ #the save path is where the component will be saved
71
+ def initialize(save_path)
72
+ @name = "" #this is also a unique identifier to the component...
73
+ @uid = UUID.new.generate
74
+ @comp_version_id = UUID.new.generate
75
+ @description = ""
76
+ @comment = ""
77
+ @source_manufacturer = ""
78
+ @source_model = ""
79
+ @source_serial_no = ""
80
+ @source_year = ""
81
+ @source_url = ""
82
+
83
+ #these items have multiple instances
84
+ @provenance = []
85
+ @tags = []
86
+ @attributes = []
87
+ @files = []
88
+ @costs = []
89
+ @objects = [] #container for saving the idf/osm snippets
90
+
91
+ @path = save_path
92
+
93
+ #puts "[ComponentXml] " + @path
94
+ #need to hit a webservice to validate which tags and attributes are
95
+ #available (including units?)
96
+
97
+ #todo: validate against master taxonomy
98
+ end
99
+
100
+ def open_component(filename)
101
+ read_component_xml(filename)
102
+ end
103
+
104
+ # savefile, save the component xml along with
105
+ # the files that have been added to the object
106
+ def save_tar_gz(delete_files = true)
107
+ current_d = Dir.pwd
108
+ paths = []
109
+
110
+ save_component_xml
111
+
112
+ paths << "./component.xml"
113
+
114
+ #copy over the files to the directory
115
+ @files.each do |file|
116
+ src_path = Pathname.new(file.fqp_file)
117
+ dest_path = Pathname.new("#{resolve_path}/#{file.filename}")
118
+ if File.exists?(src_path)
119
+ if src_path == dest_path
120
+ #do nothing, file is already where it needs to be
121
+ else
122
+ #move the file where it needs to go
123
+ FileUtils.cp(src_path, dest_path)
124
+ end
125
+ else
126
+ puts "#{src_path} -> File does not exist"
127
+ end
128
+ paths << "./#{file.filename}"
129
+ end
130
+
131
+ #take all the files and tar.gz them -- name the file the same as
132
+ #the directory
133
+
134
+ Dir.chdir("#{resolve_path}")
135
+ destination = "#{@name.gsub(" ","_").gsub(".","").gsub("/","_").gsub("-","_").gsub("___","_").gsub("__","_").gsub("in.","in").gsub(",","").strip}.tar.gz"
136
+
137
+ File.delete(destination) if File.exists?(destination)
138
+
139
+ BCL.tarball(destination, paths)
140
+
141
+ Dir.chdir(current_d)
142
+
143
+ if (delete_files)
144
+ @files.each do |file|
145
+ if File.exists?(File.dirname(file.fqp_file))
146
+ puts "[ComponentXml] Deleting: #{File.dirname(file.fqp_file)}"
147
+ FileUtils.rm_rf(File.dirname(file.fqp_file))
148
+ end
149
+ end
150
+ end
151
+
152
+ #puts "[ComponentXml] " + Dir.pwd
153
+ end
154
+
155
+ def add_provenance(author, datetime, comment)
156
+ prov = ProvStruct.new
157
+ prov.author = author
158
+ prov.datetime = datetime
159
+ prov.comment = comment
160
+
161
+ @provenance << prov
162
+ end
163
+
164
+ def add_tag(tag_name)
165
+ tag = TagsStruct.new
166
+ tag.descriptor = tag_name
167
+
168
+ @tags << tag
169
+ end
170
+
171
+ def add_attribute(name, value, units, datatype = nil)
172
+ attr = AttrStruct.new
173
+ attr.name = name
174
+ attr.value = value
175
+
176
+ if !datatype.nil?
177
+ attr.datatype = datatype
178
+ else
179
+ attr.datatype = get_datatype(value)
180
+ end
181
+ attr.units = units
182
+
183
+ @attributes << attr
184
+ end
185
+
186
+ def add_file(version_sp, version_id, fqp_file, filename, filetype)
187
+ fs = FileStruct.new
188
+ fs.version_software_program = version_sp
189
+ fs.version_id = version_id
190
+ fs.fqp_file = fqp_file
191
+ fs.filename = filename
192
+ fs.filetype = filetype
193
+
194
+ @files << fs
195
+ end
196
+
197
+
198
+ def add_cost(cost_name, cost_type, category, value, units, interval, interval_units, year, location, currency,
199
+ source, reference_component_name, reference_component_id)
200
+ cs = CostStruct.new
201
+ cs.cost_name = cost_name
202
+ cs.cost_type = cost_type
203
+ cs.category = category
204
+ cs.value = value
205
+ cs.interval = interval
206
+ cs.interval_units = interval_units
207
+ cs.year = year
208
+ cs.location = location
209
+ cs.units = units
210
+ cs.currency = currency
211
+ cs.source = source
212
+ cs.reference_component_name = reference_component_name
213
+ cs.reference_component_id = reference_component_id
214
+
215
+ @costs << cs
216
+ end
217
+
218
+ def add_object(object_type, object_instance)
219
+ ob = ObjectStruct.new
220
+ ob.obj_type = object_type
221
+ ob.obj_instance = object_instance
222
+
223
+ @objects << ob
224
+ end
225
+
226
+ def resolve_path
227
+ FileUtils.mkdir_p(@path) unless File.directory?(@path)
228
+ new_path = "#{@path}/#{name.gsub(" ","_").gsub("/","_").gsub("-","_").gsub("___","_").gsub("__","_").gsub("in.","in").gsub(",","").strip}"
229
+ FileUtils.mkdir_p(new_path) unless File.directory?(new_path)
230
+ result = new_path
231
+ end
232
+
233
+ def osm_resolve_path
234
+ FileUtils.mkdir_p(@path) unless File.directory?(@path)
235
+ new_path = "#{@path}/osm_#{name.gsub(" ","_").gsub("/","_").gsub("-","_").gsub("___","_").gsub("__","_").gsub("in.","in").gsub(",","").strip}"
236
+ FileUtils.mkdir_p(new_path) unless File.directory?(new_path)
237
+ result = new_path
238
+ end
239
+
240
+ def osc_resolve_path
241
+ FileUtils.mkdir_p(@path) unless File.directory?(@path)
242
+ new_path = "#{@path}/osc_#{name.gsub(" ","_").gsub("/","_").gsub("-","_").gsub("___","_").gsub("__","_").gsub("in.","in").gsub(",","").strip}"
243
+ FileUtils.mkdir_p(new_path) unless File.directory?(new_path)
244
+ result = new_path
245
+ end
246
+
247
+ def resolve_component_path(component_type)
248
+ FileUtils.mkdir_p(@path) unless File.directory?(@path)
249
+ new_path = @path + '/OpenStudio'
250
+ FileUtils.mkdir_p(new_path) unless File.directory?(new_path)
251
+ new_path = new_path + "/#{component_type}"
252
+ FileUtils.mkdir_p(new_path) unless File.directory?(new_path)
253
+ return new_path
254
+ end
255
+
256
+ def tmp_resolve_path
257
+ FileUtils.mkdir_p(@path) unless File.directory?(@path)
258
+ new_path = "#{@path}/tmp_#{name.gsub(" ","_").gsub("/","_").gsub("-","_").gsub("___","_").gsub("__","_").gsub("in.","in").gsub(",","").strip}"
259
+ FileUtils.mkdir_p(new_path) unless File.directory?(new_path)
260
+ result = new_path
261
+ end
262
+
263
+
264
+ def create_os_component(osobj)
265
+ osobj.getCostLineItems.each do |os|
266
+ @costs.each do |cost|
267
+ #figure out costs for constructions
268
+ os.setMaterialCost(cost.value.to_f) if cost.category == "material"
269
+ if cost.category == "installation"
270
+ os.setInstallationCost(cost.value.to_f)
271
+ os.setExpectedLife(cost.interval.to_i)
272
+ end
273
+ os.setFixedOM(cost.value.to_f) if cost.category == "operations and maintenance"
274
+ os.setVariableOM(cost.value.to_f) if cost.category == "variable operations and maintenance"
275
+ os.setSalvageCost(cost.value.to_f) if cost.category == "salvage"
276
+ end
277
+ end
278
+ newcomp = osobj.createComponent
279
+
280
+ cd = newcomp.componentData
281
+ cd.setDescription(@description)
282
+
283
+ at = newcomp.componentData.componentDataAttributes
284
+ @attributes.each do |attrib|
285
+ if (attrib.value.to_s != "") and (attrib.name.to_s != "")
286
+ if attrib.units != ""
287
+ at.addAttribute(tc(attrib.name), attrib.value, attrib.units)
288
+ else
289
+ at.addAttribute(tc(attrib.name), attrib.value)
290
+ end
291
+ end
292
+ end
293
+
294
+ tg = newcomp.componentData.componentDataTags
295
+ comp_tag = ""
296
+ @tags.each do |tag|
297
+ tg.addTag(tc(tag.descriptor))
298
+ if (tag.descriptor != "energyplus") and (tag.descriptor != "construction")
299
+ #create a map of component tags to directories
300
+ comp_tag = tag.descriptor
301
+ if comp_tag == "interior wall"
302
+ comp_tag = "interiorwalls"
303
+ elsif comp_tag == "exterior wall"
304
+ comp_tag = "exteriorwalls"
305
+ elsif comp_tag == "exterior slab"
306
+ comp_tag = "exteriorslabs"
307
+ elsif comp_tag == "exposed floor"
308
+ comp_tag = "exposedfloors"
309
+ elsif comp_tag == "attic floor"
310
+ comp_tag = "atticfloors"
311
+ elsif comp_tag == "roof"
312
+ comp_tag = "roofs"
313
+ elsif comp_tag == "door"
314
+ comp_tag = "doors"
315
+ elsif comp_tag == "skylight"
316
+ comp_tag = "skylights"
317
+ elsif comp_tag == "window"
318
+ comp_tag = "windows"
319
+ end
320
+ puts comp_tag
321
+ end
322
+ end
323
+
324
+ return newcomp
325
+ end
326
+
327
+ def save_component_xml(dir_path = resolve_path)
328
+ xmlfile = File.new(dir_path + '/component.xml', 'w')
329
+ comp_xml = Builder::XmlMarkup.new(:target => xmlfile, :indent=>2)
330
+
331
+ #setup the xml file
332
+ comp_xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8"
333
+ comp_xml.component("xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
334
+ "xsi:noNamespaceSchemaLocation"=>"#{SCHEMA_LOCATION}") {
335
+ comp_xml.name @name
336
+ comp_xml.uid @uid
337
+ comp_xml.version_id @comp_version_id
338
+ comp_xml.description @description if @description != ""
339
+ comp_xml.comment @comment if @comment != ""
340
+
341
+ comp_xml.provenances {
342
+ @provenance.each do |prov|
343
+ comp_xml.provenance {
344
+ comp_xml.author prov.author
345
+ comp_xml.datetime prov.datetime
346
+ comp_xml.comment prov.comment
347
+ }
348
+ end
349
+ }
350
+
351
+ comp_xml.tags {
352
+ @tags.each do |tag|
353
+ comp_xml.tag tag.descriptor
354
+ end
355
+ }
356
+
357
+ comp_xml.attributes {
358
+ @attributes.each do |attrib|
359
+ if (attrib.value.to_s != "") and (attrib.name.to_s != "") then
360
+ comp_xml.attribute {
361
+ comp_xml.name attrib.name
362
+ comp_xml.value attrib.value
363
+ comp_xml.datatype attrib.datatype
364
+ comp_xml.units attrib.units if attrib.units != ""
365
+ }
366
+ end
367
+ end
368
+ }
369
+
370
+ comp_xml.source {
371
+ comp_xml.manufacturer @source_manufacturer if @source_manufacturer != ""
372
+ comp_xml.model @source_model if @source_model != ""
373
+ comp_xml.serial_no @source_serial_no if @source_serial_no != ""
374
+ comp_xml.year @source_year if @source_year != ""
375
+ comp_xml.url @source_url if @source_url != ""
376
+ }
377
+
378
+ if not @files.nil?
379
+ comp_xml.files {
380
+ @files.each do |file|
381
+ comp_xml.file {
382
+ comp_xml.version {
383
+ comp_xml.software_program file.version_software_program
384
+ comp_xml.identifier file.version_id
385
+ }
386
+
387
+ comp_xml.filename file.filename
388
+ comp_xml.filetype file.filetype
389
+ }
390
+ end
391
+ }
392
+ end
393
+
394
+ #check if we should write out costs, don't write if all values are 0 or nil
395
+ #DLM: schema always expects costs
396
+ write_costs = true
397
+ #if not @costs.nil?
398
+ # @costs.each do |cost|
399
+ # if (cost.value.nil?) && (not cost.value == 0)
400
+ # write_costs = true
401
+ # break
402
+ # end
403
+ # end
404
+ #end
405
+
406
+ if write_costs
407
+ comp_xml.costs {
408
+ @costs.each do |cost|
409
+ comp_xml.cost {
410
+ comp_xml.instance_name cost.cost_name
411
+ comp_xml.cost_type cost.cost_type
412
+ comp_xml.category cost.category
413
+ comp_xml.value cost.value
414
+ comp_xml.units cost.units if cost.units != ""
415
+ comp_xml.interval cost.interval if cost.interval != ""
416
+ comp_xml.interval_units cost.interval_units if cost.interval_units != ""
417
+ comp_xml.year cost.year if cost.year != ""
418
+ comp_xml.currency cost.currency if cost.currency != ""
419
+ comp_xml.source cost.source if cost.source != ""
420
+ comp_xml.reference_component_name cost.reference_component_name if cost.reference_component_name != ""
421
+ comp_xml.reference_component_id cost.reference_component_id if cost.reference_component_id != ""
422
+ }
423
+ end
424
+ }
425
+ end
426
+
427
+ }
428
+
429
+ xmlfile.close
430
+ end
431
+
432
+ def get_attribute(attribute_name)
433
+ result = nil
434
+ @attributes.each do |attr|
435
+ if attr.name == attribute_name
436
+ result = attr
437
+ end
438
+ end
439
+
440
+ result
441
+
442
+ end
443
+
444
+ #return the title case of the string
445
+ def tc(input)
446
+ val = input.gsub(/\b\w/){$&.upcase}
447
+ if val.downcase == "energyplus"
448
+ val = "EnergyPlus"
449
+ end
450
+ return val
451
+ end
452
+
453
+ private
454
+
455
+ def get_datatype(input_value)
456
+ dt = 'undefined'
457
+
458
+ # simple method to test if the input_value is a string, float, or integer.
459
+ # First convert the value back to a string for testing (in case it was passed as a float/integer)
460
+ test = input_value.to_s
461
+ input_value = test.match('\.').nil? ? Integer(test) : Float(test) rescue test.to_s
462
+
463
+ if input_value.is_a?(Fixnum) || input_value.is_a?(Bignum)
464
+ dt = "int"
465
+ elsif input_value.is_a?(Float)
466
+ dt = "float"
467
+ else
468
+ dt = "string"
469
+ end
470
+
471
+ dt
472
+ end
473
+
474
+ end
475
+
476
+ end # module BCL
Binary file
@@ -20,9 +20,10 @@
20
20
  require 'rubygems'
21
21
  require 'pathname'
22
22
  require 'fileutils'
23
- require 'builder' #gem install builder (creates xml files)
24
23
  require 'rbconfig'
25
24
 
25
+ #require gems
26
+ require 'builder' #gem install builder (creates xml files)
26
27
  $have_win32ole = false
27
28
 
28
29
  if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
@@ -0,0 +1,114 @@
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
+
@@ -19,34 +19,35 @@
19
19
 
20
20
  require 'rubygems'
21
21
 
22
+ # require gems
22
23
  require 'zlib' #gem install zliby
23
24
  require 'archive/tar/minitar' #gem install archive-tar-minitar
24
25
 
25
26
  module BCL
26
27
 
27
- module_function
28
+ module_function
28
29
 
29
- def tarball(destination, paths)
30
- Zlib::GzipWriter.open(destination) do |gzip|
31
- out = Archive::Tar::Minitar::Output.new(gzip)
32
- puts "[TarBall] Starting #{destination}"
33
- paths.each do |fi|
34
- puts "[TarBall] Packing #{fi}"
35
- if File.exists?(fi)
36
- Archive::Tar::Minitar.pack_file(fi, out)
37
- else
38
- puts "[TarBall] Could not file file: #{fi}"
30
+ def tarball(destination, paths)
31
+ Zlib::GzipWriter.open(destination) do |gzip|
32
+ out = Archive::Tar::Minitar::Output.new(gzip)
33
+ puts "[TarBall] Starting #{destination}"
34
+ paths.each do |fi|
35
+ puts "[TarBall] Packing #{fi}"
36
+ if File.exists?(fi)
37
+ Archive::Tar::Minitar.pack_file(fi, out)
38
+ else
39
+ puts "[TarBall] Could not file file: #{fi}"
40
+ end
39
41
  end
42
+ puts "[TarBall] Finished #{destination}"
43
+ out.close
40
44
  end
41
- puts "[TarBall] Finished #{destination}"
42
- out.close
43
45
  end
44
- end
45
46
 
46
- def extract_tarball(filename, destination)
47
- Zlib::GzipReader.open(filename) {|gz|
48
- Archive::Tar::Minitar.unpack(gz, destination)
49
- }
50
- end
47
+ def extract_tarball(filename, destination)
48
+ Zlib::GzipReader.open(filename) {|gz|
49
+ Archive::Tar::Minitar.unpack(gz, destination)
50
+ }
51
+ end
51
52
 
52
53
  end # module BCL
data/lib/bcl/version.rb CHANGED
@@ -18,5 +18,5 @@
18
18
  ######################################################################
19
19
 
20
20
  module BCL
21
- VERSION = "0.1.7"
21
+ VERSION = "0.1.8"
22
22
  end
data/lib/bcl.rb CHANGED
@@ -1,7 +1,7 @@
1
- require 'bcl/ComponentSpreadsheet'
2
- require 'bcl/ComponentXml'
3
- require 'bcl/GatherComponents'
4
- require 'bcl/TarBall'
5
- require 'bcl/MasterTaxonomy'
6
- require 'bcl/MongoToComponent'
1
+ require 'bcl/component_spreadsheet'
2
+ require 'bcl/component_xml'
3
+ require 'bcl/component_methods'
4
+ require 'bcl/tar_ball'
5
+ require 'bcl/master_taxonomy'
6
+ require 'bcl/mongo_to_component'
7
7
  require 'bcl/version'