module Flatter::Mapper::Collection
Constants
- NonUniqKeysError
Public Class Methods
prepended(base)
click to toggle source
# File lib/flatter/mapper/collection.rb, line 5 def self.prepended(base) base.send(:include, Concern) end
Public Instance Methods
collection()
click to toggle source
# File lib/flatter/mapper/collection.rb, line 161 def collection return nil unless collection? @collection ||= target.each.with_index.map do |item, index| clone.tap do |mapper| mapper.reset_locals! mapper.set_target! item mapper.item_index = index end end end
collection?()
click to toggle source
# File lib/flatter/mapper/collection.rb, line 201 def collection? options[:collection] && item_index.nil? end
mapping_names()
click to toggle source
Calls superclass method
# File lib/flatter/mapper/collection.rb, line 134 def mapping_names super.map{ |name| collection? || pluralized? ? name.pluralize : name } end
mounting_names()
click to toggle source
Calls superclass method
# File lib/flatter/mapper/collection.rb, line 138 def mounting_names super.map{ |name| pluralized? ? name.pluralize : name } end
pluralize!()
click to toggle source
# File lib/flatter/mapper/collection.rb, line 126 def pluralize! @_pluralized = true end
pluralized?()
click to toggle source
# File lib/flatter/mapper/collection.rb, line 130 def pluralized? !!@_pluralized end
read()
click to toggle source
Calls superclass method
# File lib/flatter/mapper/collection.rb, line 91 def read return super unless collection? values = collection.map(&:read) assert_key_uniqueness!(values) {name => values} end
write(params)
click to toggle source
Calls superclass method
# File lib/flatter/mapper/collection.rb, line 101 def write(params) return super unless collection? return unless params.key?(name) data = extract_data(params) assert_collection!(data) keys = collection.map(&:key) remove_items(keys - data.map{ |p| p[:key] }) data.each do |params| if params.key?(:key) update_item(params[:key], params.except(:key)) else add_item(params) end end end
Protected Instance Methods
as_inner_mountings()
click to toggle source
Calls superclass method
# File lib/flatter/mapper/collection.rb, line 185 def as_inner_mountings if collection? ensure_target! collection.map{ |item| item.as_inner_mountings } else super end end
item_name()
click to toggle source
# File lib/flatter/mapper/collection.rb, line 180 def item_name "#{name}.#{item_index}" if item_index.present? end
local_mountings()
click to toggle source
Calls superclass method
# File lib/flatter/mapper/collection.rb, line 142 def local_mountings super.each{ |mapper| mapper.pluralize! if collection? || pluralized? } end
prefix()
click to toggle source
Calls superclass method
# File lib/flatter/mapper/collection.rb, line 173 def prefix return super if mounter.nil? [mounter.prefix, item_name].compact.join(?.).presence end
reset_locals!()
click to toggle source
# File lib/flatter/mapper/collection.rb, line 195 def reset_locals! @_local_mappings = nil @_local_mountings = nil end
Private Instance Methods
assert_collection!(data)
click to toggle source
# File lib/flatter/mapper/collection.rb, line 154 def assert_collection!(data) unless data.respond_to?(:each) fail ArgumentError, "Cannot write to '#{name}': argument is not a collection" end end
assert_key_uniqueness!(values)
click to toggle source
# File lib/flatter/mapper/collection.rb, line 147 def assert_key_uniqueness!(values) keys = values.map{ |v| v['key'] }.compact keys == keys.uniq or fail NonUniqKeysError, "All keys in collection '#{name}' should be uniq, but were not" end
extract_data(params)
click to toggle source
# File lib/flatter/mapper/collection.rb, line 121 def extract_data(params) params[name] end