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.



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

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



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

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

Class Method Details

.sanitize(parameters, the_class) ⇒ Object



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

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



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

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

#create_sanitized_endian(endian) ⇒ Object



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

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



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

def create_sanitized_fields
  SanitizedFields.new(self.endian)
end

#create_sanitized_object_prototype(obj_type, obj_params) ⇒ Object



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

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



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

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

#needs_sanitizing?(key) ⇒ Boolean

Returns:

  • (Boolean)


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

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

  parameter and not parameter.is_a?(SanitizedParameter)
end

#warn_renamed_parameter(old_key, new_key) ⇒ Object



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

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



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

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