module FlatMap::OpenMapper::Traits::ClassMethods

Traits class macros

Public Instance Methods

trait(name, &block) click to toggle source

Define a trait for a mapper class. In implementation terms, a trait is nothing more than a mounted mapper, owned by a host mapper. It shares all mappings with it. The block is passed as a body of the anonymous mapper class.

@param [Symbol] name

# File lib/flat_map/open_mapper/traits.rb, line 18
def trait(name, &block)
  base_class        = self < FlatMap::Mapper ? FlatMap::Mapper : FlatMap::OpenMapper
  mapper_class      = Class.new(base_class, &block)
  mapper_class_name = "#{ancestors.first.name}#{name.to_s.camelize}Trait"
  mapper_class.singleton_class.send(:define_method, :name){ mapper_class_name }
  mount mapper_class, :trait_name => name
end