We have an action merge for two projects. In the projects we have different modules like Feed, Files, Post etc....
modules Convert
class Merge
attr_accessor :source_ids, :destination_id, :sources, :destination
def initialize(source_ids, destination_id)
@source_ids = source_ids.class == Array ? source_ids : [source_ids]
@destination_id = destination_id
@sources = Modelname.where("id in (?)", @source_ids).all
@destination = Modelname.where("id in (?)", @destination_id).first
end
def merge
sources.each do |source|
ActiveRecord::Base.transaction do
Convert::Feed.new(source, destination).merge
Convert::File.new(source, destination).merge
Convert::Post.new(source, destination).merge
## There are many more modules - code comes here
end
end
end
end
class Feed
def initialize(source, destination)
@source = source
@destination = destination
end
def merge
#Feed merge code here
end
end
class File
def initialize(source, destination)
@source = source
@destination = destination
end
def merge
#File merge code here
end
end
class Post
def initialize(source, destination)
@source = source
@destination = destination
end
def merge
#Post merge code here
end
end
end
a = Convert::Merge.new(source_id, destionation_id)
a.merge
Is this correct way to handle this action ? How can I handle this in a better way ?
@source_ids = source_ids.class == Array ? source_ids : [source_ids]
as@source_ids = [*source_ids]
. For example,[*[1,2,3]] => [1, 2, 3]
,[*2] => [2]
. \$\endgroup\$