Sha256: 925139850b20310926939706a1e57955708546c2e6791f209a6acd4a32c26815
Contents?: true
Size: 1.58 KB
Versions: 1
Compression:
Stored size: 1.58 KB
Contents
# frozen_string_literal: true require 'gladwords/commands/error_wrapper' module Gladwords module Commands # @api private module Core extend Dry::Core::ClassAttributes # @api private module Types include Dry::Types.module Operation = Hash.schema( operator: Coercible::String.enum('ADD', 'SET', 'REMOVE'), operand: Hash ) end def self.included(klass) super klass.include ErrorWrapper klass.defines :adwords_operator klass.defines :operand_mapper klass.option :mutator, default: -> { method(:mutate) } end def execute(tuples) perform_operations(tuples) end def perform_operations(tuples) operations = build_operations(tuples) raw_result = mutator.call(operations) unwrap_result(raw_result) end private def build_operations(tuples) ensure_enumerable(tuples).map do |tuple| operator(tuple) end end def mutate(operations) relation.dataset.mutate(operations) end def unwrap_result(result) result[:value] end def ensure_enumerable(tuples) if tuples.is_a?(Array) tuples else [tuples] end end def operator(operand) op = if self.class.operand_mapper self.class.operand_mapper.call(operand) else operand end Types::Operation[operator: self.class.adwords_operator, operand: op] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
gladwords-1.0.1 | lib/gladwords/commands/core.rb |