Module: MetasploitDataModels::Match::Child

Overview

Adds a match class method to the extending class. The extending class must define MATCH_REGEXP.

Examples:

Define match class method

class MetasploitDataModels::Format
  extend MetasploitDataModels::Match::Child

  #
  # CONSTANTS
  #

  # Regular expression {MetasploitDataModels::Match#match} must match against.
  MATCH_REGEXP = /\A...\z/
end

# a `MetasploitDataModels::Format` because `'123'` matches `MetasploitDataModels::Format::MATCH_REGEXP`
instance = MetapsloitDataModels::Format.match('123')
# `nil` because string `'12'` doesn't match `MetasploitDataModels::Format::MATCH_REGEXP`
no_instance = MetasploitDataModels::Format.match('12')

Instance Method Summary collapse

Instance Method Details

#match(formatted_value) ⇒ Object

Creates a new instance of the extending class if MATCH_REGEXP, defined on the extending class, matches formatted_value.

Parameters:

  • formatted_value (#to_s)

25
26
27
28
29
30
31
32
33
# File 'lib/metasploit_data_models/match/child.rb', line 25

def match(formatted_value)
  instance = nil

  if match_regexp.match(formatted_value)
    instance = new(value: formatted_value)
  end

  instance
end

#match_regexpRegexp

Regular expression to match against for #match.

Returns:

  • (Regexp)

    Defaults to #regexp pinned with \A and \z.


38
39
40
# File 'lib/metasploit_data_models/match/child.rb', line 38

def match_regexp
  @match_regexp ||= /\A#{regexp}\z/
end

#regexpRegexp

Regular expression to match child as part of Parent.

Returns:

  • (Regexp)

    Default to REGEXP from the extending Class.


45
46
47
# File 'lib/metasploit_data_models/match/child.rb', line 45

def regexp
  self::REGEXP
end