class Jisota::ParamParser
Attributes
args[R]
params[R]
Public Class Methods
new(params, args)
click to toggle source
# File lib/jisota/param_parser.rb, line 5 def initialize(params, args) @params = params @args = args end
Public Instance Methods
parse()
click to toggle source
# File lib/jisota/param_parser.rb, line 10 def parse params_work_list = params.dup Hash.new.tap do |result| init_splat_params(result) add_unnamed_args(result, params_work_list) add_named_args(result) handle_remaining_params(result, params_work_list) end end
Private Instance Methods
add_named_args(result)
click to toggle source
# File lib/jisota/param_parser.rb, line 41 def add_named_args(result) named_args.each do |key, value| param = params.select { |p| p.name == key }.first raise ParameterError, "No parameter with name #{key.inspect}" unless param if result.has_key?(key) if param.splat? raise ParameterError, "Splat parameter #{key.inspect} only accepts unnamed arguments" else raise ParameterError, "Parameter #{key.inspect} already set with an unnamed argument" end end result[key] = value end end
add_unnamed_args(result, params_work_list)
click to toggle source
# File lib/jisota/param_parser.rb, line 28 def add_unnamed_args(result, params_work_list) param = nil unnamed_args.each do |arg| param = params_work_list.shift unless param && param.splat? raise ParameterError, "No parameter for unnamed argument #{arg}" unless param if param.splat? result[param.name] << arg else result[param.name] = arg end end end
handle_remaining_params(result, params_work_list)
click to toggle source
# File lib/jisota/param_parser.rb, line 70 def handle_remaining_params(result, params_work_list) params_work_list.each do |param| unless result.has_key?(param.name) if param.required? && !param.default? raise ParameterError, "Parameter #{param.name.inspect} is required" end result[param.name] = param.default? ? param.default : nil end end end
init_splat_params(result)
click to toggle source
# File lib/jisota/param_parser.rb, line 22 def init_splat_params(result) params.select(&:splat?).each do |param| result[param.name] = [] end end
named_args()
click to toggle source
# File lib/jisota/param_parser.rb, line 62 def named_args named_args? ? args.last : {} end
named_args?()
click to toggle source
# File lib/jisota/param_parser.rb, line 66 def named_args? args.last.is_a?(Hash) end
unnamed_args()
click to toggle source
# File lib/jisota/param_parser.rb, line 56 def unnamed_args args.dup.tap do |result| result.pop if named_args? end end