sfn 3.0.8 → 3.0.10
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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +4 -0
 - data/lib/sfn/command_module/stack.rb +113 -61
 - data/lib/sfn/command_module/template.rb +1 -1
 - data/lib/sfn/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 1dbf7d97959e1120a0d7b1194371c15b7a483ebd
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: beaddca76c30c1d453449939de41693a6ec84554
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ab20f19b50ed8db52d845c51a2194720b875627225d2a44574124b8a06e5a87ebc55382520e4368e068776703d3649738f99e6bfc41b0f074735a5eb33152496
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5bce247327ec8b0cbd793c3b28a9b4a994dda012f9f5fb0031e48e17a1306826ff8678c90a7255ffada556c9d35af4677ce577c7fa9b3679b3fd08fff0ea529a
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    
| 
         @@ -99,16 +99,12 @@ module Sfn 
     | 
|
| 
       99 
99 
     | 
    
         
             
                      true
         
     | 
| 
       100 
100 
     | 
    
         
             
                    end
         
     | 
| 
       101 
101 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
                    #  
     | 
| 
      
 102 
     | 
    
         
            +
                    # Generate name prefix for config parameter based on location and
         
     | 
| 
      
 103 
     | 
    
         
            +
                    # extract template parameters
         
     | 
| 
       103 
104 
     | 
    
         
             
                    #
         
     | 
| 
       104 
     | 
    
         
            -
                    # @param sparkle [SparkleFormation, Hash]
         
     | 
| 
       105 
     | 
    
         
            -
                    # @ 
     | 
| 
       106 
     | 
    
         
            -
                     
     | 
| 
       107 
     | 
    
         
            -
                    # @option opts [Miasma::Models::Orchestration::Stack] :stack existing stack
         
     | 
| 
       108 
     | 
    
         
            -
                    # @return [Hash]
         
     | 
| 
       109 
     | 
    
         
            -
                    def populate_parameters!(sparkle, opts={})
         
     | 
| 
       110 
     | 
    
         
            -
                      current_parameters = opts.fetch(:current_parameters, {})
         
     | 
| 
       111 
     | 
    
         
            -
                      current_stack = opts[:stack]
         
     | 
| 
      
 105 
     | 
    
         
            +
                    # @param sparkle [SparkleFormation, Hash] template instance
         
     | 
| 
      
 106 
     | 
    
         
            +
                    # @return [Array<Array<String>, Smash>] prefix value, parameters
         
     | 
| 
      
 107 
     | 
    
         
            +
                    def prefix_parameters_setup(sparkle)
         
     | 
| 
       112 
108 
     | 
    
         
             
                      if(sparkle.is_a?(SparkleFormation))
         
     | 
| 
       113 
109 
     | 
    
         
             
                        parameter_prefix = sparkle.root? ? [] : (sparkle.root_path - [sparkle.root]).map do |s|
         
     | 
| 
       114 
110 
     | 
    
         
             
                          Bogo::Utility.camel(s.name)
         
     | 
| 
         @@ -121,80 +117,136 @@ module Sfn 
     | 
|
| 
       121 
117 
     | 
    
         
             
                          sparkle[loc_key]
         
     | 
| 
       122 
118 
     | 
    
         
             
                        end.compact.first || Smash.new
         
     | 
| 
       123 
119 
     | 
    
         
             
                      end
         
     | 
| 
       124 
     | 
    
         
            -
                       
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
      
 120 
     | 
    
         
            +
                      [parameter_prefix, stack_parameters]
         
     | 
| 
      
 121 
     | 
    
         
            +
                    end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                    # Format config defined parameters to ensure expected layout
         
     | 
| 
      
 124 
     | 
    
         
            +
                    def format_config_parameters!
         
     | 
| 
      
 125 
     | 
    
         
            +
                      if(config.get(:parameter).is_a?(Array))
         
     | 
