Sha256: eab593ad8a629251c25bbc4772d2a2878d3e676ce8a3405dec0b00a3489a330f
Contents?: true
Size: 1.43 KB
Versions: 3
Compression:
Stored size: 1.43 KB
Contents
require 'synchronisable/input_descriptor' module Synchronisable # Responsible for guessing the user input format. # # @api private class InputParser def initialize(model, synchronizer) @model = model @synchronizer = synchronizer end # Parses the user input. # # @param data [Array<Hash>, Array<String>, Array<Integer>, String, Integer] # synchronization data to handle. # # @return [Array<Hash>] array of hashes with remote attributes def parse(data) input = InputDescriptor.new(data) result = case when input.empty? @synchronizer.fetch when input.remote_id? @synchronizer.find(data) when input.local_id? find_by_local_id(data) when input.array_of_ids? find_by_array_of_ids(input) else result = data.dup end [result].flatten.compact end private def find_by_array_of_ids(input) records = find_imports(input.element_class.name, input.data) records.map { |r| @synchronizer.find(r.remote_id) } end def find_by_local_id(id) import = @model.find_by(id: id).try(:import) import ? @synchronizer.find(import.remote_id) : nil end def find_imports(class_name, ids) case class_name when 'Fixnum' ids.map { |id| @model.find_by(id: id).try(&:import) } when 'String' ids.map { |id| Import.find_by(id: id) } end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
synchronisable-1.0.2 | lib/synchronisable/input_parser.rb |
synchronisable-1.0.1 | lib/synchronisable/input_parser.rb |
synchronisable-1.0.0 | lib/synchronisable/input_parser.rb |