Sha256: ac223086318b898efcacff75aa679145e02e029352190ba55a3d7b0e588d66f8

Contents?: true

Size: 1.92 KB

Versions: 4

Compression:

Stored size: 1.92 KB

Contents

module MaskableAttribute
  module Formatting
    class Formats < Hash

      #{ :format => :two_digit }
      #{ :formats => [ :upcase, :downcase ] }
      #{ :exclusive_format => { :capitalized => Proc.new{ |mask| mask.captialized } } }
      #{ :exclusive_formats =>{ :capitalized => Proc.new{ |mask| mask.captialized }, :titleized => :titleize } }
      #{ :default_format => :titleize }
      attr_accessor :are_exclusive, :has_default, :default
      def initialize(options = {})
        @are_exclusive, @has_default = false, false
        @default = nil
        unless options.nil?
          options.each do |type, formats|
            if formats.is_a? Symbol or formats.is_a? Proc
              self[formats] = Format.new formats
            elsif formats.is_a? Array
              formats.each do |format|
                self[format] = Format.new format
              end
            else
              formats.each do |format, method|
                self[format] = Format.new method || format
              end
            end

            if type.to_s.include? "exclusive"
              @are_exclusive = true
            elsif type.to_s.include? "default"
              @has_default = true
              @default = self[formats]
            end
          end
        end
      end

      def apply(format, &block)
        fetch(format, (has_default? ? @default : Format.new)).apply yield unless yield.nil?
      end

      def names
        keys
      end

      def are_exclusive?
        @are_exclusive
      end

      def has_default?
        @has_default
      end
    end

    class Format
      def initialize(method=nil)
        @method = method
      end

      def apply(input)
        begin
          if @method.is_a? Symbol
            input.send(@method)
          elsif @method.is_a? Proc
            @method.call input
          else
            input
          end
        rescue
          nil
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
maskable_attribute-0.0.8 lib/maskable_attribute/formatting.rb
maskable_attribute-0.0.7 lib/maskable_attribute/formatting.rb
maskable_attribute-0.0.6 lib/maskable_attribute/formatting.rb
maskable_attribute-0.0.5 lib/maskable_attribute/formatting.rb