Sha256: daa00769f39b75770aa4bb46252a6e3a3c62807db12adadfd876686151c59a43

Contents?: true

Size: 866 Bytes

Versions: 19

Compression:

Stored size: 866 Bytes

Contents

require "virtus"

module Representable
  module Coercion
    class Coercer
      def initialize(type)
        @type = type
      end

      # This gets called when the :render_filter or :parse_filter option is evaluated.
      # Usually the Coercer instance is an element in a Pipeline to allow >1 filters per property.
      def call(value, doc, options)
        Virtus::Attribute.build(@type).coerce(value)
      end
    end


    def self.included(base)
      base.class_eval do
        extend ClassMethods
        register_feature Coercion
      end
    end


    module ClassMethods
      def build_definition(name, options, &block) # Representable::Declarative
        return super unless type = options[:type]

        options[:render_filter] << coercer = Coercer.new(type)
        options[:parse_filter]  << coercer

        super
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
representable-2.3.0 lib/representable/coercion.rb
representable-2.2.3 lib/representable/coercion.rb
representable-2.2.2 lib/representable/coercion.rb
representable-2.2.1 lib/representable/coercion.rb
representable-2.2.0 lib/representable/coercion.rb
representable-2.1.8 lib/representable/coercion.rb
representable-2.1.7 lib/representable/coercion.rb
representable-2.1.6 lib/representable/coercion.rb
representable-2.1.5 lib/representable/coercion.rb
representable-2.1.4 lib/representable/coercion.rb
representable-2.1.3 lib/representable/coercion.rb
representable-2.1.1 lib/representable/coercion.rb
representable-2.1.0 lib/representable/coercion.rb
representable-2.0.4 lib/representable/coercion.rb
representable-2.0.3 lib/representable/coercion.rb
representable-2.0.2 lib/representable/coercion.rb
representable-2.0.1 lib/representable/coercion.rb
representable-2.0.0 lib/representable/coercion.rb
representable-2.0.0.rc2 lib/representable/coercion.rb