class BinData::DSLMixin::DSLFieldParser
Extracts the details from a field declaration.
Attributes
name[R]
params[R]
type[R]
Public Class Methods
new(hints, symbol, *args, &block)
click to toggle source
# File lib/bindata/dsl.rb, line 348 def initialize(hints, symbol, *args, &block) @hints = hints @type = symbol @name = name_from_field_declaration(args) @params = params_from_field_declaration(args, &block) end
Public Instance Methods
name_from_field_declaration(args)
click to toggle source
# File lib/bindata/dsl.rb, line 357 def name_from_field_declaration(args) name, _ = args if name == "" or name.is_a?(Hash) nil else name end end
params_from_args(args)
click to toggle source
# File lib/bindata/dsl.rb, line 376 def params_from_args(args) name, params = args params = name if name.is_a?(Hash) params || {} end
params_from_block(&block)
click to toggle source
# File lib/bindata/dsl.rb, line 383 def params_from_block(&block) bindata_classes = { :array => BinData::Array, :buffer => BinData::Buffer, :choice => BinData::Choice, :delayed_io => BinData::DelayedIO, :struct => BinData::Struct } if bindata_classes.include?(@type) parser = DSLParser.new(bindata_classes[@type], @type) parser.endian(@hints[:endian]) parser.search_prefix(*@hints[:search_prefix]) parser.instance_eval(&block) parser.dsl_params else {} end end
params_from_field_declaration(args, &block)
click to toggle source
# File lib/bindata/dsl.rb, line 366 def params_from_field_declaration(args, &block) params = params_from_args(args) if block_given? params.merge(params_from_block(&block)) else params end end