Module: ActiveGraph::Shared::Typecaster

Defined in:
lib/active_graph/shared/typecaster.rb

Overview

This module provides a convenient way of registering a custom Typecasting class. Custom Typecasters all follow a simple pattern.

EXAMPLE:

.. code-block

ruby

class RangeConverter
  class << self
    def primitive_type
      String
    end

    def convert_type
      Range
    end

    def to_db(value)
      value.to_s
    end

    def to_ruby(value)
      ends = value.to_s.split('..').map { |d| Integer(d) }
      ends[0]..ends[1]
    end
    alias_method :call, :to_ruby
  end

  include ActiveGraph::Shared::Typecaster
end

This would allow you to use ‘property :my_prop, type: Range` in a model. Each method and the `alias_method` call is required. Make sure the module inclusion happens at the end of the file.

‘primitive_type` is used to fool ActiveAttr’s type converters, which only recognize a few basic Ruby classes.

‘convert_type` must match the constant given to the `type` option.

‘to_db` provides logic required to transform your value into the class defined by `primitive_type`

‘to_ruby` provides logic to transform the DB-provided value back into the class expected by code using the property. In other words, it should match the `convert_type`.

Note that ‘alias_method` is used to make `to_ruby` respond to `call`. This is to provide compatibility with ActiveAttr.

Class Method Summary collapse

Class Method Details

.included(other) ⇒ Object



48
49
50
# File 'lib/active_graph/shared/typecaster.rb', line 48

def self.included(other)
  ActiveGraph::Shared::TypeConverters.register_converter(other)
end