module BinData::MultiFieldArgSeparator
Extracts args for Records and Buffers.
Foo.new(:bar => “baz) is ambiguous as to whether :bar is a value or parameter.
BaseArgExtractor always assumes :bar is parameter. This extractor correctly identifies it as value or parameter.
Public Instance Methods
field_names_in_parameters?(obj_class, parameters)
click to toggle source
# File lib/bindata/dsl.rb, line 28 def field_names_in_parameters?(obj_class, parameters) field_names = obj_class.fields.field_names param_keys = parameters.keys (field_names & param_keys).length > 0 end
parameters_is_value?(obj_class, value, parameters)
click to toggle source
# File lib/bindata/dsl.rb, line 20 def parameters_is_value?(obj_class, value, parameters) if value.nil? and parameters.length > 0 field_names_in_parameters?(obj_class, parameters) else false end end
separate_args(obj_class, obj_args)
click to toggle source
Calls superclass method
# File lib/bindata/dsl.rb, line 9 def separate_args(obj_class, obj_args) value, parameters, parent = super(obj_class, obj_args) if parameters_is_value?(obj_class, value, parameters) value = parameters parameters = {} end [value, parameters, parent] end