Module: PatternMatching::DSL_MODULE

Included in:
PatternMatching
Defined in:
lib/patternmatching/pattern.rb

Overview

Domain Specific Language style methods for inside module

Instance Method Summary collapse

Instance Method Details

#func(name, &block) ⇒ Object

Define method as partial style

Usage

func(NAME).seems as PATTERN_1 do ACTION_1 end func(NAME).seems as PATTERN_2 do ACTION_2 end func(NAME).seems something do ACTION_DEFAULT end

or

func NAME do

seems as {PATTERN_1} do ACTION_1 end
seems as {PATTERN_2} do ACTION_2 end
seems something do ACTION_DEFAULT end

end



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/patternmatching/pattern.rb', line 44

def func(name, &block)
  pattern_name = ("@_pattern_" + name.to_s ).to_sym
  unless method_defined?(name)
    patterns = []
    instance_variable_set(pattern_name, patterns)
    define_method(name) do |target|
      result = MatchExec.exec_as(target, patterns, self)
      if result
        result[0].instance_eval(&result[1])
      else
        nil
      end
    end
  end
  patterns = instance_variable_get(pattern_name)
  fragments = PatternFragments.new(patterns)
  if block
    fragments.instance_eval(&block)
  end
  fragments
end