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.
413 414 415 416 |
# File 'lib/bindata/dsl.rb', line 413 def initialize(the_class, parser) @the_class = the_class @dsl_parser = parser end |
Instance Method Details
#all_or_none_names_failed?(name) ⇒ Boolean
462 463 464 465 466 467 468 469 470 471 |
# File 'lib/bindata/dsl.rb', line 462 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
477 478 479 |
# File 'lib/bindata/dsl.rb', line 477 def duplicate_name?(name) fields.has_field_name?(name) end |
#ensure_valid_name(name) ⇒ Object
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 |
# File 'lib/bindata/dsl.rb', line 434 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
489 490 491 |
# File 'lib/bindata/dsl.rb', line 489 def fields @dsl_parser.fields end |
#malformed_name?(name) ⇒ Boolean
473 474 475 |
# File 'lib/bindata/dsl.rb', line 473 def malformed_name?(name) /^[a-z_]\w*$/ !~ name.to_s end |
#must_have_a_name_failed?(name) ⇒ Boolean
458 459 460 |
# File 'lib/bindata/dsl.rb', line 458 def must_have_a_name_failed?(name) option?(:mandatory_fieldnames) and name.nil? end |
#must_not_have_a_name_failed?(name) ⇒ Boolean
454 455 456 |
# File 'lib/bindata/dsl.rb', line 454 def must_not_have_a_name_failed?(name) option?(:no_fieldnames) and name != nil end |
#name_is_reserved?(name) ⇒ Boolean
485 486 487 |
# File 'lib/bindata/dsl.rb', line 485 def name_is_reserved?(name) BinData::Struct::RESERVED.include?(name.to_sym) end |
#name_shadows_method?(name) ⇒ Boolean
481 482 483 |
# File 'lib/bindata/dsl.rb', line 481 def name_shadows_method?(name) @the_class.method_defined?(name) end |
#option?(opt) ⇒ Boolean
493 494 495 |
# File 'lib/bindata/dsl.rb', line 493 def option?(opt) @dsl_parser.send(:option?, opt) end |
#validate_field(name) ⇒ Object
418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 |
# File 'lib/bindata/dsl.rb', line 418 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 |