Class: BinData::DSLMixin::DSLFieldValidator
- Inherits:
-
Object
- Object
- BinData::DSLMixin::DSLFieldValidator
- Defined in:
- lib/bindata/dsl.rb
Overview
Validates a field defined in a DSLMixin.
Instance Method Summary collapse
- #all_or_none_names_failed?(name) ⇒ Boolean
- #duplicate_name?(name) ⇒ Boolean
- #ensure_valid_name(name) ⇒ Object
- #fields ⇒ Object
-
#initialize(the_class, parser) ⇒ DSLFieldValidator
constructor
A new instance of DSLFieldValidator.
- #malformed_name?(name) ⇒ Boolean
- #must_have_a_name_failed?(name) ⇒ Boolean
- #must_not_have_a_name_failed?(name) ⇒ Boolean
- #name_is_reserved?(name) ⇒ Boolean
- #name_shadows_method?(name) ⇒ Boolean
- #option?(opt) ⇒ Boolean
- #validate_field(name) ⇒ Object
Constructor Details
#initialize(the_class, parser) ⇒ DSLFieldValidator
Returns a new instance of DSLFieldValidator.
407 408 409 410 |
# File 'lib/bindata/dsl.rb', line 407 def initialize(the_class, parser) @the_class = the_class @dsl_parser = parser end |
Instance Method Details
#all_or_none_names_failed?(name) ⇒ Boolean
456 457 458 459 460 461 462 463 464 465 |
# File 'lib/bindata/dsl.rb', line 456 def all_or_none_names_failed?(name) if option?(:all_or_none_fieldnames) and not fields.empty? all_names_blank = fields.all_field_names_blank? no_names_blank = fields.no_field_names_blank? (name != nil and all_names_blank) or (name == nil and no_names_blank) else false end end |
#duplicate_name?(name) ⇒ Boolean
471 472 473 |
# File 'lib/bindata/dsl.rb', line 471 def duplicate_name?(name) fields.has_field_name?(name) end |
#ensure_valid_name(name) ⇒ Object
428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 |
# File 'lib/bindata/dsl.rb', line 428 def ensure_valid_name(name) if name and not 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 |
#fields ⇒ Object
483 484 485 |
# File 'lib/bindata/dsl.rb', line 483 def fields @dsl_parser.fields end |
#malformed_name?(name) ⇒ Boolean
467 468 469 |
# File 'lib/bindata/dsl.rb', line 467 def malformed_name?(name) /^[a-z_]\w*$/ !~ name.to_s end |
#must_have_a_name_failed?(name) ⇒ Boolean
452 453 454 |
# File 'lib/bindata/dsl.rb', line 452 def must_have_a_name_failed?(name) option?(:mandatory_fieldnames) and name.nil? end |
#must_not_have_a_name_failed?(name) ⇒ Boolean
448 449 450 |
# File 'lib/bindata/dsl.rb', line 448 def must_not_have_a_name_failed?(name) option?(:no_fieldnames) and name != nil end |
#name_is_reserved?(name) ⇒ Boolean
479 480 481 |
# File 'lib/bindata/dsl.rb', line 479 def name_is_reserved?(name) BinData::Struct::RESERVED.include?(name.to_sym) end |
#name_shadows_method?(name) ⇒ Boolean
475 476 477 |
# File 'lib/bindata/dsl.rb', line 475 def name_shadows_method?(name) @the_class.method_defined?(name) end |
#option?(opt) ⇒ Boolean
487 488 489 |
# File 'lib/bindata/dsl.rb', line 487 def option?(opt) @dsl_parser.send(:option?, opt) end |
#validate_field(name) ⇒ Object
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 |
# File 'lib/bindata/dsl.rb', line 412 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 |