Sha256: dc1bc2103652ddcf2cb2cecf3148d80c0b52adce149ae5f145ff10c6c92ed475

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

module Alf
  module Types
    #
    # Encapsulates a Renaming information 
    #
    class Renaming
      
      # @return [Hash] a renaming mapping as AttrName -> AttrName
      attr_reader :renaming     
      
      # 
      # Creates a renaming instance
      #
      # @param [Hash] a renaming mapping as AttrName -> AttrName 
      #
      def initialize(renaming)
        @renaming = renaming
      end 
      
      # 
      # Coerces `arg` to a renaming
      # 
      def self.coerce(arg)
        case arg
        when Renaming
          arg
        when Hash
          h = Tools.tuple_collect(arg){|k,v|
            [Tools.coerce(k, AttrName), Tools.coerce(v, AttrName)]
          }
          Renaming.new(h)
        when Array
          coerce(Hash[*arg])
        else
          raise ArgumentError, "Invalid argument `#{arg}` for Renaming()"
        end
      end

      def self.from_argv(argv, opts = {})
        coerce(argv)
      end
            
      #
      # Applies renaming to a a given tuple
      #
      def apply(tuple)
        Tools.tuple_collect(tuple){|k,v| [@renaming[k] || k, v]}
      end
      
      # Checks if this renaming is equal to `other`
      def ==(other)
        other.is_a?(Renaming) && (other.renaming == renaming)
      end
      
    end # class Renaming
  end # module Types
end # module Alf

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alf-0.10.1 lib/alf/types/renaming.rb
alf-0.10.0 lib/alf/types/renaming.rb