Class: Habdsl::DslParser

Inherits:
Object
  • Object
show all
Defined in:
lib/habdsl/dsl_parser.rb

Overview

DSLのみを評価してopenHAB設定DSLを生成するパーサ

Defined Under Namespace

Classes: DSLValidationError

Class Method Summary collapse

Class Method Details

.parse(input_code:) ⇒ Object

Raises:



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/habdsl/dsl_parser.rb', line 12

def self.parse(input_code:)
  raise DSLValidationError, "Syntax error: DSL code contains a syntax error." if Ripper.sexp(input_code).nil?

  dsl = Habdsl::Model::Dsl.new
  defined_objects = []

  eval_context = Object.new

  eval_context.define_singleton_method(:location) do |**args, &block|
    loc = dsl.location(**args, &block)
    defined_objects << loc
    loc
  end

  eval_context.define_singleton_method(:equipment) do |**args, &block|
    eq = dsl.equipment(**args, &block)
    defined_objects << eq
    eq
  end

  eval_context.define_singleton_method(:point) do |**args|
    dsl.point(**args)
  end

  eval_context.instance_eval(input_code)

  generated_output = defined_objects.map(&:to_s).join("\n")

  ResultParser.new(dsl: generated_output, table: nil)
end