lib/bindata/base.rb in bindata-1.3.1 vs lib/bindata/base.rb in bindata-1.4.0
- old
+ new
@@ -7,13 +7,15 @@
module BinData
# Error raised when unexpected results occur when reading data from IO.
class ValidityError < StandardError ; end
- # ArgExtractors take the arguments to BinData::Base.new and
- # separate them into [value, parameters, parent].
+ # ArgExtractors take the arguments passed to BinData::Base.new and
+ # separates them into [value, parameters, parent].
class BaseArgExtractor
+ @@empty_hash = Hash.new.freeze
+
def self.extract(the_class, the_args)
args = the_args.dup
value = parameters = parent = nil
if args.length > 1 and args.last.is_a? BinData::Base
@@ -26,11 +28,11 @@
if args.length > 0
value = args.pop
end
- parameters ||= {}
+ parameters ||= @@empty_hash
return [value, parameters, parent]
end
end
@@ -57,31 +59,31 @@
# The name of this class as used by Records, Arrays etc.
def bindata_name
RegisteredClasses.underscore_name(self.name)
end
- # Registers this class for use.
- def register_self
- register_class(self)
+ # Call this method if this class is abstract and not to be used.
+ def unregister_self
+ RegisteredClasses.unregister(name)
end
# Registers all subclasses of this class for use
- def register_subclasses
+ def register_subclasses #:nodoc:
class << self
define_method(:inherited) do |subclass|
- register_class(subclass)
+ RegisteredClasses.register(subclass.name, subclass)
+ register_subclasses
end
end
end
- def register_class(class_to_register) #:nodoc:
- RegisteredClasses.register(class_to_register.name, class_to_register)
- end
-
- private :register_self, :register_subclasses, :register_class
+ private :unregister_self, :register_subclasses
end
+ # Register all subclasses of this class.
+ register_subclasses
+
# Creates a new data object.
#
# Args are optional, but if present, must be in the following order.
#
# +value+ is a value that is +assign+ed immediately after initialization.
@@ -91,15 +93,16 @@
#
# +parent+ is the parent data object (e.g. struct, array, choice) this
# object resides under.
def initialize(*args)
value, parameters, parent = extract_args(args)
- @params = Sanitizer.sanitize(parameters, self.class)
+ @params = SanitizedParameters.sanitize(parameters, self.class)
+ @parent = parent
+
add_methods_for_check_or_adjust_offset
- @parent = parent if parent
initialize_shared_instance
initialize_instance
assign(value) if value
end
@@ -123,11 +126,11 @@
#
# +overrides+ is an optional +parameters+ like hash that allow the
# parameters given at object construction to be overridden.
#
# Returns nil if +key+ does not refer to any parameter.
- def eval_parameter(key, overrides = {})
+ def eval_parameter(key, overrides = nil)
LazyEvaluator.eval(self, get_parameter(key), overrides)
end
# Returns the parameter referenced by +key+.
# Use this method if you are sure the parameter is not to be evaluated.
@@ -253,10 +256,10 @@
###########################################################################
# To be implemented by subclasses
# Performs sanity checks on the given parameters. This method converts
# the parameters to the form expected by this data object.
- def self.sanitize_parameters!(parameters, sanitizer) #:nodoc:
+ def self.sanitize_parameters!(parameters) #:nodoc:
end
# Initializes the state of the object. All instance variables that
# are used by the object must be initialized here.
def initialize_instance