module Tengine::Core::DslEvaluator

Attributes

config[RW]

Public Instance Methods

__evaluate__() click to toggle source
# File lib/tengine/core/dsl_evaluator.rb, line 8
def __evaluate__
  __setup_core_ext__
  begin
    Tengine.plugins.notify(self, :__evaluate__) do
      ActiveSupport::Dependencies.mechanism = config.tengined.cache_drivers ? :require : :load
      config.dsl_dir_path.tap do |dsl_dir_path|
        $LOAD_PATH.unshift(dsl_dir_path) unless $LOAD_PATH.include?(dsl_dir_path)
        ActiveSupport::Dependencies.autoload_paths = [dsl_dir_path]
      end
      config.dsl_file_paths.each do |f|
        Tengine::Core.stdout_logger.debug("now loading #{f}")
        # self.instance_eval(File.read(f), f)
        # require(f)
        if config.tengined.cache_drivers
          load(f)
        else
          begin
            require_dependency( config.relative_path_from_dsl_dir(f) )
          rescue NameError => e
            # ロードするパスのディレクトリ名をcamelizeした際に不正なモジュール名(例えば先頭が数字)
            # だと失敗してしまうのでその場合はloadし直す
            if e.message =~ /wrong constant name/
              load(f)
            else
              raise
            end
          end
        end
      end
    end
  ensure
    __teardown_core_ext__
  end
end
__safety_driver__(driver) { || ... } click to toggle source
# File lib/tengine/core/dsl_evaluator.rb, line 53
def __safety_driver__(driver)
  @__driver__ = driver
  @__session__ = driver.session
  begin
    yield if block_given?
  ensure
    @__driver__ = nil
    @__session__ = nil
  end
end
__safety_event__(event) { || ... } click to toggle source
# File lib/tengine/core/dsl_evaluator.rb, line 43
def __safety_event__(event)
  @__event__ = event
  begin
    yield if block_given?
  ensure
    @__event__ = nil
    @__event_wrapper__ = nil
  end
end

Private Instance Methods

__setup_core_ext__() click to toggle source
# File lib/tengine/core/dsl_evaluator.rb, line 66
def __setup_core_ext__
  Symbol.class_eval do
    def and(other)
      Tengine::Core::DslFilterDef.new_and(self, other)
    end
    alias_method :&, :and

    def at(soruce_pattern)
      Tengine::Core::DslFilterDef.new_at(self, soruce_pattern)
    end
  end
end
__source_location__(block) click to toggle source

requireではなく、ファイルを文字列としてロードしてinstance_evalで評価される場合、 Proc#source_locationが返す配列の一つ目の文字列がUTF-8ではなくASCII-8BITになってしまう。 そのままこれを使って検索すると、ヒットするべき検索もヒットしない。 これを回避するためにUTF-8として解釈するようにString#force_encodingを使用している。 doc.ruby-lang.org/ja/1.9.2/method/String/i/force_encoding.html

# File lib/tengine/core/dsl_evaluator.rb, line 90
def __source_location__(block)
  filepath, lineno = *block.source_location
  filepath = filepath.dup
  filepath.force_encoding(Encoding::UTF_8)
  return filepath, lineno
end
__teardown_core_ext__() click to toggle source
# File lib/tengine/core/dsl_evaluator.rb, line 79
def __teardown_core_ext__
  Symbol.class_eval do
    remove_method(:&, :and)
  end
end
and(other) click to toggle source
# File lib/tengine/core/dsl_evaluator.rb, line 68
def and(other)
  Tengine::Core::DslFilterDef.new_and(self, other)
end
at(soruce_pattern) click to toggle source
# File lib/tengine/core/dsl_evaluator.rb, line 73
def at(soruce_pattern)
  Tengine::Core::DslFilterDef.new_at(self, soruce_pattern)
end