app/models/alchemy/custom/model/cloner.rb in alchemy-custom-model-2.0.1 vs app/models/alchemy/custom/model/cloner.rb in alchemy-custom-model-2.0.2
- old
+ new
@@ -1,10 +1,12 @@
module Alchemy
module Custom
module Model
class Cloner < ::ActiveType::Object
+
+
attribute :language_id, :integer
attribute :site_id, :integer
validates :language_id, :site_id, presence: true
validate :check_lang_in_site, unless: -> {site_id.blank?}
@@ -12,11 +14,11 @@
###
# ritorna true se il clone รจ andato a buon fine false altrimenti
def apply
if valid?
- cloned = self.category.clone_to_other_lang self.attributes.with_indifferent_access
+ cloned = self.send(self.to_cloner_name).clone_to_other_lang(get_attributes_for_clone.with_indifferent_access)
if cloned.valid?
true
else
cloned.errors.full_messages.each do | error|
self.errors.add(:base, error)
@@ -28,9 +30,30 @@
end
end
+ private
+
+ class << self
+ def cloner_of(name,scope = nil, options={})
+ class_attribute :to_cloner_name
+ name = name.to_sym
+ if options[:foreign_key]
+ attribute options[:foreign_key]
+ else
+ attribute :"#{name}_id"
+ end
+ belongs_to name, scope, options
+ self.to_cloner_name = name
+ end
+ end
+
+ def get_attributes_for_clone
+ self.attributes
+ end
+
+
protected
def check_lang_in_site
site = Alchemy::Site.find self.site_id
if !site.languages.pluck(:id).include? self.language_id
\ No newline at end of file