Sha256: c14b09d20a04aa53d9ed884b62600c2d5bba0f514606115697637237053fff67

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 KB

Contents

module Sprinkle
  module Attributes
    extend ActiveSupport::Concern
    
    included do
      attr_accessor :delivery
    end
    
    def defaults(deployment)
      defaults = deployment.defaults[self.class.name.split(/::/).last.downcase.to_sym]
      self.set_defaults(&defaults) if defaults
      @delivery = deployment.style
    end
    
    def set_defaults(&block)
      before = @options
      @options = {}
      self.instance_eval(&block) if block
      @options = before.reverse_merge(@options)
    end
    
    private 
    
    def read_from_package(m)
      @package.send(m) if @package.respond_to?(m)
    end
    
    def option?(sym)
      !!@options[sym]
    end
    
    module ClassMethods
      
      def attributes(*list)
        list.each do |a|
          define_method a do |*val|
            val=nil if val.empty?
            val ? @options[a] = val.first : @options[a] || read_from_package(a)
          end
        end
      end
      
      def multi_attributes(*list)
        list.each do |a|
          define_method a do |*val|
            val = val.try(:first)
            return @options[a] unless val
            @options[a]||=[]
            val.is_a?(Array) ? @options[a] += val : @options[a] << val
          end
        end
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sprinkle-0.6.1.1 lib/sprinkle/extensions/attributes.rb
sprinkle-0.6.1 lib/sprinkle/extensions/attributes.rb
sprinkle-0.6.0 lib/sprinkle/extensions/attributes.rb