class BinData::StructArgProcessor
def ensure_field_names_are_valid(obj_class, field_names)
def ensure_field_names_are_valid(obj_class, field_names) reserved_names = BinData::Struct::RESERVED field_names.each do |name| if obj_class.method_defined?(name) raise NameError.new("Rename field '#{name}' in #{obj_class}, " + "as it shadows an existing method.", name) end if reserved_names.include?(name) raise NameError.new("Rename field '#{name}' in #{obj_class}, " + "as it is a reserved name.", name) end if field_names.count(name) != 1 raise NameError.new("field '#{name}' in #{obj_class}, " + "is defined multiple times.", name) end end end
def hidden_field_names(hidden)
def hidden_field_names(hidden) (hidden || []).collect { |h| h.to_sym } end
def sanitize_endian(params)
def sanitize_endian(params) if params.needs_sanitizing?(:endian) endian = params.create_sanitized_endian(params[:endian]) params[:endian] = endian end end
def sanitize_fields(obj_class, params)
def sanitize_fields(obj_class, params) if params.needs_sanitizing?(:fields) fields = params[:fields] params[:fields] = params.create_sanitized_fields fields.each do |ftype, fname, fparams| params[:fields].add_field(ftype, fname, fparams) end field_names = sanitized_field_names(params[:fields]) ensure_field_names_are_valid(obj_class, field_names) end end
def sanitize_hide(params)
def sanitize_hide(params) if params.needs_sanitizing?(:hide) and params.has_parameter?(:fields) field_names = sanitized_field_names(params[:fields]) hfield_names = hidden_field_names(params[:hide]) params[:hide] = (hfield_names & field_names) end end
def sanitize_parameters!(obj_class, params)
def sanitize_parameters!(obj_class, params) sanitize_endian(params) sanitize_search_prefix(params) sanitize_fields(obj_class, params) sanitize_hide(params) end
def sanitize_search_prefix(params)
def sanitize_search_prefix(params) if params.needs_sanitizing?(:search_prefix) search_prefix = [] Array(params[:search_prefix]).each do |prefix| prefix = prefix.to_s.chomp("_") search_prefix << prefix if prefix != "" end params[:search_prefix] = search_prefix end end
def sanitized_field_names(sanitized_fields)
def sanitized_field_names(sanitized_fields) sanitized_fields.field_names.compact end