Sha256: 10814979679b3e26f5d217593316ca44f58daa0b9fb1c91cb68978caf07aa67b

Contents?: true

Size: 1.35 KB

Versions: 4

Compression:

Stored size: 1.35 KB

Contents

module Puffer
  module Controller
    module Config

      def self.included base
        base.class_eval do
          extend ClassMethods
          include InstanceMethods

          puffer_class_attribute :group
          puffer_class_attribute :model_name
          puffer_class_attribute :destroy, true

          helper_method :configuration
        end
      end

      module InstanceMethods

        def configuration
          self.class.configuration
        end

      end

      module ClassMethods

        def puffer_class_attribute name, default = nil
          class_attribute "_puffer_attribute_#{name}"
          send "_puffer_attribute_#{name}=", default
        end

        def setup &block
          block.bind(Config.new(self)).call
        end

        def configuration
          @configuration ||= Config.new(self)
        end

      end

      class Config

        attr_accessor :controller

        def initialize controller
          @controller = controller
        end

        def method_missing method, *args, &block
          method_name = "_puffer_attribute_#{method}"
          if args.present? && controller.respond_to?("#{method_name}=")
            controller.send "#{method_name}=", args.first
          elsif controller.respond_to?(method_name)
            controller.send method_name
          end
        end

      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
puffer-0.0.19 lib/puffer/controller/config.rb
puffer-0.0.18 lib/puffer/controller/config.rb
puffer-0.0.17 lib/puffer/controller/config.rb
puffer-0.0.16 lib/puffer/controller/config.rb