Sha256: eb84ac81144e8fff2ca6b1a63a5f8f19d653294e7db28e50ebc57f1e061d2c3a

Contents?: true

Size: 1.31 KB

Versions: 8

Compression:

Stored size: 1.31 KB

Contents

require 'transproc/registry'
require 'transproc/transformer'

module ROM
  class Changeset
    # Transproc Registry useful for pipe
    #
    # @api private
    module PipeRegistry
      extend Transproc::Registry

      import Transproc::HashTransformations

      def self.add_timestamps(data)
        now = Time.now
        data.merge(created_at: now, updated_at: now)
      end

      def self.touch(data)
        data.merge(updated_at: Time.now)
      end
    end

    # Composable data transformation pipe used by default in changesets
    #
    # @api private
    class Pipe < Transproc::Transformer[PipeRegistry]
      attr_reader :processor

      def initialize(processor = self.class.transproc)
        @processor = processor
      end

      def self.[](name)
        container[name]
      end

      def [](name)
        self.class[name]
      end

      def bind(context)
        if processor.is_a?(Proc)
          self.class.new(Pipe[-> *args { context.instance_exec(*args, &processor) }])
        else
          self
        end
      end

      def >>(other)
        if processor
          Pipe.new(processor >> other)
        else
          Pipe.new(other)
        end
      end

      def call(data)
        if processor
          processor.call(data)
        else
          data
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rom-repository-1.3.2 lib/rom/repository/changeset/pipe.rb
rom-repository-1.3.1 lib/rom/repository/changeset/pipe.rb
rom-repository-1.3.0 lib/rom/repository/changeset/pipe.rb
rom-repository-1.2.0 lib/rom/repository/changeset/pipe.rb
rom-repository-1.1.0 lib/rom/repository/changeset/pipe.rb
rom-repository-1.0.2 lib/rom/repository/changeset/pipe.rb
rom-repository-1.0.1 lib/rom/repository/changeset/pipe.rb
rom-repository-1.0.0 lib/rom/repository/changeset/pipe.rb