lib/from_honeybee/extension.rb in honeybee-openstudio-1.8.1 vs lib/from_honeybee/extension.rb in honeybee-openstudio-1.8.2

- old
+ new

@@ -1,109 +1,109 @@ -# ******************************************************************************* -# 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/extension' - -# NOTE: This file has been derived from one within the openStudio-extension gem -# The properties here are a standard part of openstudio extensions - -module FromHoneybee - class Extension < OpenStudio::Extension::Extension - @@schema = nil - - # Override parent class - def initialize - super - - # Note that the root_dir is only meaningful when the gem is in a github repository - # When installed as a Ruby gem, the highest directory within the gem is the lib_dir - @root_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..')) - @lib_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..')) - - @instance_lock = Mutex.new - @@schema ||= schema - end - - # Return the absolute path of the measures or nil if there is none. - # Can be used when configuring OSWs - def measures_dir - File.absolute_path(File.join(@lib_dir, 'measures')) - end - - # Relevant files such as the openapi JSON schema files for the honeybee model. - # Return the absolute path of the files or nil if there is none. - # Used when configuring OSWs - def files_dir - File.absolute_path(File.join(@lib_dir, 'files')) - end - - # Doc templates are common files like copyright files which are used to update measures - # Doc templates will only be applied when the gem is a part of a repository - # Return the absolute path of the doc templates dir or nil if there is none - def doc_templates_dir - File.absolute_path(File.join(@root_dir, 'doc_templates')) - end - - # return path to the model schema file - def schema_file - File.join(@lib_dir, 'from_honeybee', '_openapi', 'model.json') - end - - # return the model schema - def schema - @instance_lock.synchronize do - if @@schema.nil? - File.open(schema_file, 'r') do |f| - @@schema = JSON.parse(f.read, symbolize_names: true) - end - end - end - - @@schema - end - - # check if the model schema is valid - def schema_valid? - if Gem.loaded_specs.has_key?("json-schema") - require 'json-schema' - metaschema = JSON::Validator.validator_for_name('draft6').metaschema - JSON::Validator.validate(metaschema, @@schema) - end - end - - # return detailed schema validation errors - def schema_validation_errors - if Gem.loaded_specs.has_key?("json-schema") - metaschema = JSON::Validator.validator_for_name('draft6').metaschema - JSON::Validator.fully_validate(metaschema, @@schema) - end - end - end -end +# ******************************************************************************* +# 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/extension' + +# NOTE: This file has been derived from one within the openStudio-extension gem +# The properties here are a standard part of openstudio extensions + +module FromHoneybee + class Extension < OpenStudio::Extension::Extension + @@schema = nil + + # Override parent class + def initialize + super + + # Note that the root_dir is only meaningful when the gem is in a github repository + # When installed as a Ruby gem, the highest directory within the gem is the lib_dir + @root_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..')) + @lib_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..')) + + @instance_lock = Mutex.new + @@schema ||= schema + end + + # Return the absolute path of the measures or nil if there is none. + # Can be used when configuring OSWs + def measures_dir + File.absolute_path(File.join(@lib_dir, 'measures')) + end + + # Relevant files such as the openapi JSON schema files for the honeybee model. + # Return the absolute path of the files or nil if there is none. + # Used when configuring OSWs + def files_dir + File.absolute_path(File.join(@lib_dir, 'files')) + end + + # Doc templates are common files like copyright files which are used to update measures + # Doc templates will only be applied when the gem is a part of a repository + # Return the absolute path of the doc templates dir or nil if there is none + def doc_templates_dir + File.absolute_path(File.join(@root_dir, 'doc_templates')) + end + + # return path to the model schema file + def schema_file + File.join(@lib_dir, 'from_honeybee', '_openapi', 'model.json') + end + + # return the model schema + def schema + @instance_lock.synchronize do + if @@schema.nil? + File.open(schema_file, 'r') do |f| + @@schema = JSON.parse(f.read, symbolize_names: true) + end + end + end + + @@schema + end + + # check if the model schema is valid + def schema_valid? + if Gem.loaded_specs.has_key?("json-schema") + require 'json-schema' + metaschema = JSON::Validator.validator_for_name('draft6').metaschema + JSON::Validator.validate(metaschema, @@schema) + end + end + + # return detailed schema validation errors + def schema_validation_errors + if Gem.loaded_specs.has_key?("json-schema") + metaschema = JSON::Validator.validator_for_name('draft6').metaschema + JSON::Validator.fully_validate(metaschema, @@schema) + end + end + end +end