Sha256: c3c9813ff81141ac721b8f2023c1bde9615cfa3841e4c77128f58378e4eaa6c8

Contents?: true

Size: 694 Bytes

Versions: 7

Compression:

Stored size: 694 Bytes

Contents

require "dry-types"

module Disposable::Twin::Coercion
  module Types
    include Dry::Types.module
  end

  module ClassMethods
    def property(name, options={}, &block)
      super(name, options, &block).tap do
        coercing_setter!(name, options[:type], options[:nilify]) if options[:type] || options[:nilify]
      end
    end

    def coercing_setter!(name, type, nilify=false)
     type = type ? (Types::Form::Nil | type) : Types::Form::Nil if nilify

      mod = Module.new do
        define_method("#{name}=") do |value|
          super type.call(value)
        end
      end
      include mod
    end
  end

  def self.included(includer)
    includer.extend ClassMethods
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
disposable-0.4.3 lib/disposable/twin/coercion.rb
disposable-0.4.2 lib/disposable/twin/coercion.rb
disposable-0.4.1 lib/disposable/twin/coercion.rb
disposable-0.4.0 lib/disposable/twin/coercion.rb
disposable-0.3.2 lib/disposable/twin/coercion.rb
disposable-0.3.1 lib/disposable/twin/coercion.rb
disposable-0.3.0 lib/disposable/twin/coercion.rb