Class: BinData::SanitizedParameters

Inherits:
Hash
  • Object
show all
Defined in:
lib/bindata/sanitize.rb

Overview

BinData objects are instantiated with parameters to determine their behaviour. These parameters must be sanitized to ensure their values are valid. When instantiating many objects with identical parameters, such as an array of records, there is much duplicated sanitizing.

The purpose of the sanitizing code is to eliminate the duplicated validation.

SanitizedParameters is a hash-like collection of parameters. Its purpose is to recursively sanitize the parameters of an entire BinData object chain at a single time.

Constant Summary collapse

BIG_ENDIAN =

Memoized constants

SanitizedBigEndian.new
LITTLE_ENDIAN =
SanitizedLittleEndian.new

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parameters, the_class, endian) ⇒ SanitizedParameters

Returns a new instance of SanitizedParameters.



176
177
178
179
180
181
182
183
# File 'lib/bindata/sanitize.rb', line 176

def initialize(parameters, the_class, endian)
  parameters.each_pair { |key, value| self[key.to_sym] = value }

  @the_class = the_class
  @endian    = endian

  sanitize!
end

Instance Attribute Details

#endianObject



209
210
211
# File 'lib/bindata/sanitize.rb', line 209

def endian
  @endian || self[:endian]
end

Class Method Details

.sanitize(parameters, the_class) ⇒ Object



167
168
169
170
171
172
173
# File 'lib/bindata/sanitize.rb', line 167

def sanitize(parameters, the_class)
  if SanitizedParameters === parameters
    parameters
  else
    SanitizedParameters.new(parameters, the_class, nil)
  end
end

Instance Method Details

#create_sanitized_choices(choices) ⇒ Object



228
229
230
# File 'lib/bindata/sanitize.rb', line 228

def create_sanitized_choices(choices)
  SanitizedChoices.new(choices, self.endian)
end

#create_sanitized_endian(endian) ⇒ Object



214
215
216
217
218
219
220
221
222
# File 'lib/bindata/sanitize.rb', line 214

def create_sanitized_endian(endian)
  if endian == :big
    BIG_ENDIAN
  elsif endian == :little
    LITTLE_ENDIAN
  else
    raise ArgumentError, "unknown value for endian '#{endian}'"
  end
end

#create_sanitized_fieldsObject



232
233
234
# File 'lib/bindata/sanitize.rb', line 232

def create_sanitized_fields
  SanitizedFields.new(self.endian)
end

#create_sanitized_object_prototype(obj_type, obj_params) ⇒ Object



236
237
238
# File 'lib/bindata/sanitize.rb', line 236

def create_sanitized_object_prototype(obj_type, obj_params)
  SanitizedPrototype.new(obj_type, obj_params, self.endian)
end

#create_sanitized_params(params, the_class) ⇒ Object



224
225
226
# File 'lib/bindata/sanitize.rb', line 224

def create_sanitized_params(params, the_class)
  SanitizedParameters.new(params, the_class, self.endian)
end

#needs_sanitizing?(key) ⇒ Boolean

Returns:

  • (Boolean)


187
188
189
190
191
# File 'lib/bindata/sanitize.rb', line 187

def needs_sanitizing?(key)
  parameter = self[key]

  parameter and not parameter.is_a?(SanitizedParameter)
end

#warn_renamed_parameter(old_key, new_key) ⇒ Object



200
201
202
203
204
205
206
207
# File 'lib/bindata/sanitize.rb', line 200

def warn_renamed_parameter(old_key, new_key)
  val = delete(old_key)
  if val
    self[new_key] = val
    warn ":#{old_key} has been renamed to :#{new_key} in #{@the_class}.  " +
    "Using :#{old_key} is now deprecated and will be removed in the future"
  end
end

#warn_replacement_parameter(bad_key, suggested_key) ⇒ Object



193
194
195
196
197
198
# File 'lib/bindata/sanitize.rb', line 193

def warn_replacement_parameter(bad_key, suggested_key)
  if has_parameter?(bad_key)
    warn ":#{bad_key} is not used with #{@the_class}.  " +
    "You probably want to change this to :#{suggested_key}"
  end
end