class BinData::StructArgProcessor

Public Instance Methods

sanitize_parameters!(obj_class, params) click to toggle source
# File lib/bindata/struct.rb, line 337
def sanitize_parameters!(obj_class, params)
  sanitize_endian(params)
  sanitize_search_prefix(params)
  sanitize_fields(obj_class, params)
  sanitize_hide(params)
end

Private Instance Methods

ensure_field_names_are_valid(obj_class, field_names) click to toggle source
# File lib/bindata/struct.rb, line 397
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
hidden_field_names(hidden) click to toggle source
# File lib/bindata/struct.rb, line 393
def hidden_field_names(hidden)
  (hidden || []).collect { |h| h.to_sym }
end
sanitize_endian(params) click to toggle source
# File lib/bindata/struct.rb, line 347
def sanitize_endian(params)
  if params.needs_sanitizing?(:endian)
    endian = params.create_sanitized_endian(params[:endian])
    params[:endian] = endian
  end
end
sanitize_fields(obj_class, params) click to toggle source
# File lib/bindata/struct.rb, line 366
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
sanitize_hide(params) click to toggle source
# File lib/bindata/struct.rb, line 380
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
sanitize_search_prefix(params) click to toggle source
# File lib/bindata/struct.rb, line 354
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
sanitized_field_names(sanitized_fields) click to toggle source
# File lib/bindata/struct.rb, line 389
def sanitized_field_names(sanitized_fields)
  sanitized_fields.field_names.compact
end