Sha256: aaff81d7434b6604b8894195f8868f058342ceebc2ad8ba1dd19adf1c20ed6c2

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

module Lolita
  module Support
    # Containes different kind of formaters.
    module Formatter
       # Change output format of different input types.
      # To define, pass block, or String.
      # ====Exmaple
      #     Lolita::Support::Formatter.new do |value|
      #       value.to_i**2
      #     end
      #     # or as String
      #     Lolita::Support::Formatter.new("%Y-%m")
      # To format any value with defined formater call #with
      # ====Example
      #     # Previous examples may be called like this
      #     formatter.with(1)
      #     formatter.with(Date.today)
      class Base
        def initialize(format=nil,&block)
          @format=format
          @block=block if block_given?
        end

        def format
          @format
        end

        def block
          @block
        end

        def with(value,*optional_values)
          if @block
            @block.call(value,*optional_values)
          elsif @format
            use_format_for(value,*optional_values)
          else
            use_default_format(value,*optional_values)
          end
        end

        private

        def use_default_format(value,*optional_values)
          value
        end

        def use_format_for(value, *optional_values)
          if value.respond_to?(:format)
            call_block(value,*optional_values)
          else
            value.to_s.unpack(@format)
          end
        end

        def call_block(value,*optional_values)
          value.send(:format,value,*optional_values)
        end

      end
      
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lolita-3.1.4 lib/lolita/support/formatter/base.rb