lib/bindata/record.rb in bindata-1.6.0 vs lib/bindata/record.rb in bindata-1.8.0
- old
+ new
@@ -1,46 +1,10 @@
require 'bindata/dsl'
require 'bindata/sanitize'
require 'bindata/struct'
module BinData
- # Extracts args for Records.
- #
- # Foo.new(:bar => "baz) is ambiguous as to whether :bar is a value or parameter.
- #
- # BaseArgExtractor always assumes :bar is parameter. This extractor correctly
- # identifies it as value or parameter.
- class RecordArgExtractor
- class << self
- def extract(the_class, the_args)
- value, parameters, parent = BaseArgExtractor.extract(the_class, the_args)
-
- if parameters_is_value?(the_class, value, parameters)
- value = parameters
- parameters = {}
- end
-
- [value, parameters, parent]
- end
-
- def parameters_is_value?(the_class, value, parameters)
- if value.nil? and parameters.length > 0
- field_names_in_parameters?(the_class, parameters)
- else
- false
- end
- end
-
- def field_names_in_parameters?(the_class, parameters)
- field_names = the_class.fields.field_names
- param_keys = parameters.keys
-
- (field_names & param_keys).length > 0
- end
- end
- end
-
# A Record is a declarative wrapper around Struct.
#
# require 'bindata'
#
# class SomeDataType < BinData::Record
@@ -66,10 +30,10 @@
dsl_parser :struct
class << self
def arg_extractor
- RecordArgExtractor
+ MultiFieldArgExtractor
end
def sanitize_parameters!(params) #:nodoc:
params.merge!(dsl_params)