lib/cloud_powers/zenv.rb in cloud_powers-0.2.7.1 vs lib/cloud_powers/zenv.rb in cloud_powers-0.2.7.2

- old
+ new

@@ -1,19 +1,27 @@ require 'dotenv' require_relative 'helper' + module Smash module CloudPowers # This module provides some environment variable management and functionality + # Hopefully it should provide us with some "Zen", when dealing with normally + # annoying env issues. Meh, it probably won't but I like the name, so it stays :} # System ENV, dotenv ENV and instance variables are considered for now but this - # will also use elasticache/redis...some other stuff too, in the coming weeks + # will also use elasticache/redis...some other stuff too, in the coming versions module Zenv include Smash::CloudPowers::Helper # Attempts to find a file by searching the current directory for the file - # then walking up the file tree and searching at each stop - # Parameters name <String>: name of the file or directory to find - # Returns Pathname: path to the file or directory given as the `name` param + # then walking up the file tree and searching at each stop all the way up + # to the root directory + # + # Parameters + # * name +String+ - name of the file or directory to find + # + # Returns + # +Pathname+ - path to the file or directory given as the +name+ parameter def file_tree_search(name) next_dir = Pathname.new(`pwd`.strip).parent current_dir = Pathname.new(`pwd`.strip) until(next_dir == current_dir) do path = Dir.glob("#{current_dir}/#{name}").first @@ -22,21 +30,28 @@ next_dir = next_dir.parent end return nil end - # Search through the .env variables for a key or if no key is given, - # return all the .env-vars and their values + # Search through the {Dotenv}[https://github.com/bkeepers/dotenv] + # variables for a key or if no key is given, return all the .env-vars + # and their values + # + # Parameters + # * key +String+ - def env_vars(key = '') return ENV if key.empty? ENV[to_snake(key).upcase] end # Search through the instance variables for a key or if no key is given, # return all the i-vars and their values + # # Parameters [key <String]: The key to search for + # # Returns + # the value of the +key+ searched for def i_vars(key = '') if key.empty? return self.instance_variables.inject({}) do |r,v| r.tap { |h| h[to_snake(v)] = self.instance_variable_get(to_i_var(v)) } end @@ -45,35 +60,62 @@ end # PROJECT_ROOT should be set as early as possible in this Node's initilize # method. This method tries to search for it, using #zfind() and if a `nil` # result is returned from that search, `pwd` is used as the PROJECT_ROOT. - # Returns Path to the project root or where ever `pwd` resolves to <Pathname> - # TODO: improve this...it needs to find the gem's method's caller's project + # + # Returns + # +Pathname+ - path to the project root or where ever <tt>`pwd`</tt> resolves + # to for the caller + # + # Notes + # * TODO: improve this...it needs to find the gem's method's caller's project # root or at least the gem's method's caller's file's location. + # + # Example + # # called from cerebrum/cerebrum.rb in /home/ubuntu + # project_root + # # => '/home/ubuntu/cerebrum/' + # # or + # # called from go_nuts.rb#begin_going_crazy():(line -999999999.9) in /Users/crazyman/.ssh/why/all/the/madness/ + # project_root + # # => '/Users/crazyman/.ssh/why/all/the/madness/' def project_root if @project_root.nil? file_home = Pathname.new( caller_locations.first.path.strip.split(/\//).last).realdirpath.parent # path = (zfind('PROJECT_ROOT') or file_home) @project_root = Pathname.new(file_home) end @project_root end - # Manually set the `@project_root` i-var as a `Pathname` object. - # Parameters New path to the project root <String|Pathname> - # Returns @project_root <Pathname> + # Manually set the +@project_root+ i-var as a +Pathname+ object. + # + # Parameters New path to the project root +String+|+Pathname+ + # + # Returns +Pathname+ - +@project_root+ + # + # Example + # project_root + # # => '/home/ubuntu/cerebrum/' + # project_root = Pathname.new(`pwd`) + # project_root == `pwd` + # # => true def project_root=(var) @project_root = Pathname.new(var) end # Search through the system environment variables for a key or if no key # is given, return all the system-env-vars and their values + # # Parameters [key <String>]: The key to search for - # Returns Value <String> for the given key or if no key was given, a - # Hash with { key => value, ... } is returned for all keys with a value. + # + # Returns + # * if a +key+ is given as a parameter, +String+ + # * if no +key+ is given as a parameter, +Hash+ + # with this structure +{ key => value, ... }+ is returned for all keys with a value. # Keys with no value are ommitted from the result. def system_vars(key = '') if key.empty? # Separate key-value pairs from the large string received by `ENV` separate_pairs = `ENV`.split(/\n/).map do |string_pair| @@ -90,18 +132,24 @@ return res.empty? ? nil : res end end # ZFind looks for the key in a preditermined order of importance: - # * i-vars are considered first becuase they might be tracking different - # locations for multiple tasks or something like that. - # * dotenv files are second because they were manually set, so for sure - # it's important - # * System Env[@] variables are up next. Hopefully by this time we've found - # our information but if not, it should "search" through the system env too. - # Parameters key <String>: The key to search for - # Returns <String> - # TODO: implement a search for all 3 that can find close matches + # * i-vars are considered first becuase they might be tracking different + # locations for multiple tasks or something like that. + # * dotenv files are second because they were manually set, so for sure + # it's important + # * System Env[@] variables are up next. Hopefully by this time we've found + # our information but if not, it should "search" through the system env too. + # + # Parameters + # * key +String+|+Symbol+ - the key to search for + # + # Returns + # +String+ + # + # Notes + # * TODO: implement a search for all 3 that can find close matches def zfind(key) project_root if @project_root.nil? res = (i_vars[to_snake(key).upcase] or env_vars[to_snake(key).upcase] unless @project_root.nil?) or system_vars[to_snake(key).upcase]