Sha256: 3d0642fa3d8145fb017eb0639741708691454e63e5d279d23a1f34299968a457

Contents?: true

Size: 1.4 KB

Versions: 3

Compression:

Stored size: 1.4 KB

Contents

require 'taketo/support'
require 'taketo/associated_nodes'

module Taketo
  module Constructs

    class BaseConstruct
      include AssociatedNodes

      attr_accessor :parent
      attr_reader :name
      attr_writer :default_server_config

      def initialize(name)
        super
        @name = name
        @default_server_config = proc {}
        @parent = NullConstruct
      end

      def node_type
        demodulized = self.class.name.gsub(/.*::/, '')
        demodulized.gsub(/([a-z])([A-Z])/, '\\1_\\2').downcase.to_sym
      end

      ##
      # Override in subclasses if needed
      def parent=(parent)
        @parent = parent
      end

      def parents
        result = []
        p = parent
        while p != NullConstruct
          result << p
          p = p.parent
        end
        result
      end

      def path
        parents.reverse_each.map(&:name).concat([self.name]).reject(&:nil?).join(":")
      end

      def default_server_config
        parent_default_server_config = parent.default_server_config
        own_default_server_config = @default_server_config
        proc { instance_eval(&parent_default_server_config); instance_eval(&own_default_server_config)}
      end

      def qualified_name
        "#{node_type} #{self.name}"
      end
    end

    class NullConstructClass
      def default_server_config; proc {}; end
    end

    NullConstruct = NullConstructClass.new

  end
end


Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
taketo-0.3.1 lib/taketo/constructs/base_construct.rb
taketo-0.3.0 lib/taketo/constructs/base_construct.rb
taketo-0.2.0 lib/taketo/constructs/base_construct.rb