module Kojo::Refinements

Public Instance Methods

args_to_hash() click to toggle source

Convert an array of +[“key=value”, “key=value”]+ pairs to a hash

# File lib/kojo/refinements/array.rb, line 7
def args_to_hash
  collect { |a| a.split '=' }
    .to_h
    .symbolize_keys
    .typecast_values
end
erb(template, vars) click to toggle source
# File lib/kojo/refinements/string.rb, line 59
def erb(template, vars)
  ERB.new(template, nil, '-').result(OpenStruct.new(vars).instance_eval { binding })
end
eval_erb(args, filename) click to toggle source
# File lib/kojo/refinements/string.rb, line 41
def eval_erb(args, filename)
  erb self, args
rescue RuntimeError => e
  raise Kojo::TemplateError, "Invalid Ruby code #{e.message}\nin: #{filename}"
rescue SyntaxError => e
  raise Kojo::TemplateError, "#{e.message}\nin: #{filename}"
end
eval_vars(args, filename) click to toggle source
# File lib/kojo/refinements/string.rb, line 35
def eval_vars(args, filename)
  resolve args.symbolize_keys
rescue ArgumentError => e
  raise Kojo::TemplateError, "#{e.message}\nin: #{filename}"
end
get_user_input() click to toggle source
# File lib/kojo/refinements/string.rb, line 51
def get_user_input
  response = $stdin.gets
  raise Kojo::Interrupt unless response # Ctrl+D
  response.chomp
rescue ::Interrupt # Ctrl+C
  raise Kojo::Interrupt
end
resolve(vars) click to toggle source
# File lib/kojo/refinements/string.rb, line 24
def resolve(vars)
  self % vars.symbolize_keys

rescue KeyError => e
  raise unless Kojo.interactive?

  print "> #{e.key}: "
  vars[e.key] = get_user_input
  retry
end
symbolize_keys() click to toggle source
# File lib/kojo/refinements/hash.rb, line 6
def symbolize_keys
  transform_keys &:to_sym
end
to_typed() click to toggle source

Convert a string to the most appropriate type

# File lib/kojo/refinements/string.rb, line 8
def to_typed
  if self =~ /\A[+-]?\d+\Z/
    self.to_i

  elsif self =~ /\A[+-]?\d+\.\d+\Z/
    self.to_f

  elsif %w[yes no true false].include? downcase
    %w[yes true].include? downcase

  else
    self

  end
end
typecast_values() click to toggle source
# File lib/kojo/refinements/hash.rb, line 10
def typecast_values
  transform_values &:to_typed
end