Sha256: 01e6fc74dc7c8708760069eef39b37f53eb63d3d174b93ec9f962639b0a0e2d7

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

module CanTango::Permit
  class Attribute < Base
    module ClassMethods
      def attribute name = nil
        @attribute ||= self.name.demodulize.gsub(/(.*)Permit/, '\1').underscore.to_sym
        return @attribute unless name
        @attribute = name
      end

      alias_method :type, :attribute
      alias_method :hash_key, :attribute

      def inherited(base_clazz)
        register_type base_clazz
        # register base_clazz, :name => attribute_name(base_clazz)
      end
    
      def attribute_name clazz = nil
        clazz ||= self
        clazz.name.demodulize.gsub(/(.*)(#{attribute.to_s.camelize}Permit)/, '\1').underscore.to_sym
      end
    end
    extend ClassMethods

    module TestAttribute
      def plural_attribute
        @pl ||= attribute.to_s.pluralize
      end

      def valid?
        test_single || test_plural
      end
  
      def test_single
        return false unless subject.respond_to?(attribute)
        subject.send(attribute) == attribute
      end
  
      def test_plural
        return false unless subject.respond_to?(plural_attribute)
        subject.send(plural_attribute).include? attribute
      end
    end
    include TestAttribute

    def permit_name
      self.class.attribute_name
    end

    def attribute name = nil
      self.class.attribute
    end
  
    class Builder < CanTango::Builder::Permit::Base
      def build
        return [] unless valid?
        super
      end
    
      protected

      include CanTango::Permit::Attribute::TestAttribute
    
      def self.attribute name = nil
        raise "No attribute defined" unless name || @attribute
        return @attribute unless name
        @attribute = name
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cantango-permits-0.1.1 lib/cantango/permit/attribute.rb