module Slices::HasSlices

Public Instance Methods

embeded_slices() { |embed_name| ... } click to toggle source
# File lib/slices/has_slices.rb, line 82
def embeded_slices(&block)
  self.class.slice_embeds.each do |embed_name|
    yield(embed_name)
  end
end
messages_from_errors(errors) click to toggle source
# File lib/slices/has_slices.rb, line 88
def messages_from_errors(errors)
  if errors.respond_to?(:messages)
    errors.messages
  else
    errors
  end
end
ordered_slices_for(embed_name=nil) click to toggle source
# File lib/slices/has_slices.rb, line 58
def ordered_slices_for(embed_name=nil)
  embed_name = self.class.slice_embeds.first if embed_name.nil?
  send("ordered_#{embed_name}")
end
slice_errors_for(embed_name) click to toggle source
# File lib/slices/has_slices.rb, line 72
def slice_errors_for(embed_name)
  Hash.new.tap do |message|
    slices_for(embed_name).each do |slice|
      if ! slice.valid? && ! slice.to_delete?
        message[slice.id_or_client_id] = messages_from_errors(slice.errors)
      end
    end
  end
end
slices_for(embed_name) click to toggle source
# File lib/slices/has_slices.rb, line 54
def slices_for(embed_name)
  send(embed_name)
end
update_attributes(attributes) click to toggle source
Calls superclass method
# File lib/slices/has_slices.rb, line 31
def update_attributes(attributes)
  [:slices, :set_slices].each do |embed_name|
    next if attributes[embed_name].nil?

    attributes[embed_name] = attributes[embed_name].map { |slice_attributes|
      slice_attributes = slice_attributes.symbolize_keys
      next if slice_attributes[:_destroy]
      slice_attributes.delete :_new

      if slice_attributes[:id].present?
        slice = slices_for(embed_name).find(slice_attributes[:id])
        slice.write_attributes(slice_attributes)
      else
        class_name = slice_attributes[:type].to_s.camelize + 'Slice'
        slice = class_name.constantize.new(slice_attributes)
      end
      slice
    }.compact
  end

  super
end
validate_slices() click to toggle source
# File lib/slices/has_slices.rb, line 63
def validate_slices
  embeded_slices do |embed_name|
    _slice_errors = slice_errors_for(embed_name)
    if _slice_errors.any?
      errors.add(embed_name, _slice_errors)
    end
  end
end