Sha256: 98573d318ae0e2d0b897e91638c909257ca717d2e1c7d465496ee406c8c53dd3

Contents?: true

Size: 920 Bytes

Versions: 1

Compression:

Stored size: 920 Bytes

Contents

require 'ostruct'

module Resulang
  class Section < OpenStruct
    attr_reader :_section_name

    include Rendering

    def initialize(name:, data:)
      super(_section_name: name)
      interpret_object(self, data)
    end

    def get_binding
      binding
    end

    private def interpret(value) 
      if (range = interpret_range(value))
        range
      elsif value.respond_to?(:keys)
        interpret_object(OpenStruct.new, value)
      elsif value.respond_to?(:map)
        value.map { |v| interpret(v) }
      else
        value
      end
    end

    private def interpret_object(struct, value)
      struct.tap do |s|
        value.each do |key, value|
          s[key] = interpret(value)
        end
      end
    end

    private def interpret_range(value)
      if value.respond_to?(:keys) && value.keys == ['range']
        (value['range'].first..value['range'].last)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
resulang-3.0.0 lib/resulang/section.rb