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