class BinData::DSLMixin::DSLFieldValidator
Validates a field defined in a DSLMixin.
def all_or_none_names_failed?(name)
def all_or_none_names_failed?(name) if option?(:all_or_none_fieldnames) && !fields.empty? all_names_blank = fields.all_field_names_blank? no_names_blank = fields.no_field_names_blank? (!name.nil? && all_names_blank) || (name.nil? && no_names_blank) else false end end
def duplicate_name?(name)
def duplicate_name?(name) fields.field_name?(name) end
def ensure_valid_name(name)
def ensure_valid_name(name) if name && !option?(:fieldnames_are_values) if malformed_name?(name) raise NameError.new("", name), "field '#{name}' is an illegal fieldname" end if duplicate_name?(name) raise SyntaxError, "duplicate field '#{name}'" end if name_shadows_method?(name) raise NameError.new("", name), "field '#{name}' shadows an existing method" end if name_is_reserved?(name) raise NameError.new("", name), "field '#{name}' is a reserved name" end end end
def fields
def fields @dsl_parser.fields end
def initialize(the_class, parser)
def initialize(the_class, parser) @the_class = the_class @dsl_parser = parser end
def malformed_name?(name)
def malformed_name?(name) /^[a-z_]\w*$/ !~ name.to_s end
def must_have_a_name_failed?(name)
def must_have_a_name_failed?(name) option?(:mandatory_fieldnames) && name.nil? end
def must_not_have_a_name_failed?(name)
def must_not_have_a_name_failed?(name) option?(:no_fieldnames) && !name.nil? end
def name_is_reserved?(name)
def name_is_reserved?(name) BinData::Struct::RESERVED.include?(name.to_sym) end
def name_shadows_method?(name)
def name_shadows_method?(name) @the_class.method_defined?(name) end
def option?(opt)
def option?(opt) @dsl_parser.send(:option?, opt) end
def validate_field(name)
def validate_field(name) if must_not_have_a_name_failed?(name) raise SyntaxError, "field must not have a name" end if all_or_none_names_failed?(name) raise SyntaxError, "fields must either all have names, or none must have names" end if must_have_a_name_failed?(name) raise SyntaxError, "field must have a name" end ensure_valid_name(name) end