# # Archetype environment # module Archetype::SassExtensions::Environment # # get the current environment (this is similar to compass_env) # # *Returns*: # - {String} the current environment the compiler is running in # def archetype_env return identifier((Compass.configuration.environment || :development).to_s) end # # namespaces a string # # *Parameters*: # - $string {String} the string to namespace # *Returns*: # - {String} the namespaced string # def archetype_namespace(string) namespace = environment.var('CONFIG_NAMESPACE') return string if helpers.is_null(namespace) return identifier(namespace.value + '_' + string.value) end # # gets the value of the given key from the `meta` config map # # *Parameters*: # - $key {String} the key to lookup # *Returns*: # - {*} the value from the meta map # def archetype_meta(key) # if `$CONFIG_META` is set, use it, otherwise, use the one set on the configuration object meta = environment.var('CONFIG_META') || Compass.configuration.archetype_meta || {} # convert it to a hash meta = helpers.map_to_hash(meta) # fetch the value for the key value = meta[key.value] # if we got nothing... if value.nil? # return `null` return null # if it's a Sass::Script value... elsif value.is_a?(Sass::Script::Value::Base) # just return it return value # otherwise... else # convert it to a Sass::Script::String return identifier(helpers.to_str(value)) end end # # registers an Archetype module as active # # *Parameters*: # - $name {String} the module name # *Returns*: # - {List} the list of current registered modules # def register_archetype_module(name) registry = archetype_modules_registry # if it's already in the registry, just return the current list return list(registry, :comma) if archetype_modules_registry.include?(name) # update the registry with the module name registry = list(registry.dup.push(name), :comma) environment.global_env.set_var('ARCHETYPE_MODULES_REGISTRY', registry) # return the registry return registry end # # checks to see if a required module is loaded or not # if not, throws an error # # *Parameters*: # - $name {String} the module name # *Returns*: # - {Boolean} whether or not all the modules are registered # def require_archetype_modules(*names) return check_archetype_modules(names, true) end alias_method :require_archetype_module, :require_archetype_modules # # checks whether or not a module has been registered # # *Parameters*: # - $name {String} the module name # *Returns*: # - {Boolean} whether or not all the modules are registered # def has_archetype_modules(*names) return check_archetype_modules(names, false) end alias_method :has_archetype_module, :has_archetype_modules # # sets the intialization state of Archetype # # *Parameters* # - $state {*} the state to set # *Returns*: # - {*} the state that was just set # def init_archetype(state = identifier('done')) environment.global_env.set_var('ARCHETYPE_INIT', state) return state end # # sets the intialization state of Archetype to `skip` # # *Returns*: # - {String} the state `skip` that was just set # def skip_archetype_init init_archetype(identifier('skip')) end # # sets the intialization state of Archetype to `null` # # *Returns*: # - {Null} the state `null` that was just set # def force_archetype_init init_archetype(null) end # # gets Archetype's current initialization state # # *Returns*: # - {*} Archetype's current initialization state # def archetype_init_state return environment.var('ARCHETYPE_INIT') || null end private def check_archetype_modules(names, warn = false) missing = [] names.each do |name| missing << name unless archetype_modules_registry.include?(name) end if missing.count > 0 and warn helpers.logger.record(:error, "[archetype:module:missing] the required module#{missing.count > 1 ? 's are' : ' is'} missing: #{helpers.to_str(missing)}") end return bool(missing.count == 0) end def archetype_modules_registry (environment.var('ARCHETYPE_MODULES_REGISTRY') || []).to_a end end