Sha256: ea6524ce5f2664ce98afb0da2e8e93123809cd364aa8c3e81c8354e0e39505ae

Contents?: true

Size: 1.26 KB

Versions: 5

Compression:

Stored size: 1.26 KB

Contents

module Adminos::NestedSet::Duplication
  extend ActiveSupport::Concern

  # Метод клонирует объект. Добавляет в slug -сopy, т.к.  он уникален
  # Далее объект сохранятеся в базе. Если объект в корне, то он туда и помещается
  # Иначе объект помещается в нужного родителя
  # Переопредели generated_slug в модели если хочешь свою логику
  def duplication
    cloned = self.dup
    cloned.slug = generated_slug if cloned.respond_to?('slug=')
    cloned.published = false if cloned.respond_to?('published=')
    cloned.translations = self.translations.map(&:dup) if cloned.respond_to?('translations')

    cloned.save
    self.parent.children << cloned unless self.root?
  end

  private

  def generated_slug
    prefix =
      if self.respond_to?(:translations)
        self.class.with_translated_attribute(:name, reasonable_name, I18n.available_locales).size
      else
        self.class.where(name: reasonable_name).size
      end

    base_slug = self.class.find_by(slug: reasonable_name.parameterize).try(:slug)
    base_slug.present? ? base_slug + prefix.to_s : reasonable_name.parameterize
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
adminos-1.0.0.pre.rc.5 lib/adminos/helpers/models/nested_set/duplication.rb
adminos-1.0.0.pre.rc.4 lib/adminos/helpers/models/nested_set/duplication.rb
adminos-1.0.0.pre.rc.3 lib/adminos/helpers/models/nested_set/duplication.rb
adminos-1.0.0.pre.rc.2 lib/adminos/helpers/models/nested_set/duplication.rb
adminos-1.0.0.pre.rc.1 lib/adminos/helpers/models/nested_set/duplication.rb