Sha256: b9e7fd3c50828d6dca2dd10f61286a84a0514f41cb08421b80c24ca6fbed7ca5
Contents?: true
Size: 1.47 KB
Versions: 5
Compression:
Stored size: 1.47 KB
Contents
module Yaoc class TransformationCommand protected attr_accessor :to, :from, :fetcher , :proc, :value_fetcher_proc public def self.deferred_source TransformationDeferredCommand end def self.default_source TransformationCommand end def self.create(to: nil, from: nil, deferred: false, conversion_proc: nil, fetcher_proc: nil) # will be executed in mapper object instance context later through :define_method tc_source = deferred ? deferred_source : default_source -> (to_convert, result){ tc_source.new(to: to, from: from, fetch_method: fetcher, conversion_proc: conversion_proc, fetcher_proc: fetcher_proc).call(to_convert, result) } end def self.fill_result_with_value(result, key, value) result.tap{|taped_result| taped_result[key] = value} end def initialize(to: nil, from: nil, fetch_method: nil, conversion_proc: nil, fetcher_proc: nil) self.to = to self.from = from self.proc = conversion_proc self.fetcher = fetch_method self.value_fetcher_proc = fetcher_proc || ->(to_convert, fetcher, from){ to_convert.public_send(fetcher, from)} end def call(to_convert, result) unless proc.nil? instance_exec(to_convert, result, &proc) else TransformationCommand.fill_result_with_value(result, to, value(to_convert)) end end def value(to_convert) value_fetcher_proc.call(to_convert, fetcher, from) end end end
Version data entries
5 entries across 5 versions & 1 rubygems