Sha256: 29b45e8b3e4dfdeeaff057d432212ac9e6e0389eb1727ef34d1a742a51ca38c4

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

require File.join %w(extend_it dsl)

module AdminIt
  module Renderable
    extend ExtendIt::DslModule

    dsl { dsl_block :render }

    def render(entity, instance = nil, &block)
      return if @render.nil?
      # method used as event emmiter, call block in instance or caller
      # context if it present
      if instance.nil?
        @render.call(entity)
      else
        instance.instance_exec(entity, &@render)
      end
    end
  end

  module Iconed
    extend ExtendIt::DslModule

    dsl do
      dsl_accessor :icon
    end

    def icon=(value)
      @icon = value.nil? ? default_icon : value.to_s
    end

    def icon
      @icon ||= default_icon
    end

    protected

    def default_icon
      ''
    end
  end

  module DisplayableName
    extend ExtendIt::DslModule

    dsl do
      dsl_accessor :display_name
    end

    def display_name=(value)
      @display_name = value.nil? ? default_display_name : value.to_s
    end

    def display_name
      @display_name ||= default_display_name
    end

    protected

    def default_display_name
      ''
    end
  end

  module Defaults
    def self.included(base)
      base.extend(ClassMethods)
    end

    def self.extended(base)
      base.extend(ClassMethods)
    end

    class Definer
      def method_missing(method_name, *args, &block)
        unless /\Adefault_/ =~ method_name
          method_name = "default_#{method_name}".to_sym
        end
        @caller_class.class_eval do
          define_method(method_name, &block)
          protected method_name
        end
      end

      def initialize(caller_class)
        @caller_class = caller_class
      end
    end

    module ClassMethods
      def defaults(&block)
        return unless block_given?
        Definer.new(self).instance_eval(&block)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
admin_it-1.1.0 lib/admin_it/shared.rb
admin_it-1.0.11 lib/admin_it/shared.rb