| 
      
 126 
     | 
    
         
            +
                        config[:parameter] = Smash[
         
     | 
| 
      
 127 
     | 
    
         
            +
                          *config.get(:parameter).map(&:to_a).flatten
         
     | 
| 
      
 128 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 129 
     | 
    
         
            +
                      end
         
     | 
| 
      
 130 
     | 
    
         
            +
                      if(config.get(:parameters))
         
     | 
| 
      
 131 
     | 
    
         
            +
                        config.set(:parameters,
         
     | 
| 
      
 132 
     | 
    
         
            +
                          config.get(:parameters).merge(config.fetch(:parameter, Smash.new))
         
     | 
| 
      
 133 
     | 
    
         
            +
                        )
         
     | 
| 
      
 134 
     | 
    
         
            +
                      else
         
     | 
| 
      
 135 
     | 
    
         
            +
                        config.set(:parameters, config.fetch(:parameter, Smash.new))
         
     | 
| 
      
 136 
     | 
    
         
            +
                      end
         
     | 
| 
      
 137 
     | 
    
         
            +
                    end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                    # Determine correct configuration parameter key
         
     | 
| 
      
 140 
     | 
    
         
            +
                    #
         
     | 
| 
      
 141 
     | 
    
         
            +
                    # @param parameter_prefix [Array<String>] nesting prefix names
         
     | 
| 
      
 142 
     | 
    
         
            +
                    # @param parameter_name [String] parameter name
         
     | 
| 
      
 143 
     | 
    
         
            +
                    # @return [Array<String>] [expected_template_key, configuration_used_key]
         
     | 
| 
      
 144 
     | 
    
         
            +
                    def locate_config_parameter_key(parameter_prefix, parameter_name)
         
     | 
| 
      
 145 
     | 
    
         
            +
                      check_name = parameter_name.downcase.tr('-_', '')
         
     | 
| 
      
 146 
     | 
    
         
            +
                      check_prefix = parameter_prefix.map{|i| i.downcase.tr('-_', '') }
         
     | 
| 
      
 147 
     | 
    
         
            +
                      key_match = config[:parameters].keys.detect do |cp_key|
         
     | 
| 
      
 148 
     | 
    
         
            +
                        cp_key = cp_key.to_s.downcase.split('__').map{|i| i.tr('-_', '') }.join('__')
         
     | 
| 
      
 149 
     | 
    
         
            +
                        cp_key.start_with?(check_prefix.join('__')) &&
         
     | 
| 
      
 150 
     | 
    
         
            +
                          cp_key.split('__').last == check_name
         
     | 
| 
      
 151 
     | 
    
         
            +
                      end
         
     | 
| 
      
 152 
     | 
    
         
            +
                      actual_key = (parameter_prefix + [parameter_name]).compact.join('__')
         
     | 
| 
      
 153 
     | 
    
         
            +
                      if(key_match)
         
     | 
| 
      
 154 
     | 
    
         
            +
                        config[:parameters][actual_key] = config[:parameters].delete(key_match)
         
     | 
| 
      
 155 
     | 
    
         
            +
                      end
         
     | 
| 
      
 156 
     | 
    
         
            +
                      actual_key
         
     | 
| 
      
 157 
     | 
    
         
            +
                    end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
                    # Populate stack parameter value via user interaction
         
     | 
| 
      
 160 
     | 
    
         
            +
                    #
         
     | 
| 
      
 161 
     | 
    
         
            +
                    # @param sparkle [SparkleFormation, Hash] template
         
     | 
| 
      
 162 
     | 
    
         
            +
                    # @param ns_key [String] configuration parameter key name
         
     | 
| 
      
 163 
     | 
    
         
            +
                    # @param param_name [String] template parameter name
         
     | 
| 
      
 164 
     | 
    
         
            +
                    # @param param_value [Hash] template parameter value
         
     | 
| 
      
 165 
     | 
    
         
            +
                    # @param current_parameters [Hash] currently set stack parameters
         
     | 
| 
      
 166 
     | 
    
         
            +
                    # @param param_banner [TrueClass, FalseClass] parameter banner has been printed
         
     | 
| 
      
 167 
     | 
    
         
            +
                    # @return [TrueClass, FalseClass] parameter banner has been printed
         
     | 
| 
      
 168 
     | 
    
         
            +
                    def set_parameter(sparkle, ns_key, param_name, param_value, current_parameters, param_banner)
         
     | 
| 
      
 169 
     | 
    
         
            +
                      valid = false
         
     | 
| 
      
 170 
     | 
    
         
            +
                      attempt = 0
         
     | 
| 
      
 171 
     | 
    
         
            +
                      if(!valid && !param_banner)
         
     | 
| 
      
 172 
     | 
    
         
            +
                        if(sparkle.is_a?(SparkleFormation))
         
     | 
| 
      
 173 
     | 
    
         
            +
                          ui.info "#{ui.color('Stack runtime parameters:', :bold)} - template: #{ui.color(sparkle.root_path.map(&:name).map(&:to_s).join(' > '), :green, :bold)}"
         
     | 
| 
      
 174 
     | 
    
         
            +
                        else
         
     | 
| 
      
 175 
     | 
    
         
            +
                          ui.info ui.color('Stack runtime parameters:', :bold)
         
     | 
| 
       129 
176 
     | 
    
         
             
                        end
         
     | 
| 
       130 
     | 
    
         
            -
                         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
      
 177 
     | 
    
         
            +
                        param_banner = true
         
     | 
| 
      
 178 
     | 
    
         
            +
                      end
         
     | 
| 
      
 179 
     | 
    
         
            +
                      until(valid)
         
     | 
| 
      
 180 
     | 
    
         
            +
                        attempt += 1
         
     | 
| 
      
 181 
     | 
    
         
            +
                        default = config[:parameters].fetch(
         
     | 
| 
      
 182 
     | 
    
         
            +
                          ns_key, current_parameters.fetch(
         
     | 
| 
      
 183 
     | 
    
         
            +
                            param_name, TEMPLATE_PARAMETER_DEFAULTS.map{|loc_key| param_value[loc_key]}.compact.first
         
     | 
| 
       133 
184 
     | 
    
         
             
                          )
         
     | 
| 
      
 185 
     | 
    
         
            +
                        )
         
     | 
| 
      
 186 
     | 
    
         
            +
                        if(config[:interactive_parameters])
         
     | 
| 
      
 187 
     | 
    
         
            +
                          answer = ui.ask_question("#{param_name.split(/([A-Z]+[^A-Z]*)/).find_all{|s|!s.empty?}.join(' ')}", :default => default)
         
     | 
| 
      
 188 
     | 
    
         
            +
                        else
         
     | 
| 
      
 189 
     | 
    
         
            +
                          answer = default
         
     | 
| 
      
 190 
     | 
    
         
            +
                        end
         
     | 
| 
      
 191 
     | 
    
         
            +
                        validation = validate_parameter(answer, param_value)
         
     | 
| 
      
 192 
     | 
    
         
            +
                        if(validation == true)
         
     | 
| 
      
 193 
     | 
    
         
            +
                          config[:parameters][ns_key] = answer
         
     | 
| 
      
 194 
     | 
    
         
            +
                          valid = true
         
     | 
| 
       134 
195 
     | 
    
         
             
                        else
         
     | 
| 
       135 
     | 
    
         
            -
                           
     | 
| 
      
 196 
     | 
    
         
            +
                          validation.each do |validation_error|
         
     | 
| 
      
 197 
     | 
    
         
            +
                            ui.error validation_error.last
         
     | 
| 
      
 198 
     | 
    
         
            +
                          end
         
     | 
| 
       136 
199 
     | 
    
         
             
                        end
         
     | 
| 
      
 200 
     | 
    
         
            +
                        if(attempt > MAX_PARAMETER_ATTEMPTS)
         
     | 
| 
      
 201 
     | 
    
         
            +
                          ui.fatal 'Failed to receive allowed parameter!'
         
     | 
| 
      
 202 
     | 
    
         
            +
                          exit 1
         
     | 
| 
      
 203 
     | 
    
         
            +
                        end
         
     | 
| 
      
 204 
     | 
    
         
            +
                      end
         
     | 
| 
      
 205 
     | 
    
         
            +
                      param_banner
         
     | 
| 
      
 206 
     | 
    
         
            +
                    end
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                    # Prompt for parameter values and store result
         
     | 
| 
      
 209 
     | 
    
         
            +
                    #
         
     | 
| 
      
 210 
     | 
    
         
            +
                    # @param sparkle [SparkleFormation, Hash]
         
     | 
| 
      
 211 
     | 
    
         
            +
                    # @param opts [Hash]
         
     | 
| 
      
 212 
     | 
    
         
            +
                    # @option opts [Hash] :current_parameters current stack parameter values
         
     | 
| 
      
 213 
     | 
    
         
            +
                    # @option opts [Miasma::Models::Orchestration::Stack] :stack existing stack
         
     | 
| 
      
 214 
     | 
    
         
            +
                    # @return [Hash]
         
     | 
| 
      
 215 
     | 
    
         
            +
                    def populate_parameters!(sparkle, opts={})
         
     | 
| 
      
 216 
     | 
    
         
            +
                      current_parameters = opts.fetch(:current_parameters, {})
         
     | 
| 
      
 217 
     | 
    
         
            +
                      current_stack = opts[:stack]
         
     | 
| 
      
 218 
     | 
    
         
            +
                      parameter_prefix, stack_parameters = prefix_parameters_setup(sparkle)
         
     | 
| 
      
 219 
     | 
    
         
            +
                      unless(stack_parameters.empty?)
         
     | 
| 
      
 220 
     | 
    
         
            +
                        format_config_parameters!
         
     | 
| 
       137 
221 
     | 
    
         
             
                        param_banner = false
         
     | 
| 
       138 
     | 
    
         
            -
                        stack_parameters.each do | 
     | 
| 
       139 
     | 
    
         
            -
                           
     | 
| 
       140 
     | 
    
         
            -
                          next if config[:parameters][ns_k]
         
     | 
| 
       141 
     | 
    
         
            -
                          valid = false
         
     | 
| 
      
 222 
     | 
    
         
            +
                        stack_parameters.each do |param_name, param_value|
         
     | 
| 
      
 223 
     | 
    
         
            +
                          ns_key = locate_config_parameter_key(parameter_prefix, param_name)
         
     | 
| 
       142 
224 
     | 
    
         
             
                          # When parameter is a hash type, it is being set via
         
     | 
| 
       143 
225 
     | 
    
         
             
                          # intrinsic function and we don't modify
         
     | 
| 
       144 
     | 
    
         
            -
                          if(function_set_parameter?(current_parameters[ 
     | 
| 
      
 226 
     | 
    
         
            +
                          if(function_set_parameter?(current_parameters[param_name]))
         
     | 
| 
       145 
227 
     | 
    
         
             
                            if(current_stack)
         
     | 
| 
       146 
     | 
    
         
            -
                              enable_set = validate_stack_parameter(current_stack,  
     | 
| 
      
 228 
     | 
    
         
            +
                              enable_set = validate_stack_parameter(current_stack, param_name, ns_key, current_parameters[param_name])
         
     | 
| 
       147 
229 
     | 
    
         
             
                            else
         
     | 
| 
       148 
230 
     | 
    
         
             
                              enable_set = true
         
     | 
| 
       149 
231 
     | 
    
         
             
                            end
         
     | 
| 
       150 
232 
     | 
    
         
             
                            if(enable_set)
         
     | 
| 
       151 
233 
     | 
    
         
             
                              # NOTE: direct set dumps the stack (nfi). Smash will
         
     | 
| 
       152 
234 
     | 
    
         
             
                              # auto dup it, and works, so yay i guess.
         
     | 
| 
       153 
     | 
    
         
            -
                              config[:parameters][ 
     | 
| 
      
 235 
     | 
    
         
            +
                              config[:parameters][ns_key] = current_parameters[param_name].is_a?(Hash) ?
         
     | 
| 
      
 236 
     | 
    
         
            +
                                Smash.new(current_parameters[param_name]) :
         
     | 
| 
      
 237 
     | 
    
         
            +
                                current_parameters[param_name].dup
         
     | 
| 
       154 
238 
     | 
    
         
             
                              valid = true
         
     | 
| 
       155 
239 
     | 
    
         
             
                            end
         
     | 
| 
       156 
240 
     | 
    
         
             
                          else
         
     | 
| 
       157 
241 
     | 
    
         
             
                            if(current_stack && current_stack.data[:parent_stack])
         
     | 
| 
       158 
     | 
    
         
            -
                              use_expected = validate_stack_parameter(current_stack,  
     | 
| 
      
 242 
     | 
    
         
            +
                              use_expected = validate_stack_parameter(current_stack, param_name, ns_key, current_parameters[param_name])
         
     | 
| 
       159 
243 
     | 
    
         
             
                              unless(use_expected)
         
     | 
| 
       160 
     | 
    
         
            -
                                current_parameters[ 
     | 
| 
      
 244 
     | 
    
         
            +
                                current_parameters[param_name] = current_stack.parameters[param_name]
         
     | 
| 
       161 
245 
     | 
    
         
             
                              end
         
     | 
| 
       162 
246 
     | 
    
         
             
                            end
         
     | 
| 
       163 
247 
     | 
    
         
             
                          end
         
     | 
| 
       164 
     | 
    
         
            -
                           
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
                            if(sparkle.is_a?(SparkleFormation))
         
     | 
| 
       167 
     | 
    
         
            -
                              ui.info "#{ui.color('Stack runtime parameters:', :bold)} - template: #{ui.color(sparkle.root_path.map(&:name).map(&:to_s).join(' > '), :green, :bold)}"
         
     | 
| 
       168 
     | 
    
         
            -
                            else
         
     | 
| 
       169 
     | 
    
         
            -
                              ui.info ui.color('Stack runtime parameters:', :bold)
         
     | 
| 
       170 
     | 
    
         
            -
                            end
         
     | 
| 
       171 
     | 
    
         
            -
                            param_banner = true
         
     | 
| 
       172 
     | 
    
         
            -
                          end
         
     | 
| 
       173 
     | 
    
         
            -
                          until(valid)
         
     | 
| 
       174 
     | 
    
         
            -
                            attempt += 1
         
     | 
| 
       175 
     | 
    
         
            -
                            default = config[:parameters].fetch(
         
     | 
| 
       176 
     | 
    
         
            -
                              ns_k, current_parameters.fetch(
         
     | 
| 
       177 
     | 
    
         
            -
                                k, TEMPLATE_PARAMETER_DEFAULTS.map{|loc_key| v[loc_key]}.compact.first
         
     | 
| 
       178 
     | 
    
         
            -
                              )
         
     | 
| 
       179 
     | 
    
         
            -
                            )
         
     | 
| 
       180 
     | 
    
         
            -
                            if(config[:interactive_parameters])
         
     | 
| 
       181 
     | 
    
         
            -
                              answer = ui.ask_question("#{k.split(/([A-Z]+[^A-Z]*)/).find_all{|s|!s.empty?}.join(' ')}", :default => default)
         
     | 
| 
       182 
     | 
    
         
            -
                            else
         
     | 
| 
       183 
     | 
    
         
            -
                              answer = default
         
     | 
| 
       184 
     | 
    
         
            -
                            end
         
     | 
| 
       185 
     | 
    
         
            -
                            validation = validate_parameter(answer, v)
         
     | 
| 
       186 
     | 
    
         
            -
                            if(validation == true)
         
     | 
| 
       187 
     | 
    
         
            -
                              config[:parameters][ns_k] = answer
         
     | 
| 
       188 
     | 
    
         
            -
                              valid = true
         
     | 
| 
       189 
     | 
    
         
            -
                            else
         
     | 
| 
       190 
     | 
    
         
            -
                              validation.each do |validation_error|
         
     | 
| 
       191 
     | 
    
         
            -
                                ui.error validation_error.last
         
     | 
| 
       192 
     | 
    
         
            -
                              end
         
     | 
| 
       193 
     | 
    
         
            -
                            end
         
     | 
| 
       194 
     | 
    
         
            -
                            if(attempt > MAX_PARAMETER_ATTEMPTS)
         
     | 
| 
       195 
     | 
    
         
            -
                              ui.fatal 'Failed to receive allowed parameter!'
         
     | 
| 
       196 
     | 
    
         
            -
                              exit 1
         
     | 
| 
       197 
     | 
    
         
            -
                            end
         
     | 
| 
      
 248 
     | 
    
         
            +
                          unless(valid)
         
     | 
| 
      
 249 
     | 
    
         
            +
                            param_banner = set_parameter(sparkle, ns_key, param_name, param_value, current_parameters, param_banner)
         
     | 
| 
       198 
250 
     | 
    
         
             
                          end
         
     | 
| 
       199 
251 
     | 
    
         
             
                        end
         
     | 
| 
       200 
252 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -490,7 +490,7 @@ module Sfn 
     | 
|
| 
       490 
490 
     | 
    
         
             
                          c_name.split('_').map(&:capitalize).join(' ')
         
     | 
| 
       491 
491 
     | 
    
         
             
                        end.join(' / ')
         
     | 
| 
       492 
492 
     | 
    
         
             
                        ui.info "Viewing collection: #{ui.color(collection_name, :bold)}"
         
     | 
| 
       493 
     | 
    
         
            -
                        template_names = sparkle_collection.templates.keys.find_all do |t_name|
         
     | 
| 
      
 493 
     | 
    
         
            +
                        template_names = sparkle_collection.templates.fetch(provider.connection.provider, {}).keys.find_all do |t_name|
         
     | 
| 
       494 
494 
     | 
    
         
             
                          t_name.to_s.start_with?(prefix.to_s)
         
     | 
| 
       495 
495 
     | 
    
         
             
                        end
         
     | 
| 
       496 
496 
     | 
    
         
             
                      else
         
     | 
    
        data/lib/sfn/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sfn
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 3.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 3.0.10
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Chris Roberts
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-05-19 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bogo-cli
         
     |