Module: ChefApply::CLI::Validation
- Included in:
- ChefApply::CLI
- Defined in:
- lib/chef_apply/cli/validation.rb
Constant Summary collapse
- PROPERTY_MATCHER =
- /^([a-zA-Z0-9_]+)=(.+)$/.freeze 
- CB_MATCHER =
- '[\w\-]+'.freeze 
Instance Method Summary collapse
- 
  
    
      #properties_from_string(string_props)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Convert properties in the form k1=v1,k2=v2,kn=vn into a hash, while validating correct form and format. 
- 
  
    
      #transform_property_value(value)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Incoming properties are always read as a string from the command line. 
- 
  
    
      #validate_params(params)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    The first param is always hostname. 
Instance Method Details
#properties_from_string(string_props) ⇒ Object
Convert properties in the form k1=v1,k2=v2,kn=vn into a hash, while validating correct form and format
| 56 57 58 59 60 61 62 63 64 | # File 'lib/chef_apply/cli/validation.rb', line 56 def properties_from_string(string_props) properties = {} string_props.each do |a| key, value = PROPERTY_MATCHER.match(a)[1..-1] value = transform_property_value(value) properties[key] = value end properties end | 
#transform_property_value(value) ⇒ Object
Incoming properties are always read as a string from the command line. Depending on their type we should transform them so we do not try and pass a string to a resource property that expects an integer or boolean.
| 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | # File 'lib/chef_apply/cli/validation.rb', line 69 def transform_property_value(value) case value when /^0/ # when it is a zero leading value like "0777" don't turn # it into a number (this is a mode flag) value when /^\d+$/ value.to_i when /^\d+\.\d*$/, /^\d*\.\d+$/ value.to_f when /^[:].+$/ value.split(":").last.to_sym when /true/i true when /false/i false else value end end | 
#validate_params(params) ⇒ Object
The first param is always hostname. Then we either have
- 
A recipe designation 
- 
A resource type and resource name followed by any properties 
| 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | # File 'lib/chef_apply/cli/validation.rb', line 29 def validate_params(params) if params.size < 2 raise OptionValidationError.new("CHEFVAL002", self) end if params.size == 2 # Trying to specify a recipe to run remotely, no properties cb = params[1] if File.exist?(cb) # This is a path specification, and we know it is valid elsif cb =~ /^#{CB_MATCHER}$/ || cb =~ /^#{CB_MATCHER}::#{CB_MATCHER}$/ # They are specifying a cookbook as 'cb_name' or 'cb_name::recipe' else raise OptionValidationError.new("CHEFVAL004", self, cb) end elsif params.size >= 3 properties = params[3..-1] properties.each do |property| unless property =~ PROPERTY_MATCHER raise OptionValidationError.new("CHEFVAL003", self, property) end end end end |