Sha256: 09fe7a53b54679d6913e3706ecd28947d42d83cceb0650305836ed22ad73f7c9

Contents?: true

Size: 1.38 KB

Versions: 7

Compression:

Stored size: 1.38 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
          else
            super
          end
        end

      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
puffer-0.0.26 lib/puffer/controller/config.rb
puffer-0.0.25 lib/puffer/controller/config.rb
puffer-0.0.24 lib/puffer/controller/config.rb
puffer-0.0.23 lib/puffer/controller/config.rb
puffer-0.0.22 lib/puffer/controller/config.rb
puffer-0.0.21 lib/puffer/controller/config.rb
puffer-0.0.20 lib/puffer/controller/config.rb