Sha256: 24b81ca0f642f45804b0130db93eb15a070a474ccfae729b183795a365f79b88

Contents?: true

Size: 1.72 KB

Versions: 42

Compression:

Stored size: 1.72 KB

Contents

module ActiveGraph
  module Shared
    # 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.

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

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
activegraph-12.0.0.beta.4 lib/active_graph/shared/typecaster.rb
activegraph-11.5.0.beta.3 lib/active_graph/shared/typecaster.rb
activegraph-12.0.0.beta.3 lib/active_graph/shared/typecaster.rb
activegraph-12.0.0.beta.2 lib/active_graph/shared/typecaster.rb
activegraph-11.5.0.beta.2 lib/active_graph/shared/typecaster.rb
activegraph-12.0.0.beta.1 lib/active_graph/shared/typecaster.rb
activegraph-11.5.0.beta.1 lib/active_graph/shared/typecaster.rb
activegraph-11.5.0.alpha.1 lib/active_graph/shared/typecaster.rb
activegraph-11.4.0 lib/active_graph/shared/typecaster.rb
activegraph-11.3.1 lib/active_graph/shared/typecaster.rb
activegraph-11.3.0 lib/active_graph/shared/typecaster.rb
activegraph-11.2.0 lib/active_graph/shared/typecaster.rb
activegraph-11.1.0 lib/active_graph/shared/typecaster.rb
activegraph-11.1.0.beta.1 lib/active_graph/shared/typecaster.rb
activegraph-11.1.0.alpha.4 lib/active_graph/shared/typecaster.rb
activegraph-11.1.0.alpha.3 lib/active_graph/shared/typecaster.rb
activegraph-11.1.0.alpha.2 lib/active_graph/shared/typecaster.rb
activegraph-11.1.0.alpha.1 lib/active_graph/shared/typecaster.rb
activegraph-10.2.0.beta.1 lib/active_graph/shared/typecaster.rb
activegraph-11.0.2-java lib/active_graph/shared/typecaster.rb