Sha256: adea6dc5371145a5d2b77546a09784c838a00f1e10e40c2f21befef159afd3e4

Contents?: true

Size: 1.81 KB

Versions: 5

Compression:

Stored size: 1.81 KB

Contents

require_relative '../lockable'
require_relative '../../../serializer'
require_relative '../../../trace'

require 'securerandom'

module Voom
  module Presenters
    module DSL
      module Components
        # Every object in the POM is a node
        # This class provides common base implementation
        class Base
          include Lockable

          include Voom::Serializer
          include LoggerMethods
          include Trace

          attr_reader :type, :id, :attributes, :context

          alias params context
          alias attribs attributes

          def initialize(type:, parent:, id: nil, context: {}, **attributes, &block)
            @id = h(id) || generate_id
            @type = h(type)
            @parent = parent
            @context = context
            @attributes = escape(attributes)
            @block = block
          end

          def expand!
            extend(_helpers_) if _helpers_
            instance_eval(&@block) if @block
          end

          private

          def h(text)
            return text unless text.is_a? String
            CGI::escapeHTML(text)
          end

          def escape(attributes)
            attributes.map {|k, v| [k, h(v)]}.to_h
          end

          def generate_id
            Voom::Presenters::Settings.config.presenters.id_generator.call(self)
          end
      
          protected

          def parent(for_type)
            return @parent if @parent.type == for_type
            @parent.send(:parent, for_type)
          end

          def router
            @parent.send(:router)
          end

          def yield_block
            return @_yield_block_ if @_yield_block_
            @parent.send(:yield_block)
          end

          def _helpers_
            @parent.send(:_helpers_) if @parent
          end

        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
voom-presenters-0.1.4 lib/voom/presenters/dsl/components/base.rb
voom-presenters-0.1.3 lib/voom/presenters/dsl/components/base.rb
voom-presenters-0.1.2 lib/voom/presenters/dsl/components/base.rb
voom-presenters-0.1.1 lib/voom/presenters/dsl/components/base.rb
voom-presenters-0.1.0 lib/voom/presenters/dsl/components/base.rb