Sha256: a03fb71231fcb8696709f05b333720c3ceac700f7310af750420db5cb72e5843

Contents?: true

Size: 882 Bytes

Versions: 12

Compression:

Stored size: 882 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(input, options)
        Virtus::Attribute.build(@type).coerce(input)
      end
    end


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


    module ClassMethods
      def property(name, options={}, &block)
        super.tap do |definition|
          return definition unless type = options[:type]

          definition.merge!(render_filter: coercer = Coercer.new(type))
          definition.merge!(parse_filter: coercer)
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
representable-3.0.4 lib/representable/coercion.rb
representable-3.0.3 lib/representable/coercion.rb
representable-3.0.2 lib/representable/coercion.rb
representable-3.0.1 lib/representable/coercion.rb
representable-3.0.0 lib/representable/coercion.rb
representable-2.4.1 lib/representable/coercion.rb
representable-2.4.0 lib/representable/coercion.rb
representable-2.4.0.rc5 lib/representable/coercion.rb
representable-2.4.0.rc4 lib/representable/coercion.rb
representable-2.4.0.rc3 lib/representable/coercion.rb
representable-2.4.0.rc2 lib/representable/coercion.rb
representable-2.4.0.rc1 lib/representable/coercion.rb