lib/from_honeybee/model_object.rb in honeybee-openstudio-1.8.1 vs lib/from_honeybee/model_object.rb in honeybee-openstudio-1.8.2
- old
+ new
@@ -1,110 +1,110 @@
-# *******************************************************************************
-# Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
-# Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# (1) Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-#
-# (2) Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# (3) Neither the name of the copyright holder nor the names of any contributors
-# may be used to endorse or promote products derived from this software without
-# specific prior written permission from the respective party.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
-# UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
-# THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-# *******************************************************************************
-
-require 'openstudio'
-
-module FromHoneybee
- class ModelObject
- # Base class from which all other ojbects in this module inherit.
- # Attributes and methods of this class should be overwritten in each inheriting object.
-
- attr_reader :errors, :warnings
-
- def method_missing(sym, *args)
- name = sym.to_s
- aname = name.sub('=', '')
- asym = aname.to_sym
- is_getter = args.empty? && @hash.key?(asym)
- is_setter = (name != aname) && (args.size == 1) && @hash.key?(asym)
-
- if is_getter
- return @hash[asym]
- elsif is_setter
- return @hash[asym] = args[0]
- end
-
- # do the regular thing
- super
- end
-
- # Read ModelObject JSON from disk
- def self.read_from_disk(file)
- hash = nil
- File.open(File.join(file), 'r') do |f|
- hash = JSON.parse(f.read, symbolize_names: true)
- end
- new(hash)
- end
-
- # Load ModelObject from symbolized hash
- def initialize(hash)
- # initialize class variable @@extension only once
- @@extension ||= Extension.new
- @@schema ||= @@extension.schema
-
- @hash = hash
- @type = @hash[:type]
- raise 'Unknown type' if @type.nil?
- raise "Incorrect model type '#{@type}'" unless @type == @hash[:type]
- @openstudio_object = nil
- end
-
- # hash containing the object defaults taken from the open API schema
- def defaults
- raise 'defaults not implemented for ModelObject, override in your class'
- end
-
- # check if the ModelObject is valid
- def valid?
- return validation_errors.empty?
- end
-
- # return detailed model validation errors
- def validation_errors
- if Gem.loaded_specs.has_key?("json-schema")
- require 'json-schema'
- # if this raises a 'Invalid fragment resolution for :fragment option' it is because @type
- # does not correspond to a definition in the schema
- JSON::Validator.fully_validate(@@schema, @hash, :fragment => "#/definitions/#{@type}")
- end
- end
-
- # find an equivalent existing object in the openstudio model, return nil if not found
- def find_existing_openstudio_object(openstudio_model)
- raise 'find_existing_openstudio_object is not yet implemented for this ModelObject.'
- end
-
- # create a new object in the openstudio model and return it
- def to_openstudio(openstudio_model)
- raise 'to_openstudio is not yet implemented for this ModelObject.'
- end
- end # ModelObject
-end # FromHoneybee
+# *******************************************************************************
+# Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
+# Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# (1) Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# (2) Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# (3) Neither the name of the copyright holder nor the names of any contributors
+# may be used to endorse or promote products derived from this software without
+# specific prior written permission from the respective party.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
+# UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
+# THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# *******************************************************************************
+
+require 'openstudio'
+
+module FromHoneybee
+ class ModelObject
+ # Base class from which all other ojbects in this module inherit.
+ # Attributes and methods of this class should be overwritten in each inheriting object.
+
+ attr_reader :errors, :warnings
+
+ def method_missing(sym, *args)
+ name = sym.to_s
+ aname = name.sub('=', '')
+ asym = aname.to_sym
+ is_getter = args.empty? && @hash.key?(asym)
+ is_setter = (name != aname) && (args.size == 1) && @hash.key?(asym)
+
+ if is_getter
+ return @hash[asym]
+ elsif is_setter
+ return @hash[asym] = args[0]
+ end
+
+ # do the regular thing
+ super
+ end
+
+ # Read ModelObject JSON from disk
+ def self.read_from_disk(file)
+ hash = nil
+ File.open(File.join(file), 'r') do |f|
+ hash = JSON.parse(f.read, symbolize_names: true)
+ end
+ new(hash)
+ end
+
+ # Load ModelObject from symbolized hash
+ def initialize(hash)
+ # initialize class variable @@extension only once
+ @@extension ||= Extension.new
+ @@schema ||= @@extension.schema
+
+ @hash = hash
+ @type = @hash[:type]
+ raise 'Unknown type' if @type.nil?
+ raise "Incorrect model type '#{@type}'" unless @type == @hash[:type]
+ @openstudio_object = nil
+ end
+
+ # hash containing the object defaults taken from the open API schema
+ def defaults
+ raise 'defaults not implemented for ModelObject, override in your class'
+ end
+
+ # check if the ModelObject is valid
+ def valid?
+ return validation_errors.empty?
+ end
+
+ # return detailed model validation errors
+ def validation_errors
+ if Gem.loaded_specs.has_key?("json-schema")
+ require 'json-schema'
+ # if this raises a 'Invalid fragment resolution for :fragment option' it is because @type
+ # does not correspond to a definition in the schema
+ JSON::Validator.fully_validate(@@schema, @hash, :fragment => "#/definitions/#{@type}")
+ end
+ end
+
+ # find an equivalent existing object in the openstudio model, return nil if not found
+ def find_existing_openstudio_object(openstudio_model)
+ raise 'find_existing_openstudio_object is not yet implemented for this ModelObject.'
+ end
+
+ # create a new object in the openstudio model and return it
+ def to_openstudio(openstudio_model)
+ raise 'to_openstudio is not yet implemented for this ModelObject.'
+ end
+ end # ModelObject
+end # FromHoneybee